Bei Anwendern von print2forms mit einem IBM-Host-System mit i5/OS oder z/OS kommt oft der Wunsch auf, bisher auf AFP/IPDS-Druckern erstellte Dokumente mit print2forms 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 print2forms 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 print2forms steuern sollen.
Mit dem Produkt convert4print steht auch ein IPDS-Konverter für PCL-Drucker zur Verfügung, der seine Druckausgabe an print2forms weiterleiten kann, und der bei richtiger Konfiguration auch die Metadaten des Druckauftrags zur Verfügung stellt.
Grundlage für die Erzeugung der PCL-Druckdaten durch die Konverter in convert4print 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 print2forms 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 print2forms verfügbar zu machen, müssen ein paar weitere Zeilen eingefügt werden. Diese Zeilen erzeugen PJL-Kommandos speziell für die Interpretation von print2forms. 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 print2forms 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 korrespondierende 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 */ ... ),