AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi postscript stringwidth in Delphi simulieren?
Thema durchsuchen
Ansicht
Themen-Optionen

postscript stringwidth in Delphi simulieren?

Ein Thema von jus · begonnen am 8. Jan 2008 · letzter Beitrag vom 10. Jan 2008
Antwort Antwort
jus

Registriert seit: 22. Jan 2005
344 Beiträge
 
Delphi 2007 Professional
 
#1

postscript stringwidth in Delphi simulieren?

  Alt 8. Jan 2008, 20:15
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?

jus
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: postscript stringwidth in Delphi simulieren?

  Alt 8. Jan 2008, 20:42
Hi,

Es gibt eine nette Funktion von TCanvas, die sich TextWidth nennt

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
jus

Registriert seit: 22. Jan 2005
344 Beiträge
 
Delphi 2007 Professional
 
#3

Re: postscript stringwidth in Delphi simulieren?

  Alt 8. Jan 2008, 21:15
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?
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#4

Re: postscript stringwidth in Delphi simulieren?

  Alt 9. Jan 2008, 01:34
Zitat von jus:
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?
Hallo,

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
  Mit Zitat antworten Zitat
jus

Registriert seit: 22. Jan 2005
344 Beiträge
 
Delphi 2007 Professional
 
#5

Re: postscript stringwidth in Delphi simulieren?

  Alt 9. Jan 2008, 21:47
Zitat von Reinhard Kern:
...
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.
...
Dass man einfach mit delphi-eigenen Canvas-Funktionen herummalen und das Ergebnis dann auf einen Postscriptdrucker/Treiber ausgeben kann, das war anfangs auch meine Überlegung. Ich wollte aber EPS-Logos, die ja in Vektorformat vorliegen, auf der Rechnung weiter als Vektorformat im PDF behalten. Wenn ich über den Umweg Postscript gehe, erhalte ich eine PDF Datei von der Rechnung einschließlich dem Logo in Vektorformat(zoombar ohne Pixelig zu werden) und eingebette Schriften, die nur 38 kbyte groß ist. Selbst Indesign benötigt für die selbe Rechnung noch ca. 70kbyte.

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
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#6

Re: postscript stringwidth in Delphi simulieren?

  Alt 10. Jan 2008, 01:29
Zitat von jus:
...
Die Breite eines Wortes ist ja sie Summe aller Zeichen. Somit kann ich unter Delphi bereits das PostScript STRINGWIDTH simulieren.

jus
Das stimmt so nicht - nicht bei Kerning. Wenn es klappt, ok, aber dann hast du wahrscheinlich eine nicht sehr ausgefeilte Schrift. Oder du bemerkst den Unterschied bisher nicht.

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
  Mit Zitat antworten Zitat
jus

Registriert seit: 22. Jan 2005
344 Beiträge
 
Delphi 2007 Professional
 
#7

Re: postscript stringwidth in Delphi simulieren?

  Alt 10. Jan 2008, 02:53
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.
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#8

Re: postscript stringwidth in Delphi simulieren?

  Alt 10. Jan 2008, 11:57
Zitat von jus:
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. :)
Hallo,

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
  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 07:05 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