![]() |
postscript stringwidth in Delphi simulieren?
Hallo,
ich habe ja vor kurzem gepostet, dass ich Rechnungen über den Umweg von Postscript zu PDF konvertiere, indem ich mit Delphi Postscriptbefehle in eine ASCII Datei(*.ps) reinschreibe. Ich stehe nun vor dem Problem, dass ich nicht weiß, wann ich in Delphi, und somit auch in Postscript, einen Zeilenumbruch von einem Text machen soll. Ich kann zwar in Postscript mit dem Befehl STRINGWIDTH die Stringlänge berechnen lassen, doch sollte ich es ja schon vorher in Delphi wissen, ob der jeweilige Text(String) nicht schon zu lang ist, und ich den Text auf die nächste Zeile umbrechen soll, da der Text sonst aus dem druckbaren Bereich rausläuft. Hat jemand eine Idee? :gruebel: jus |
Re: postscript stringwidth in Delphi simulieren?
Hi,
Es gibt eine nette Funktion von TCanvas, die sich TextWidth nennt ;) Gruß Neutral General |
Re: postscript stringwidth in Delphi simulieren?
Hallo Neutral General,
danke für die schnelle Antwort!! Eine blöde Frage: bist du dir sicher, dass von Canvas gerenderten Zeichenabstände mit Postscriptzeichenabstände übereinstimmt? |
Re: postscript stringwidth in Delphi simulieren?
Zitat:
1. Im Prinzip Ja, sonst könnte man ja überhaupt nicht sinnvoll drucken. Text -> Canvas -> Postscripttreiber muss das gleiche Bild ergeben wie deine eigene PS-Umsetzung. 2. Man kann das auch erzwingen: der alte, aber gute Ventura Publisher positionierte jeden Buchstaben einzeln, dadurch ergab sich immer ein korrektes Seitenlayout auch bei grottenfalscher Schrift. Bei geringeren Abweichungen reicht es, jedes Wort zu positionieren. 3. Wieso schreibst du überhaupt PS? Es gibt unter Windows Postscript-Treiber! Sogar eine ganze Menge. Gruss Reinhard |
Re: postscript stringwidth in Delphi simulieren?
Zitat:
Um nochmal auf die ursprüngliche Frage zurückzukehren - ich habs nun auf folgende brutale und einfache Art gelöst: dadurch, dass ich im vorhinein schon weiß, welche Schrift und welche Schriftgrösse auf der Rechnung verwendet wird, und ich immer Ghostscript zur PDF Konvertierung verwende, lasse ich mir unter Postscript im vonhinein alle verwendeten Zeichenbreiten (z.B. 0..9, A..Z, a..z,...) berechnen. Die Breite eines Wortes ist ja sie Summe aller Zeichen. Somit kann ich unter Delphi bereits das PostScript STRINGWIDTH simulieren. :) jus |
Re: postscript stringwidth in Delphi simulieren?
Zitat:
Der Grund für Canvas ist ein ganz anderer: ich schreibe i.A. eine Zeichenroutine, die in X und Y skalierbarbar ist, und verwende die sowohl zur Bildschirmanzeige als auch zum Drucken, damit damit stimmen Vorschau und Druck automatisch überein, also echtes WYSIWYG. Ob die Druckdatei ein paar kB grösser oder kleiner ist, spielt heute keine praktische Rolle mehr. Der Ventura Publisher rechnete auch intern die Position jedes Characters aus, aber korrekt unter Verwendung der Dicktentabellen einschliesslich Kerning (das ist übrigens nicht nach mir benannt). Gruss Reinhard |
Re: postscript stringwidth in Delphi simulieren?
Hallo Reinhard,
Danke nochmals für den Hinweis! Wie schon gesagt, es war eine quick&dirty Lösung. Und es funktioniert bei mir recht gut (auf 4 Nachkommastellen genau), anscheinend habe ich hier Glück mit der Schrift gehabt. Ich bin aber immer auch ganz Ohr für bessere Lösungsmöglichkeiten. Mir sagt "Ventura Publisher" überhaupt nichts. Wie könnte man denn in meinem Fall den Ventura Publisher über Delphi verwenden, damit ich in Delphi die exakte Breite bekomme? Grüße, jus P.S. Mir gefällt der trotzdem der Gedanke, dass die Datei so klein ist und dennoch zoombar ist ohne pixelig zu werden. :) |
Re: postscript stringwidth in Delphi simulieren?
Zitat:
Ventura Publisher ist eine gute, aber untergegangene (zumindest nicht weiter entwickelte) Publisher Software - ich hab sie erwähnt, weil sie eben auch die Positionen selbst berechnet, sogar für jeden Char. Damit ist es die einzige mir bekannte Software, die ein Seitenlayout auch dann noch korrekt darstellt, wenn auf dem Rechner überhaupt kein passender Font zur Verfügung steht. Wie man sieht, geht die Entwicklung nicht immer nur in Vorwärtsrichtung. Zum Kerning: die Länge von ATA muss kleiner sein als die Summe von A,T,A wenn Kerning vorgesehen ist. Sieht man übrigens hier schon (jedenfalls bei mir mit IE6). Das ist Aufgabe des Fontinterpreters in Windows, also ganz tief im System. Um das selbst zu berechnen, müsstest du bei PS die PFM-Datei auswerten. Ein anderes Thema ist, dass man für eine Rechnung so was wie Kerning natürlich nicht braucht, so was hat man früher durch den Kettendrucker gejagt. Gruss Reinhard |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:49 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