PDA

View Full Version : Flattersatz - Schriftlänge ermitteln



Kaufmann
05-03-09, 14:09
Wir haben folgendes Problem:
Benutzereingaben sollen per Postscript ausgegeben werden. Die Eingaben können länger als eine druckbare Zeile sein. Ein Umbruch der Zeile soll erfolgen wenn die max. Länge der Zeile erreicht ist , es soll aber kein Wort getrennt werden. Dies können wir aktuell über eine Postscript-Funktion lösen. Dabei stellt sich aber das Problem das nach einer Ausgabe die Position der letzten Zeile nicht bekannt ist.
Hierzu nun meine Frage: Ist es möglich die Länge einer Ausgabe in einer bestimmten Schriftart und in einer bestimmten Schriftgröße per Postscript schon auf der AS400 festzustellen?
Mit diesen Angaben kann ich mir die aktuelle Position nach der Ausgabe errechnen.

Fuerchau
05-03-09, 14:36
Leider gibts hierfür keine direkten Funktionen.
Ich denke, da kommt nur Java für in Frage.

Kaufmann
05-03-09, 14:39
Weis jehmand wie das mit Java funktioniert? Gibt es vielleicht eine API die ich einbinden kann?

Fuerchau
05-03-09, 14:57
Vergiss den Aufruf von Java-Funktionen aus RPGLE. Das macht dein Programm extrem langsam, da für jeden Call auf die Funktion eine Interprozesskommunikation zwischen deinem und dem Java-Job läuft.

BenderD
05-03-09, 15:18
- Postscript ist erst mal nicht Bestandteil der Java Standard Funktionalitäten.
- Es gibt da mehrere Libraries, die sowas können, sowohl OpenSource als auch kommerzielle
- von synchroner Einbindung in RPG rate ich generell ab
- denkbar wäre da ein Java PrintServer Dienst, für den Kommunikationsteil habe ich da eine Freeware (AppServer4RPG), ohne Programmieraufwand (Java seitig) ist da aber kaum was machbar.
- alternativ würde ich über die Möglichkeit nachdenken im RPG nur eine Zwischen Repräsentation zu erstellen und die dann mit Java in Postscript zu wandeln (soweit die Anforderung das ermöglicht)

D*B


Vergiss den Aufruf von Java-Funktionen aus RPGLE. Das macht dein Programm extrem langsam, da für jeden Call auf die Funktion eine Interprozesskommunikation zwischen deinem und dem Java-Job läuft.

Kaufmann
05-03-09, 15:30
@BenderD

1. Es wird schon Postscript ausgegeben
2. Eine Umsetzung von Postscript in PDF erfolgt über Gostview
3. Die Funktionalität eines Flattersatzes ist innerhalb durch eine Postscriptfunktion schon möglich.

Die Postscriptfunktion funktioniert sollange wir nicht nach dem Flattersatz eine neue Andruckzeile ausgeben wollen die eine relative position zu dem letzten gedruckten Satz hat. Deswegen brauche ich ein Möglichkeit vor der Ausgabe zuwissen an welcher Stelle der Flattersatz endet.

Gibt es dafür keine elegante Lösung dann gehe ich einfach von einer mittleren Schriftbreite bei einer festen Schriftgröße aus und zähle einfach Zeichen.

BenderD
06-03-09, 07:11
wenn das Ziel PDF ist, dann würde man das in Java direkt erzeugen (z.B.: PDFBOX) und da weiß jeder Font wie breit ein Stück Text wird und lässt sich danach fragen.

D*B

BTW:
Flattersatz := ungleich lange Textzeilen
nicht zu verwechseln mit
typografische Schrift: Buchstaben mit unterschiedlicher Breite



@BenderD

2. Eine Umsetzung von Postscript in PDF erfolgt über Gostview

Kaufmann
06-03-09, 12:51
1. Das Programm besteht schon.
2. Soll es eine allgemeine Funktion werden die wir in anderen Programmen auch benutzen können.
3. Bis auf das der Endpunkt der letzten Zeile nicht bekannt ist können wir die Funktionalität mit einer Postscriptfunktion gewährleisten.