Probleme mit PrintPreview

Für Fragen von Einsteigern und Programmieranfängern...
wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: Probleme mit PrintPreview

Beitrag von wp_xyz »

hbr hat geschrieben:
Fr 10. Mär 2023, 13:48
ich Installiere über fpcupdeluxe(auch GitLab),
Habe dann die Trunkversionen installiert.
Dann hat er LZ 2.3.0 und FPC 3.3.1 installiert.
Dort sind die Änderungen nicht enthalten, habe sie dann Manuel eingesetzt.
Das kann eigentlich nicht sein. Hab gerade in der GitLab Web-Ansicht nachgesehen: das IpHtmlTypes ist in der uses-Zeile von IpHtmpPV enthalten (https://gitlab.com/freepascal.org/lazar ... htmlpv.pas).

hbr
Beiträge: 285
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
CPU-Target: 32/64,ARM(RPi)

Re: Probleme mit PrintPreview

Beitrag von hbr »

wp_xyz hat geschrieben:
Fr 10. Mär 2023, 13:53
Wenn du dir diese Akrobatik sparen willst, müsstest du nach einer anderen Bibliothek für gif-Support suchen - evtl reicht GifAnim oder GifViewer im OPM, oder vielleicht kann auch bgrabitmap mit gif umgehen.
OK,
es funktioniert ja auch (unter Window) nicht mit den *.png.
.gif kann man ja ersetzen.
Aber der Transparente Hintergrund bleibt schwarz,
gedruckt über LZ, ob .gif oder .png und das ist das Problem.

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: Probleme mit PrintPreview

Beitrag von wp_xyz »

hbr hat geschrieben:
Fr 10. Mär 2023, 14:18
es funktioniert ja auch (unter Window) nicht mit den *.png.
Wiegesagt, bei mir funktioniert es, und damit ist klar, dass es kein Problem der IPro Komponente ist. Hast du Zugriff auf einen anderen Drucker? Oder vielleicht kannst du dir einen Druckertreiber eines ähnlichen Modells installieren? Oder es gibt im Druckerdialog Einstellungen, die das bewirken (Druckqualität, verwendetes Papier, ...)?

hbr
Beiträge: 285
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
CPU-Target: 32/64,ARM(RPi)

Re: Probleme mit PrintPreview

Beitrag von hbr »

Wenn ich das HTML-File z.B. mit Mozilla aufrufe und drucke, ist alles OK, so wie es sein soll.
Also ist die Druckausgabe es installierten Windowsdrucker OK.
Wenn ich es über das IpHtml Drucke, ist das Ergebnis in der Vorschau Druckerausgabe(RintPreview) in Ordnung.
Wird es gedruckt sind die Bildhintergründe schwarz(PDF ist aber OK).

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: Probleme mit PrintPreview

Beitrag von wp_xyz »

hbr hat geschrieben:
Fr 10. Mär 2023, 15:00
Wenn ich das HTML-File z.B. mit Mozilla aufrufe und drucke, ist alles OK, so wie es sein soll.
Also ist die Druckausgabe es installierten Windowsdrucker OK.
Wenn ich es über das IpHtml Drucke, ist das Ergebnis in der Vorschau Druckerausgabe(RintPreview) in Ordnung.
Wird es gedruckt sind die Bildhintergründe schwarz(PDF ist aber OK).
Das habe ich schon verstanden. Aber mit meinem Drucker ist die Ausgabe in Ordnung, sowohl unter Windows, als auch (etwas eingeschränkt wegen des gif) unter Linux. Daher muss es an deinem Drucker/Druckertreiber liegen. Und daher auch die Bitte, mit dem Drucker zu experimentieren (anderer Drucker, anderer Treiber, andere Einstellungen). Und vor allem, wenn ich einen "Fehler" nicht reproduzieren kann, weiß ich nicht, was ich da tun soll.

IpHtml macht ein "stink-normales" Stretchdraw des Bildes auf den canvas des Drucker. Das ist naheliegend. Was Mozilla macht, wissen wir nicht. Wie oben theo schon vorschlug, mache dasselbe mit einem einfachen png. Hier ist einfacher Code dafür:

Code: Alles auswählen

uses
  Printers, OSPrinters;

function mm2Px(mm: Double; DPI: Integer): Integer;
begin
  Result := round(mm / 25.4 * DPI);
end;


{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
const
  pngFile = 'Add_08_64.png';
var
  pic: TPicture;
  png: TPortableNetworkGraphic;
  bmp: TBitmap;
  w, h, x, y: Integer;
begin
  Printer.BeginDoc;
  pic := TPicture.Create;
  try
    pic.LoadFromFile(pngFile);
    x := mm2px(10, Printer.XDPI);
    y := mm2px(10, Printer.YDPI);
    w := mm2px(50, Printer.XDPI);
    h := mm2px(50, Printer.XDPI);
    Printer.Canvas.StretchDraw(Rect(x, y, x+w, y+h), pic.Graphic);
  finally
    pic.Free;
  end;

  png := TPortableNetworkGraphic.Create;
  try
    png.LoadFromFile(pngFile);
    x := x + w;
    Printer.Canvas.StretchDraw(Rect(x, y, x+w, y+h), png);
  finally
    png.Free;
  end;

  Printer.EndDoc;
end;
Hier wird eine png-Datei (gegeben durch den Dateinamen "pngFile") einmal über TPicture und einmal direkt über TPortableNetworkGraphic geladen und dann per StretchDraw auf dem Canvas des Druckers ausgegeben. Bei mir funktioniert das mit der angegebenen transparenten Datei aus den Lazarus general-purpose images einwandfrei, ohne einen schwarzen Außenbereich. Und bei dir?

Und was ist dein Betriebssystem? Ich bin auf Win-11.

hbr
Beiträge: 285
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
CPU-Target: 32/64,ARM(RPi)

Re: Probleme mit PrintPreview

Beitrag von hbr »

Hier wird eine png-Datei (gegeben durch den Dateinamen "pngFile") einmal über TPicture und einmal direkt über TPortableNetworkGraphic geladen und dann per StretchDraw auf dem Canvas des Druckers ausgegeben. Bei mir funktioniert das mit der angegebenen transparenten Datei aus den Lazarus general-purpose images einwandfrei, ohne einen schwarzen Außenbereich. Und bei dir?

Und was ist dein Betriebssystem? Ich bin auf Win-11.
Win10,

also verstehen tue ich das nicht, aus allen anderen Anwendungen Funktioniert es,
wenn ich z.B. in Word, Writer, jeder Browser die .png hineinziehe und drucke, ist alles OK.

Also mit dem Tool war das gleiche, keine Transparenz.
Daraufhin, habe ich die Druckertreiber (waren Aktuell, neuer Drucker) entfernt und die Windows-Treiber installiert.
Danach funktionierte es, warum auch immer, ist mir ein Rätzel.
Ich hätte nie gedacht, wenn es mit all den anderen Programmen (Anwendungen) Funktioniert,
dann kann es ja nicht an den Druckertreibern liegen.
Ich frage mich nun, was ist der Unterschied zwischen den Anwendungen und der LZ-Ausgabe?

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: Probleme mit PrintPreview

Beitrag von wp_xyz »

Nur so vor mich hingesponnen: Es könnte sein, dass auf dem Druckertreiber die StretchDraw-Funktion schlecht implementiert ist und die anderen Anwendungen aber zuerst in ein Buffer-Bitmap schreiben (per StretchDraw, oder vielleicht sogar mit einer verbesserten Skalierungsroutine, mit der man eine bessere Qualität erzielt) und dieses dann aber per einfachem Draw an den Drucker schicken.

Das habe ich im folgenden nachgestellt. Wenn meine Theorie stimmt, müsste der "fehlerhafte" Druckertreiber das Testbild nun fehlerfrei ausgeben:

Code: Alles auswählen

procedure TForm1.Button2Click(Sender: TObject);
const
  pngFile = 'Add_08_64.png';
var
  pic: TPicture;
  bmp: TBitmap;
  w, h, x, y: Integer;
begin
  Printer.BeginDoc;

  png := TPortableNetworkGraphic.Create;
  try
    png.LoadfromFile(pngFile);
    x := mm2px(10, Printer.XDPI);
    y := mm2px(10, Printer.YDPI);
    w := mm2px(50, Printer.XDPI);
    h := mm2px(50, Printer.XDPI);
    bmp := TBitmap.Create;
    try
      bmp.PixelFormat := pf32Bit;
      bmp.SetSize(w, h);
      bmp.Canvas.Brush.Color := clWhite;
      bmp.Canvas.FillRect(0, 0, w, h);
      bmp.Canvas.StretchDraw(Rect(0, 0, w, h), png);
      bmp.SaveToFile('test.bmp');
      Printer.Canvas.Draw(x, y, bmp);
    finally
      bmp.Free;
    end;
  finally
    png.Free;
  end;

  Printer.EndDoc;
end;
Wenn das so wäre, dann könnte man natürlich die Ausgabe von Bitmaps durch das IpHtmlPanel auch so implementieren.

Benutzeravatar
six1
Beiträge: 788
Registriert: Do 1. Jul 2010, 19:01

Re: Probleme mit PrintPreview

Beitrag von six1 »

also verstehen tue ich das nicht, aus allen anderen Anwendungen Funktioniert es,
wenn ich z.B. in Word, Writer, jeder Browser die .png hineinziehe und drucke, ist alles OK.
Wer einen HP Tintenspritzer der Anfangszeiten hatte, kannte dieses Problem.
Wenn HP drauf stand und im Ausdruck etwas schwarz war, war es eigentlich immer der Druckertreiber.

Ich habe da mit D6 schon arge Probleme beim Ausdruck von Grafiken. Mehrmals musste ich damals auf ein Update seitens HP warten.

Mag sein, dass du keinen HP hast, aber als ich gestern deinen Beitrag las, hatte ich sofort "Druckertreiber" im Kopf :lol:
Gruß, Michael

hbr
Beiträge: 285
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
CPU-Target: 32/64,ARM(RPi)

Re: Probleme mit PrintPreview

Beitrag von hbr »

Ich hatte einen Laser Kyocera mdf Ducker im Einsatz,
der wegen eines mechanischen Defekt durch einen Brother Laser MFC ersetz wurde.
Mir war ein solches Verhalten gänzlich unbekannt.
Habe hauptsächlich die verschiedensten Laser Marken installiert und mir sind nie solche auffällige Probleme untergekommen, daher war ich mehr als überrascht.
Aber man lernt immer noch hinzu, egal wie alt man ist.

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: Probleme mit PrintPreview

Beitrag von wp_xyz »

@hbr: Kannst du den Code-Schnippsel zwei Posts weiter oben (10. März 22:32) einmal mit dem "defekten" Druckertreiber ausprobieren? Wenn nun das Bild ohne schwarzen Rand dargestellt wird, hätte ich eine Idee, wie man das IpHtmlPanel fixen könnte.

NB: Du musst nicht jedesmal den alten Druckertreiber deinstallieren. Installiere einfach den neuen Druckertreiber dazu, selbst wenn er dasselbe Gerät bedient. Du musst ihm nur einen anderen Namen geben.

hbr
Beiträge: 285
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
CPU-Target: 32/64,ARM(RPi)

Re: Probleme mit PrintPreview

Beitrag von hbr »

@ wp_xyz
Ich versuche gerade die Installation wieder zu rekonstruieren wo der Fehler aufgetreten ist. Die Broher Treiber waren wie ein Virus und so ohne weiters nicht vom System zu entfernen. Das nach installieren der Originalen Brother Treiber brachte auch nicht das gewünschte Fehlerergebnis. Nun habe ich ein älteres PC-Image installiert und versuche meine Anfangs Druckerinstallation des neuen Druckers zu rekonstruieren. Das dauert aber etwas weil meine PC Images ca. 200GB goß sind.
Ich melde mich und teile das Ergebnis mit.

Ach ja, wieso wird bei dem Ersten Tool Post das Bild zweimal nebeneinander gedruckt?

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: Probleme mit PrintPreview

Beitrag von wp_xyz »

hbr hat geschrieben:
Sa 11. Mär 2023, 15:50
Ach ja, wieso wird bei dem Ersten Tool Post das Bild zweimal nebeneinander gedruckt?
Weil's so programmiert ist. Ich wollte vergleichen, ob es einen Unterschied macht, wenn die Datei einmal mit Hilfe von TPicture und einmal direkt mit Hilfe von TPortableNetworkImage geladen wird (sollte eigentlich dasselbe sein, aber man weiß ja nie...).

hbr
Beiträge: 285
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
CPU-Target: 32/64,ARM(RPi)

Re: Probleme mit PrintPreview

Beitrag von hbr »

@wp_xyz
habe den Zustand rekonstruiert (Druckertreiber von der CD installiert).
Das Ergebnis Beider Drucks (einmal mit dem Ersten und dem zweiten Code) ist Identisch, schwarzer Hintergrund.
Soll ich ein Image des Treiberzustandes erstellen (wegen weitere Forschungsmöglichkeiten)?
Oder ist das damit erledigt, soll heißen, es ist nun wie es ist?

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: Probleme mit PrintPreview

Beitrag von wp_xyz »

Aktuell ist das für mich erledigt. Ich habe keine Idee, was man noch machen könnte, der große Druckerspezialist bin ich auch nicht. Aber man kann ja nie wissen. Also wenn du noch 200 GB erübrigen kannst, ...

Antworten