AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DynaPDF

Ein Thema von mczero · begonnen am 24. Mai 2013 · letzter Beitrag vom 24. Mai 2013
Antwort Antwort
mczero

Registriert seit: 25. Nov 2010
13 Beiträge
 
Delphi 7 Architect
 
#1

DynaPDF

  Alt 24. Mai 2013, 10:03
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!
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

AW: DynaPDF

  Alt 24. Mai 2013, 12:10
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:
// inlist = mehrzeiliger Text
// oulist = umgebrochener Text
// maxwidth = max Breite der Textbox
procedure DoWordBreaks(inlist, outlist:TStrings; maxwidth:double; canvas:TCanvas);
Dazu benötigt man noch die Möglichkeit die Textlänge von beliebigen Strings zu berechnen. *)
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?
fork me on Github
  Mit Zitat antworten Zitat
mczero

Registriert seit: 25. Nov 2010
13 Beiträge
 
Delphi 7 Architect
 
#3

AW: DynaPDF

  Alt 24. Mai 2013, 14:01
Guter Ansatz,

ich habe noch mal in die API-Referenz geschaut, es gibt eine Funktion zur Berechnung der Textbreite-

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:
die Verwendung eines Non-Break-Space ist der richtige Weg. Ich kenne keine Codepage bei der das Zeichen den Index 255 haben soll. Das Zeichen hat den Index 160 in fast allen Codepages und ebenfalls 160 in Unicode.

Wenn Sie das richtige Zeichen verwenden, dann wird auch kein .notdef Zeichen mehr ausgegeben.
  Mit Zitat antworten Zitat
mczero

Registriert seit: 25. Nov 2010
13 Beiträge
 
Delphi 7 Architect
 
#4

AW: DynaPDF

  Alt 24. Mai 2013, 14:13
Mit #160 funktioniert es!

Wie konnte ich mit #255 so irren? Ich glaube, ich muss mein Wissen um Codepages erweitern
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz