Autor Beitrag
Dusty
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 62

Windows XP
Delphi 5 Enterprise
BeitragVerfasst: Di 26.01.10 19:05 
Ich möchte ein JPEG in Seitengröße als Formular drucken, darauf kommen die Texte.
Mit dem PDF Drucker funktioniert das wunderbar - der Laserjet druckt jedoch das JPEG nicht.
Auch als Bitmap nicht. Woran kann das liegen?


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
var Image1 : TImage;
    bmp    : TBitMap; // Versuch, das JPEG als Bitmap unterzujubeln - auch fehlgeschlagen
begin
   if PrintDialog1.Execute then begin
      Printer.Title := 'Meldeschein';
      Printer.Orientation := poPortrait; // Hochformat
      Printer.BeginDoc;
      Image1 := TImage.Create(nil);

      try
         DruckerInitialisierung;
         if FileExists(Programmpfad+'Formulare\Meldeschein.JPG'then
            Image1.Picture.LoadFromFile(Programmpfad+'Formulare\Meldeschein.JPG')
         else
            MessageDlg('Formular Meldeschein nicht gefunden!',mtError,[mbOK],0);

         with Printer.Canvas do begin

            // Draw(0, 0, Image1.Picture.Graphic); --> geht nicht auf Drucker
            
            bmp := TBitmap.Create;
            bmp.PixelFormat := pf8bit; // keine Auswirkung auf das Ergebnis
            bmp.height := image1.picture.graphic.height;
            bmp.Width :=  image1.picture.graphic.Width;
            bmp.Canvas.Draw(0,0,Image1.Picture.Graphic);
            Draw(00, bmp); // JPG als Bitmap - geht leider auch nicht; 
            
            bmp.Free;

....


Im PDF wird das Formular sowohl mit Draw(Image1) also auch mit Draw(bmp) korrekt erzeugt.
Nur der Drucker macht da nicht mit :-(


Habe gerade herausgefunden, dass der Drucker das Formular druckt, wenn ich keinen Text nachschiebe.
Aber es muss doch möglich sein, Text auf das JPEG zu drucken?!

Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Di 26.01.2010 um 18:16

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Wenn ich das Bitmap beschreibe (with bmp.canvas do ...) und das veränderte Bitmap zum Drucker schicke, habe ich übrigens das gleiche Ergebnis - Druckerblatt leer - PDF-Blatt ok.
Jakob_Ullmann
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: Di 26.01.10 19:56 
Hast du mal StretchDraw probiert? Vielleicht ist das JPEG einfach zu klein für eine Druckerauflösung. Ansonsten kannst du ja mal versuchen, einen Text an den Drucker zu senden, rein zur Probe. Schriftgrößen sind ja zudem auflösungsunabhängig.
Dusty Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 62

Windows XP
Delphi 5 Enterprise
BeitragVerfasst: Di 26.01.10 20:40 
Mit Stretchdraw geht es auch nicht.
Das JPEG ist auch nicht zu klein.

Wenn ich statt auf das Canvas vom Drucker auf das Bitmap schreibe und dann drucke,
habe ich das gleiche Ergebnis: PDF ok, Blatt leer.

Speichere ich das veränderte Bitmap und drucke es dann, geht es auch auf dem Drucker!

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
         
        with bmp.canvas do begin        

            ...
            Draw(0,0,Image1.Picture.Graphic);

            Font.Name    := 'Arial';
            Font.Size    := 27;

            Textout(800,284,EditTurniername.Text);
            Textout(700,352,EditAusrichter.Text + ' / ' + EditTurnierort.text);

            ....

         end;

         bmp.SaveToFile(Programmpfad+'druck.bmp');

         if PrintDialog1.Execute then begin
            Printer.Title := 'Meldeschein';
            Printer.Orientation := poPortrait; // Hochformat
            Printer.BeginDoc;
            DruckerInitialisierung;
            Image1.Picture.LoadFromFile(Programmpfad+'druck.bmp');
            Printer.Canvas.Draw(00, Image1.Picture.Bitmap );
            Printer.EndDoc;
         end;


So ganz toll finde ich die Lösung aber nicht. Und außerdem möchte ich wissen,
warum ich nicht auf der Printer.Canvas Leinwand machen kann, was ich will ;-)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19326
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 26.01.10 21:30 
Also ich kann so keinen Fehler reproduzieren. :nixweiss:
Ich weiß nur nicht ob es am Drucker liegt oder ob ich was anders mache als du.

Hast du vielleicht eine kleine Demo bzw. kannst eine schnell machen?
Dusty Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 62

Windows XP
Delphi 5 Enterprise
BeitragVerfasst: Di 26.01.10 22:20 
Hier die Demo mit drei Ansätzen das Formular zu drucken.
Variante 1 geht,
Variante 2 hin und wieder - das reicht aber nicht -
und bei Variante 3 wird nur der Text gedruckt, nicht aber das Formular / die Grafik.

Na dann mal viel Spaß :lol:

Bin gespannt, ob du dahinter kommst.
Dusty Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 62

Windows XP
Delphi 5 Enterprise
BeitragVerfasst: Di 02.02.10 21:18 
Ich bin jetzt zufällig fündig geworden. In dem Buch "Tipps und Tricks zu Delphi" steht, dass es mit dem Druckertreiber zusammenhängt. Man muss die Farbtiefe mit dem Parameter pixelformat von Hand einstellen, damit es geht. Ausprobiert habe ich es allerdings noch nicht.