Bug im HTML- Panel PrintPreview
-
- Beiträge: 321
- 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)
Bug im HTML- Panel PrintPreview
Hallo Forum,
hat schon jemand den Bug IpHtmlPanel.PrintPreview beseitigt?
Es ist ja z.Z. so, dass wenn mehrer Seiten gedruckt werden sollen,
der letzte Satz einen Absatz bekommt und dieser noch einmal auf der nächsten Seite wiederholt gedruckt wird.
So ist natürlich das ausdrucken von mehreren Seiten nicht möglich.
Eventuell kann ja jemand helfen.
Gruß
hat schon jemand den Bug IpHtmlPanel.PrintPreview beseitigt?
Es ist ja z.Z. so, dass wenn mehrer Seiten gedruckt werden sollen,
der letzte Satz einen Absatz bekommt und dieser noch einmal auf der nächsten Seite wiederholt gedruckt wird.
So ist natürlich das ausdrucken von mehreren Seiten nicht möglich.
Eventuell kann ja jemand helfen.
Gruß
Re: Bug im HTML- Panel PrintPreview
Kannst Du dafür ein Minimalbeispiel erstellen?! Ich habe eben das Drucken per Preview probiert und es funktioniert bei mir problemlos - mehrere Seiten, ohne ungewöhnliche Umbrüche (Laz.1.2 32bit unter Win7 64bit).
Könnt mir noch vorstellen, dass die Auflösung Deines Druckers nicht mit dem Preview harmoniert und daher umgebrochen wird.
Gibt es dafür einen Bugeintrag? Wenn ja, dann müsste der Fortschritt dort erkennbar sein. Wenn nein, dann wäre es schön, wenn Du einen erstellst, am besten mit einem Minimalbeispiel. http://wiki.freepascal.org/How_do_I_cre ... _report/dehbr hat geschrieben:hat schon jemand den Bug IpHtmlPanel.PrintPreview beseitigt?
Könnt mir noch vorstellen, dass die Auflösung Deines Druckers nicht mit dem Preview harmoniert und daher umgebrochen wird.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 321
- 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: Bug im HTML- Panel PrintPreview
Hallo Michl,
danke für die Antwort,
Ich weiß natürlich nicht wie Du das getestet hast, aber es ist ein eindeutiger Fehler,
der meistens bei der dritten Seite auftaucht. Wenn man zum Testen keinen eindeutigen Text nimmt,
fällt das auch natürlich nicht auf.
Übrigens als font-size benutze ich 18px, h1= 24px, h2 = 20px.
Body 1.2em. Aber das pasiiert auch wenn ich die Styles- Angabe im header weglasse.
Am Ende der dritten Seite wird der letzte Satz mit einem halben Zeilenumbuch (gemeint ist der Abstand... doch es gibt normal keinen) dargestellt und dieser wird auf der vierten Seite wiederholt.
Das ist natürlich auch in der Preview- Vorschau zu sehen, der jeweilige Satz ist dann oben oder unten nur zur Hälfte sichtbar.
Ich hatte bislang V1.08 und bei V1.2 hat sich nicht geändert.
Doch! !! Bei V1.2 ist die Vorschau im Preview völlig unleserlich.
Fazit die Druckfunktion ist unbrauchbar, eventuell hat ja jemand eine Idee, oder eine Funktionierende Druckausgabe?
Ach so, an der Druckauflösung kann es nicht liegen, ich habe 3 verschieden Drucker ausprobiert,
zuletzt habe ich einen PDF-Drucker verwendet, ist billiger vom Papierverbrauch und Toner oder Tinte.
Der Fehler ist mir bislang auch nicht aufgefallen, da die Druckausgabe bislang meistens nur eine Seite hatte.
Gruß
danke für die Antwort,
Ich weiß natürlich nicht wie Du das getestet hast, aber es ist ein eindeutiger Fehler,
der meistens bei der dritten Seite auftaucht. Wenn man zum Testen keinen eindeutigen Text nimmt,
fällt das auch natürlich nicht auf.
Übrigens als font-size benutze ich 18px, h1= 24px, h2 = 20px.
Body 1.2em. Aber das pasiiert auch wenn ich die Styles- Angabe im header weglasse.
Am Ende der dritten Seite wird der letzte Satz mit einem halben Zeilenumbuch (gemeint ist der Abstand... doch es gibt normal keinen) dargestellt und dieser wird auf der vierten Seite wiederholt.
Das ist natürlich auch in der Preview- Vorschau zu sehen, der jeweilige Satz ist dann oben oder unten nur zur Hälfte sichtbar.
Ich hatte bislang V1.08 und bei V1.2 hat sich nicht geändert.
Doch! !! Bei V1.2 ist die Vorschau im Preview völlig unleserlich.
Fazit die Druckfunktion ist unbrauchbar, eventuell hat ja jemand eine Idee, oder eine Funktionierende Druckausgabe?
Ach so, an der Druckauflösung kann es nicht liegen, ich habe 3 verschieden Drucker ausprobiert,
zuletzt habe ich einen PDF-Drucker verwendet, ist billiger vom Papierverbrauch und Toner oder Tinte.
Der Fehler ist mir bislang auch nicht aufgefallen, da die Druckausgabe bislang meistens nur eine Seite hatte.
Gruß
Re: Bug im HTML- Panel PrintPreview
Um so wichtiger wäre es, dass du hier ein nachvollziehbares Demoprojekt hochlädst.
Re: Bug im HTML- Panel PrintPreview
Habe jetzt mal eine allgemeine Html-Seite geladen und kann dort den Bug nachvollziehen (Siehe Bild - ARM wird auf vorhergehender und nachfolgender Seite dargestellt). Weitere Fehler wären, die Aufzählungspunkte fehlen teilweise und Platz für kursive Schrift wird nicht richtig berechnet.
Evtl. hat jemand Lust/Zeit sich durch den Code zu hangeln und mal nachzuschauen?! Falls nicht, kannst Du dafür ja einen Bugeintrag erstellen (Laz.1.2 und Laz.1.3-Trunc) zeigen bei mir das gleiche Verhalten.
Minimalbeispiel anbei.
Evtl. hat jemand Lust/Zeit sich durch den Code zu hangeln und mal nachzuschauen?! Falls nicht, kannst Du dafür ja einen Bugeintrag erstellen (Laz.1.2 und Laz.1.3-Trunc) zeigen bei mir das gleiche Verhalten.
Minimalbeispiel anbei.
- Dateianhänge
-
Minimalbsp.zip
- (141.15 KiB) 58-mal heruntergeladen
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: Bug im HTML- Panel PrintPreview
Unter Unit IpHtml, Zeile 17780, die Größe des Druckbereichs verkleinern, schafft Abhilfe für Dein Problem, zumindest funktioniert das bei mir (evtl. als Workaround). Warum, weiss ich noch nicht, muss aber jetzt weg...
Code: Alles auswählen
procedure TIpHtmlInternalPanel.PrintPages(FromPage, ToPage: Integer);
...
CR := Rect(0, 0, PrintWidth, 0); {!!.10}
for i := FromPage to ToPage do begin
CR.Top := (i - 1) * PrintHeight; {!!.10}
CR.Bottom := Cr.Top + PrintHeight - 150; {!!.10} //hier -150 oder so...
Hyper.Render(Printer.Canvas, CR, False, PrintTopLeft); {!!.10}
...
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 321
- 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: Bug im HTML- Panel PrintPreview
Hallo Michl,
wie schön das es Bestätigt wurde, Danke.
Wäre sehr schön, wenn jemand sagen könnte woran das liegt,
dass die Darstellung im Prewiev sich so verschlechtert hat gegenüber der Version 1.0.8.
Für alle die es probieren oder nachvollziehen wollen, hier eine Beispiel.
Gruß
wie schön das es Bestätigt wurde, Danke.
Wäre sehr schön, wenn jemand sagen könnte woran das liegt,
dass die Darstellung im Prewiev sich so verschlechtert hat gegenüber der Version 1.0.8.
Für alle die es probieren oder nachvollziehen wollen, hier eine Beispiel.
Gruß
- Dateianhänge
-
HTML-Test.zip
- (5.08 MiB) 65-mal heruntergeladen
-
- Beiträge: 726
- Registriert: Do 27. Sep 2012, 00:07
- OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
- CPU-Target: x86_64-win64
- Wohnort: Hamburg
Re: Bug im HTML- Panel PrintPreview
Ich habe Mininalbsp.zip von oben genommen, weil untere zu groß für meine mobile Verbindung ist.
Beim Vorschau gibt's diesen Effekt was du beschrieben hast aber beim PDF-Druck (PDFCreator) erscheint alles normal.
Die Beispielseite ist für IPHtmlPanel ist ziemlich kompliziert, diese Komponente ist für einfaches HTML erstellt.
Ich werde mal testen ob das bei einfaches HTML (Tabelle, Texte ohne viel Verschachtelung) auch zutrifft weil ich diese Komponente in mein Programm für einfache Berichte verwenden will.
EDIT:
Beim Ausdruck gibt es den erwähnten Fehler, ich hab's übersehen.
Beim Vorschau gibt's diesen Effekt was du beschrieben hast aber beim PDF-Druck (PDFCreator) erscheint alles normal.
Die Beispielseite ist für IPHtmlPanel ist ziemlich kompliziert, diese Komponente ist für einfaches HTML erstellt.
Ich werde mal testen ob das bei einfaches HTML (Tabelle, Texte ohne viel Verschachtelung) auch zutrifft weil ich diese Komponente in mein Programm für einfache Berichte verwenden will.
EDIT:
Beim Ausdruck gibt es den erwähnten Fehler, ich hab's übersehen.
Zuletzt geändert von Soner am Mo 21. Apr 2014, 15:55, insgesamt 1-mal geändert.
-
- Beiträge: 726
- Registriert: Do 27. Sep 2012, 00:07
- OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
- CPU-Target: x86_64-win64
- Wohnort: Hamburg
Re: Bug im HTML- Panel PrintPreview
Ja es hat Fehler. Es macht bei fehlerfreien einfachen HTML-Seite sowohl beim Vorschau als beim Druck (PDF-Drucker) Fehler. Wie du beschrieben hast, druckt es letzte Zeile am Anfang nächste Zeile nochmal.
Ich hoffe du kannst den Fehler bis ca. 2 Wochen korregieren
Ich hoffe du kannst den Fehler bis ca. 2 Wochen korregieren

-
- Beiträge: 321
- 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: Bug im HTML- Panel PrintPreview
Hallo Soner,
ich benutze ja auch nur ganz einfache HTML's, nur das sie halt ziemlich lang sind.
Der Fehler hängt damit zusammen, wenn zuvor h1, h2 verwendet wurde, dann stimmt die Berechnung nicht.
Weis allerdings nicht wo die Berechnung stattfindet.
Aber noch einmal die Frage zur Print- preview- Anzeige,
weiß jemand wo man die Qualität der Anzeige verbessern kann?
Habe versucht in der PaintBox1 des Panels unter Font> Quality andere Werte zu verwenden,
doch dieses bringt keine Veränderung.
Gruß
ich benutze ja auch nur ganz einfache HTML's, nur das sie halt ziemlich lang sind.
Der Fehler hängt damit zusammen, wenn zuvor h1, h2 verwendet wurde, dann stimmt die Berechnung nicht.
Weis allerdings nicht wo die Berechnung stattfindet.
Aber noch einmal die Frage zur Print- preview- Anzeige,
weiß jemand wo man die Qualität der Anzeige verbessern kann?
Habe versucht in der PaintBox1 des Panels unter Font> Quality andere Werte zu verwenden,
doch dieses bringt keine Veränderung.
Gruß
Re: Bug im HTML- Panel PrintPreview
So, hab mir das Problem mal zu Gemüte geführt. Der Fehler liegt darin, dass die Anzeige (Canvas) für den Bildschirm gleich behandelt wird, wie die vom Drucker. Es wird nicht gezählt, welcher Teil schon gedruckt wurde sondern es wird je Page geprüft, ob sich darzustellende Bereiche mit dieser überschneiden. Wenn ja, dann werden diese gezeichnet. Das ist gut für die Anzeige auf dem Bildschirm, schlecht für den Druck (je nachdem, wohin gescrollt wurde, wird der obere und der untere Teil abgeschnitten dargestellt - beim Drucken ist das genauso, daher doppelte Wörter bei überschneidenden Page-Bereichen).
Eine Lösung für das Problem wäre zu definieren, wann eine Darstellung per Anzeige oder per Druck erfolgt und dementsprechend nur zu zeichnen, wenn der obere Bereich oder der untere Bereich eines Zeichenbereichs komplett sichtbar ist (habe mich für den oberen Bereich entschieden, kann ich/kannst Du aber auch noch ändern). Habe den Patch angefügt (ich definiere einfach mit einer globalen Variable, wenn gedruckt wird - find ich nicht schön, aber ohne die ganzen Klassen zu ändern, war das jetzt das einfachste), damit wäre das doppelte Sätze/Wörter Schreiben, soweit ich testen konnte, erstmal abgehakt.
Viel Erfolg!
PS:
Die Qualität der Preview-Anzeige könntest Du verbessern, indem Du inden Text nicht mit TextRect sondern gerendert übergibst.
Oder Du vergrößerst das Preview-Fenster, damit erhöht sich dessen Qualtität automatisch.
Eine Lösung für das Problem wäre zu definieren, wann eine Darstellung per Anzeige oder per Druck erfolgt und dementsprechend nur zu zeichnen, wenn der obere Bereich oder der untere Bereich eines Zeichenbereichs komplett sichtbar ist (habe mich für den oberen Bereich entschieden, kann ich/kannst Du aber auch noch ändern). Habe den Patch angefügt (ich definiere einfach mit einer globalen Variable, wenn gedruckt wird - find ich nicht schön, aber ohne die ganzen Klassen zu ändern, war das jetzt das einfachste), damit wäre das doppelte Sätze/Wörter Schreiben, soweit ich testen konnte, erstmal abgehakt.
Viel Erfolg!
PS:
Die Qualität der Preview-Anzeige könntest Du verbessern, indem Du in
Code: Alles auswählen
procedure TIpHtmlNodeBlock.RenderQueue;
...
if CurWord.AnsiWord <> NAnchorChar then //JMN
aCanvas.TextRect(R, P.x, P.y, NoBreakToSpace(CurWord.AnsiWord));
...
Oder Du vergrößerst das Preview-Fenster, damit erhöht sich dessen Qualtität automatisch.
- Dateianhänge
-
iphtml.pas.patch
- (1.62 KiB) 66-mal heruntergeladen
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 321
- 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: Bug im HTML- Panel PrintPreview
Hallo Michl,
vielen Dank für den Patch und die Mühe.
Das Fenster vergrößern bringt nicht wirklich etwas,
die Darstellung bleibt unleserlich ( gegenüber V1.0.8 ).
Die Frage ist doch, was hat sich bei Lazarus Version 1.2.0 gegenüber 1.0.8 geändert?
Das IpHtml nicht, den dieses ist in beiden Versionen Identisch.
Denn wenn man mit 1.0.8 compalliert, so ist diePreview-Anzeige viel deutlicher als mit 1.2.0
Wieso ?
Mit 1.0.8 war das noch brauchbarer.
Gruß
vielen Dank für den Patch und die Mühe.
Das habe ich nicht so ganz verstanden.Michl hat geschrieben:PS:
Die Qualität der Preview-Anzeige könntest Du verbessern, indem Du in...den Text nicht mit TextRect sondern gerendert übergibst.Code: Alles auswählen
procedure TIpHtmlNodeBlock.RenderQueue;
Oder Du vergrößerst das Preview-Fenster, damit erhöht sich dessen Qualtität automatisch.
Das Fenster vergrößern bringt nicht wirklich etwas,
die Darstellung bleibt unleserlich ( gegenüber V1.0.8 ).
Die Frage ist doch, was hat sich bei Lazarus Version 1.2.0 gegenüber 1.0.8 geändert?
Das IpHtml nicht, den dieses ist in beiden Versionen Identisch.
Denn wenn man mit 1.0.8 compalliert, so ist diePreview-Anzeige viel deutlicher als mit 1.2.0
Wieso ?
Mit 1.0.8 war das noch brauchbarer.
Gruß
-
- Beiträge: 321
- 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: Bug im HTML- Panel PrintPreview
Nachtrag zum Panel. Bilder sagen mehr als tausend Worte.
Wenn hier vergrößert wird bleibt es unleserlich (V1.2.0).
Wenn man hier vergrößert kann man es gut erkennen (V1.08)Wenn hier vergrößert wird bleibt es unleserlich (V1.2.0).
Re: Bug im HTML- Panel PrintPreview
Evtl. kann da IpHtml nicht mal was dafür. Die Stelle, an der letztendlich auf das Canvas gezeichnet wird, hatte ich ja oben schon benannt (Unit IpHtml: TIpHtmlNodeBlock.RenderQueue):hbr hat geschrieben:Wenn hier vergrößert wird bleibt es unleserlich (V1.2.0).
Code: Alles auswählen
aCanvas.TextRect(R, P.x, P.y, NoBreakToSpace(CurWord.AnsiWord));
Zuletzt geändert von Michl am Di 22. Apr 2014, 11:37, insgesamt 1-mal geändert.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: Bug im HTML- Panel PrintPreview
Es zwar richtig, dass dort auf das Canvas gezeichnet wird, da aber das gecachte Canvas die gleiche Größe vom Drucker hat, wird dieses letztendlich gestretcht auf dem Preview dargestellt. Dort liegt der Hase im Pfeffer:Michl hat geschrieben:Da diese eine Procedure/Methode von der Unit Graphics (LCL) aufruft, wäre die Ursache IMHO eher dort zu suchen.
Fügst Du in Unit IpHtmlPv vor Zeile 245 folgenden Code ein
Code: Alles auswählen
procedure TIpHTMLPreview.Render;
...
PaintBox1.Canvas.AntialiasingMode:=amOn; //hier
PaintBox1.Canvas.StretchDraw(R, Scratch);
...
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;