IBM AFP/IPDS Druckausgaben

Anforderung

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.

Realisierung

Mit dem Produkt convert4print steht auch ein IPDS-Konverter für PCL-Drucker zur Verfügung, der seine Druck­ausgabe an print2forms 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 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 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