![]() |
DynaPDF
Guten Morgen,
ich hoffe, mir kann einer helfen. Wir nutzen DynaPDF (eine ältere Version, 1.7.0.23), und Delphi 7.Ich möchte einfach nur in ein recht schmales Textrectangle mit der DynaPDF Funktion WriteFTextW bestimmten Text, als auch eine Masse mit Einheit drucken (bspw. "1 kg"). Wie im Beispiel immer mit einem Leerzeichen dazwischen. Wenn die Zeile voll ist, bricht DynaPDF natürlich um. Aber das soll es zwischen Masse und Einheit nicht. Ich habe es schon mit ASCII dezimal 255 (non breaking space) versucht, aber das druckt an der Stelle ein Sonderzeichen. Ich habe es mit dem Trick versucht, das Sonderzeichen (oder ein beliebiges anderes) an der Stelle weiß zu färben, damit man es nicht sieht, damit der Text eben nicht umgebrochen wird. Leider bricht DynaPDF dann doch wieder um! Ich habe leider kein DynaPDF-Support Forum im Netz entdeckt, ich dachte, vielleicht nutzt hier ja auch jemand DynaPDF, und hat das Problem auch schon einmal gehabt. Vielen Dank und ein schönes Wochenende! |
AW: DynaPDF
Wenn der Umbruch nicht vor der Einheit kommen darf, dann muss er vorher kommen (vor der Zahl).
Anscheinend beachtet DynaPDF das non breaking space nicht. Du könntest versuchen den Umbruch selbst vorzunehmen.
Delphi-Quellcode:
Dazu benötigt man noch die Möglichkeit die Textlänge von beliebigen Strings zu berechnen. *)
// inlist = mehrzeiliger Text
// oulist = umgebrochener Text // maxwidth = max Breite der Textbox procedure DoWordBreaks(inlist, outlist:TStrings; maxwidth:double; canvas:TCanvas); Man nimmt Zeile für Zeile, prüft die Länge und wenn zu lang geht man zurück zum nächsten Leerzeichen bis es passt. Nach dem Textumbruch ersetzt man die non breaking spaces durch normale Leerzeichen und gibt das Ergebnis an DynaPDF weiter. *) das ist er knackpunkt - gibt es eine Funktion in DynaPDF die einen String und einen Font als Input hat und die Textlänge liefert? |
AW: DynaPDF
Guter Ansatz,
ich habe noch mal in die API-Referenz geschaut, es gibt eine Funktion zur Berechnung der Textbreite-
Delphi-Quellcode:
function GetTextWidthW(const AText: WideString): Double;
Davon abgesehen, habe ich dem DynaPDF Entwickler eine mail geschrieben, mit der Frage warum "non breaking space" - ASCII 255 laut meiner Tabelle - nicht funktioniert. Hier seine Antwort: Zitat:
|
AW: DynaPDF
Mit #160 funktioniert es!
Wie konnte ich mit #255 so irren? Ich glaube, ich muss mein Wissen um Codepages erweitern :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz