===== IBM AFP/IPDS Druckausgaben =====
==== Anforderung ====
Bei Anwendern von (p2f) mit einem IBM-Host-System mit %%i5/OS oder z/OS%% kommt oft der Wunsch auf, bisher auf AFP/IPDS-Druckern erstellte Dokumente mit (p2f) nachzubearbeiten oder zu verteilen.
Auf Seite der IBM-Betriebssysteme gibt es die Option, mittels eines Dienstes, der Host-Print-Transform genannt wird, %%AFP/IPDS-%%-Druckausgaben in PCL-Datenströme zu konvertieren. Diese können ohne weiteres an (p2f) weitergeleitet werden. Nachteil dieser Lösung, neben der Tatsache, dass teuere CPU-Zeit für Druckaufbereitung genutzt wird, ist, dass die Abbildungstreue zu wünschen übrig lässt und dass Metadaten des Druckauftrags wie Benutzer, erstellendes Programm, etc verloren gehen.
Meist sind es aber genau diese Metadaten, die eine Weiterbearbeitung durch (p2f) steuern sollen.
\\
\\
==== Realisierung ====
Mit dem Produkt (c4p) steht auch ein IPDS-Konverter für %%PCL%%-Drucker zur Verfügung, der seine Druck(-)ausgabe an (p2f) weiterleiten kann, und der bei richtiger Konfiguration auch die Metadaten des Druck(-)auftrags zur Verfügung stellt.
Grundlage für die Erzeugung der %%PCL%%-Druckdaten durch die Konverter in (c4p) sind sogenannte Ressource-Dateien, die für bestimmte Aufgaben die zu verwendenden %%PCL%% und/oder PJL-Befehle aufführen.
In einer Ressource-Datei gibt es eine Ressource mit dem Namen 'JP', die beschreibt, wie ein Druckauftrag initialisiert wird. Hier muss eingegriffen werden, um den %%IPDS%%-Konverter für das nachgeschaltete (p2f) zu optimieren.
Zunächst einmal das ungefähre Aussehen einer normalen JP-Ressource. Im Kommentar sind numerische Kennungen zu sehen, die die einzelnen Metadaten des Druckauftrags beschreiben. Diese Metadaten werden aus einem speziellen %%IPDS%%-Kommando (DGB - Definge Group Boundary) entnommen. Im Standardfall sorgt die Ressource nur dafür, dass der Name Benutzers in der Anzeige des Druckers sichtbar wird.
\\
\\
( JP /* Job Programming */
/* Valid display and modifier offsets (length is always 10 chars):
0 - job library name
10 - job output queue name
20 - job file name
34 - job name
44 - job user name
60 - job form name
99 - actual setting taken from bp-resource
*/
/* prepare job */
"$1B%-12345X@PJL$0D$0A" /* prepare printer */
"@PJL SET PAGEPROTECT = OFF$0D$0A"
"@PJL SET RESOLUTION = 300$0D$0A"
"@PJL SET RET = ON$0D$0A",
(
( 1, /* status display modifier */
"@PJL RDYMSG DISPLAY = $22", 44, "$22$0D$0A" /* status display */
),
...
),
/* begin job */
"@PJL ENTER LANGUAGE = PCL$0D$0A" /* begin job */
"$1BE" /* reset printer */
...,
/* end job */
...
),
\\
Um jetzt auch die Metadaten für (p2f) verfügbar zu machen, müssen ein paar weitere Zeilen eingefügt werden. Diese Zeilen erzeugen %%PJL%%-Kommandos speziell für die Interpretation von (p2f). Diese Kommandos finden sich in keiner Druckerdokumentation.
Als erstes ist zu erkennen, dass eine 'Codepage' auf den Wert 850 gesetzt wird. Das ist notwendig, damit (p2f) weiss, wie die nachfolgenden %%PJL%%-Kommandos kodiert sind. Dieses Kommando muss daher als erstes ausgegeben werden.
Für jede Einzelinformation der in %%IPDS%% bereitgestellten Metadaten wird anschliessend jeweils das korrespon(-)dierende %%PJL%%-Kommando ('USER', 'JOBID', 'JOBNO', 'MODEL', ' FILEID', 'FILENO', 'FORM') erzeugt. Dabei werden auch die anderen Kennungen aus dem Kommentar am Anfang der Ressource genutzt.
\\
\\
( JP1 /* Lexmark style Job Programming */
/* Valid display and modifier offsets (length is always 10 chars):
0 - job library name
10 - job output queue name
20 - job file name
30 - Job file number
34 - job name
44 - job user name
54 - job number
60 - job form name
99 - actual setting taken from bp-resource
*/
/* prepare job */
"$1B%-12345X@PJL$0D$0A" /* prepare printer */
"@PJL SET PAGEPROTECT = OFF$0D$0A"
"@PJL SET RESOLUTION = 300$0D$0A"
"@PJL SET RET = ON$0D$0A"
"@PJL SET CODEPAGE = $22850$22$0D$0A",
(
( 1, /* status display modifier */
"@PJL RDYMSG DISPLAY = $22", 44, "$22$0D$0A" /* status display */
),
...
/* additional information required by print2forms output managment */
( 1, "@PJL SET USER = $22", 44, "$22$0D$0A" ),
( 1, "@PJL SET JOBID = $22", 34, "$22$0D$0A" ),
( 1, "@PJL SET JOBNO = $22", 54, "$22$0D$0A" ),
( 1, "@PJL SET MODEL = $22", 10, "$22$0D$0A" ),
( 1, "@PJL SET FILEID = $22", 20, "$22$0D$0A" ),
( 1, "@PJL SET FILENO = $22", 30, "$22$0D$0A" ),
( 1, "@PJL SET HOLDSPOOL = $22NO$22$0D$0A"
"@PJL SET SAVESPOOL = $22NO$22$0D$0A"
"@PJL SET FORM = $22", 60, "$22$0D$0A" )
),
/* begin job */
"@PJL ENTER LANGUAGE = PCL$0D$0A" /* begin job */
"$1BE" /* reset printer */
...,
/* end job */
...
),
\\
==== Hinweise ====
* Für die %%PJL%%-Kommandos zum Setzen der Attribute 'HOLDSPOOL' und 'SAVESPOOL' gibt es keine Entsprechung in %%IPDS%%. Beide Attribute werden hier auf 'NO' gesetzt. Sollte in (p2f) irgendein Prozess gestartet werden, der eine Weitergabe der Druckdaten an den Router enthält, kann es sinnvoll sein, einen oder sogar beide Parameter auf 'YES' zu setzen. Dadurch werden die Druckaufträge im Router sofort angehalten und erst auf Aufforderung hin gedruckt, oder sie werden nach dem Druck weiter aufgehoben.
* Was diese Lösung nicht kann, ist, die %%i5/OS%%-Attribute 'USRDTA' und 'USRDFNDTA' eines Druckauftrags auszu(-)lesen. Dies ist nur möglich, wenn direkt von einem %%i5/OS%% Host-System auf (p2f) gedruckt wird, und das mit (p2f) mitgelieferte Trennseitenprogramm zum Einsatz kommt. Damit lassen sich beispiels(-)weise dann E-Mail-Adressen oder zur Archivierung notwendige Informationen zum Druckauftrag mit(-)übertragen.
\\