PDA

View Full Version : Drucken: Schachteuerung aus Java



mmu400
03-12-04, 12:07
Wir erzeugen eine Druckliste in Java und übertragen diese an die iSeries. Die Spoolfileattribute werden bei der Übertragung auf die iSeries durch das Defaultprinterfile QPNPSPRTF generiert,
das Spoolfile wurde unter dem Druckerttyp *USERASCII angelegt. (Formvorschub=*autocut) Das Papier soll nun auf dem Druckerschacht 2 gedruckt werden. Wir füllen den Parameter DRAWER bei der Dokumentenerstelllung in Java bereits ab, im Spoolfile steht das dann auch so drin, nur druckt es leider nicht auf dem Schacht zwei.
Wir haben vieles ausprobiert, leider ohne Erfolg. Was haben wir übersehen ? (Wir drucken auf einem Lexmark S2455, AS-Einheitentyp 3812)
Gruss Marcel

Zur technischen Erklärung eine Kurzfassung unseres Druckprogrammes:
private void print (String file, String sys, String user, String password, String printer){
try{
FileInputStream in = new FileInputStream(file);
AS400 system = new AS400(sys,user,password);
Printer prt = new Printer(system,printer);
String outq = prt.getStringAttribute(Printer.ATTR_OUTPUT_QUEUE);

OutputQueue spool = new OutputQueue(system,outq);

PrintParameterList parms = new PrintParameterList();

parms.setParameter(PrintObject.ATTR_COPIES, 1);
parms.setParameter(PrintObject.ATTR_FORMFEED, "*AUTOCUT");
parms.setParameter(PrintObject.ATTR_SRCDRWR, 2);
parms.setParameter(PrintObject.ATTR_OUTPUT_QUEUE, spool.getPath());
SpooledFileOutputStream out = new SpooledFileOutputStream(system,parms,null,null);
byte[] buf = new byte[2048];
int bytesRead =0;
do
{
bytesRead = in.read(buf);
if (bytesRead != -1) {
out.write(buf,0,bytesRead);
}
} while (bytesRead != -1);
out.close();
system.disconnectAllServices();
}catch(Exception e){
System.out.println();
}

}

BenderD
03-12-04, 12:17
Hallo,

... und wandte sich ab und weinte bitterlich. Nun gibt es schon mal was, was man besser mit RPG machen würde (aus Streamfile SCS Spooldaten erzeugen) dann wird das mit Java gemacht...
Dieser Toolbox Spielkram (außer JDBC), der ist sowas von buggy, da würde ich konsequent die Finger von lassen.

mfg

Dieter Bender




Wir erzeugen eine Druckliste in Java und übertragen diese an die iSeries. Die Spoolfileattribute werden bei der Übertragung auf die iSeries durch das Defaultprinterfile QPNPSPRTF generiert,
das Spoolfile wurde unter dem Druckerttyp *USERASCII angelegt. (Formvorschub=*autocut) Das Papier soll nun auf dem Druckerschacht 2 gedruckt werden. Wir füllen den Parameter DRAWER bei der Dokumentenerstelllung in Java bereits ab, im Spoolfile steht das dann auch so drin, nur druckt es leider nicht auf dem Schacht zwei.
Wir haben vieles ausprobiert, leider ohne Erfolg. Was haben wir übersehen ? (Wir drucken auf einem Lexmark S2455, AS-Einheitentyp 3812)
Gruss Marcel

Zur technischen Erklärung eine Kurzfassung unseres Druckprogrammes:
private void print (String file, String sys, String user, String password, String printer){
try{
FileInputStream in = new FileInputStream(file);
AS400 system = new AS400(sys,user,password);
Printer prt = new Printer(system,printer);
String outq = prt.getStringAttribute(Printer.ATTR_OUTPUT_QUEUE);

OutputQueue spool = new OutputQueue(system,outq);

PrintParameterList parms = new PrintParameterList();

parms.setParameter(PrintObject.ATTR_COPIES, 1);
parms.setParameter(PrintObject.ATTR_FORMFEED, "*AUTOCUT");
parms.setParameter(PrintObject.ATTR_SRCDRWR, 2);
parms.setParameter(PrintObject.ATTR_OUTPUT_QUEUE, spool.getPath());
SpooledFileOutputStream out = new SpooledFileOutputStream(system,parms,null,null);
byte[] buf = new byte[2048];
int bytesRead =0;
do
{
bytesRead = in.read(buf);
if (bytesRead != -1) {
out.write(buf,0,bytesRead);
}
} while (bytesRead != -1);
out.close();
system.disconnectAllServices();
}catch(Exception e){
System.out.println();
}

}

mmu400
03-12-04, 12:36
Danke für die info, nur kann ich damit nicht viel anfangen.
Unsere Ausgangslage: Eine Applikation ausschliesslich in Java, welche auf der AS läuft, (DB2/400) welche halt auch Papiere erzeugt. Ubrigens: Mit Ausnahme der Schachtsteuerung läuft die Anwendung prima !
Hat sonst noch wer eine Idee ?

Sven Schneider
06-12-04, 20:03
Da du die Spoolfile als *USEASCII erstellt hast,werden alle Spoolfile-Parameter ignoriert.
D.h. alle Angaben (Steuerdaten z.B. PJL/PCL + Druckdaten) müssen im Druckdatenstrom vorhanden sein.
Deswegen ja *USERASCII.

Erstelle die Spool als *SCS. Hier kannst du dann über Host Print Transform (SCS/AFP --> PCL) die SCS-Druckfächer (DRAWER) den PCL-Druckfächern zuordnen.
Dazu musst du ggf. das *WSCST-Objekt zu deinem Drucker retrieven (RTVWSCST) und anpassen.

Siehe auch
http://www-1.ibm.com/support/docview.wss?uid=nas1bbf048cc51f9d5b8c1256acd005555 74&rs=110