tpriebs
25-10-11, 12:44
Hallo die Runde,
ich habe ein ähnlich gelagertes Problem wieviele andere. Ich will auf ausgewählten Fächern mit einem Java-Programm auf der AS400 drucken.
Ich habe in der WSCST das zweite Druckerfach mit der entsprechenden Escape Sequenz eingerichtet.
Mein Problem ist es funktioniert bei mir nur bei der Variante direkt auf die Queue mit einem SCSWriter zuzugreifen.
PrintParameterList parms = new PrintParameterList();
parms.setParameter(PrintObject.ATTR_OUTPUT_QUEUE, queue.getPath());
String s=queue.getPath();
SpooledFileOutputStream out = new SpooledFileOutputStream(system_,parms, null, null);
SCS3812Writer scsWtr = new SCS3812Writer( out, 37, system_);
// Write the contents of the spool file.
scsWtr.setLeftMargin(1.0);
scsWtr.absoluteVerticalPosition(6);
scsWtr.setFont(scsWtr.FONT_COURIER_BOLD_5);
scsWtr.write(" Java Printing");
scsWtr.newLine();
scsWtr.newLine();
scsWtr.setCPI(10);
scsWtr.write("This document was created using the IBM Toolbox for Java.");
scsWtr.newLine();
scsWtr.write("The rest of this document shows some of the things that");
scsWtr.newLine();
scsWtr.write("can be done with the SCS3812Writer class.");
scsWtr.newLine();
scsWtr.newLine();
scsWtr.setUnderline(true); scsWtr.write("Setting fonts:"); scsWtr.setUnderline(false);
scsWtr.newLine();
scsWtr.setFont(scsWtr.FONT_COURIER_10); scsWtr.write("Courier font ");
scsWtr.setFont(scsWtr.FONT_COURIER_BOLD_10); scsWtr.write(" Courier bold font ");
scsWtr.setFont(scsWtr.FONT_COURIER_ITALIC_10); scsWtr.write(" Courier italic font ");
scsWtr.newLine();
scsWtr.setBold(true); scsWtr.write("Courier bold italic font ");
scsWtr.setBold(false);
scsWtr.setCPI(10);
scsWtr.newLine();
scsWtr.newLine();
scsWtr.setUnderline(true); scsWtr.write("Lines per inch:"); scsWtr.setUnderline(false);
scsWtr.newLine();
scsWtr.write("The following lines should print at 8 lines per inch.");
scsWtr.newLine();
scsWtr.newLine();
scsWtr.setLPI(8);
scsWtr.write("Line one"); scsWtr.newLine();
scsWtr.write("Line two"); scsWtr.newLine();
scsWtr.write("Line three"); scsWtr.newLine();
scsWtr.write("Line four"); scsWtr.newLine();
scsWtr.write("Line five"); scsWtr.newLine();
scsWtr.write("Line six"); scsWtr.newLine();
scsWtr.write("Line seven"); scsWtr.newLine();
scsWtr.write("Line eight"); scsWtr.newLine();
scsWtr.endPage();
scsWtr.setLPI(6);
scsWtr.setSourceDrawer(1);
scsWtr.setTextOrientation(0);
scsWtr.absoluteVerticalPosition(6);
scsWtr.write("This page should print in portrait orientation from drawer 1.");
scsWtr.endPage();
scsWtr.setSourceDrawer(2);
scsWtr.setTextOrientation(0);
scsWtr.absoluteVerticalPosition(6);
scsWtr.write("This page should print in landscape orientation from drawer 2.");
scsWtr.endPage();
scsWtr.close();
System.out.println("Sample spool file created.");
// clean up after we are done with the list
outPutQueueList.close();
System.exit(0);
Er druckt auch auf Fach 2 was auf Fach 2 ausgegeben werden soll. Mein Problem bei dieser Variante ist, dass ich keine komplizierteren Grafiken auf diesen Weg ausdrucken kann.
Deshalb bevorzuge ich die JavaPrintService aus der ibmjps.jar.
Der Aufruf sieht wie folgt aus:
if(seriesPrintService.getName().equals("C2126MFP")){
DocFlavor psFlavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE;
DocAttributeSet attributeSet = new HashDocAttributeSet();
attributeSet.add(MediaTray.TOP);
SimpleDoc pdf = new SimpleDoc(pages, psFlavor, attributeSet);
PrintRequestAttributeSet pra = new HashPrintRequestAttributeSet();
pra.add(new SourceDrawer(2));
//
// Object categories=services[i].getSupportedAttributeCategories();
// Object sources =
// services[i].getSupportedAttributeValues(SourceDrawer.class, null,null);
//
// Object orientation =
// services[i].getSupportedAttributeValues(OrientationRequested. class, null,null);
//
// Object printerFiles =
// services[i].getSupportedAttributeValues(PrinterFileAttribute. class, null,null);
//
// Object spooledFile =
// services[i].getSupportedAttributeValues(SaveSpooledFile.class , null,null);
DocPrintJob psJob = services[i].createPrintJob();
// PrintService printService=services[i];
psJob.print(pdf, pra);
}
Mein Problem ist das obwohl ich sourceDrawer 2 ausgewählt habe immer nur auf Fach 1 gedruckt wird. Durch Aufruf der Methode
Object sources = services[i].getSupportedAttributeValues(SourceDrawer.class, null,null);
habe ich herausgefunden das nur der Wert 1 unterstützt wird.
Hat jemand eine Idee wodran das liegen könnte und wie ich mit Hilfe der JavaPrintServices die Fächer ansteuern kann?
Viele Grüße,
Tobias
ich habe ein ähnlich gelagertes Problem wieviele andere. Ich will auf ausgewählten Fächern mit einem Java-Programm auf der AS400 drucken.
Ich habe in der WSCST das zweite Druckerfach mit der entsprechenden Escape Sequenz eingerichtet.
Mein Problem ist es funktioniert bei mir nur bei der Variante direkt auf die Queue mit einem SCSWriter zuzugreifen.
PrintParameterList parms = new PrintParameterList();
parms.setParameter(PrintObject.ATTR_OUTPUT_QUEUE, queue.getPath());
String s=queue.getPath();
SpooledFileOutputStream out = new SpooledFileOutputStream(system_,parms, null, null);
SCS3812Writer scsWtr = new SCS3812Writer( out, 37, system_);
// Write the contents of the spool file.
scsWtr.setLeftMargin(1.0);
scsWtr.absoluteVerticalPosition(6);
scsWtr.setFont(scsWtr.FONT_COURIER_BOLD_5);
scsWtr.write(" Java Printing");
scsWtr.newLine();
scsWtr.newLine();
scsWtr.setCPI(10);
scsWtr.write("This document was created using the IBM Toolbox for Java.");
scsWtr.newLine();
scsWtr.write("The rest of this document shows some of the things that");
scsWtr.newLine();
scsWtr.write("can be done with the SCS3812Writer class.");
scsWtr.newLine();
scsWtr.newLine();
scsWtr.setUnderline(true); scsWtr.write("Setting fonts:"); scsWtr.setUnderline(false);
scsWtr.newLine();
scsWtr.setFont(scsWtr.FONT_COURIER_10); scsWtr.write("Courier font ");
scsWtr.setFont(scsWtr.FONT_COURIER_BOLD_10); scsWtr.write(" Courier bold font ");
scsWtr.setFont(scsWtr.FONT_COURIER_ITALIC_10); scsWtr.write(" Courier italic font ");
scsWtr.newLine();
scsWtr.setBold(true); scsWtr.write("Courier bold italic font ");
scsWtr.setBold(false);
scsWtr.setCPI(10);
scsWtr.newLine();
scsWtr.newLine();
scsWtr.setUnderline(true); scsWtr.write("Lines per inch:"); scsWtr.setUnderline(false);
scsWtr.newLine();
scsWtr.write("The following lines should print at 8 lines per inch.");
scsWtr.newLine();
scsWtr.newLine();
scsWtr.setLPI(8);
scsWtr.write("Line one"); scsWtr.newLine();
scsWtr.write("Line two"); scsWtr.newLine();
scsWtr.write("Line three"); scsWtr.newLine();
scsWtr.write("Line four"); scsWtr.newLine();
scsWtr.write("Line five"); scsWtr.newLine();
scsWtr.write("Line six"); scsWtr.newLine();
scsWtr.write("Line seven"); scsWtr.newLine();
scsWtr.write("Line eight"); scsWtr.newLine();
scsWtr.endPage();
scsWtr.setLPI(6);
scsWtr.setSourceDrawer(1);
scsWtr.setTextOrientation(0);
scsWtr.absoluteVerticalPosition(6);
scsWtr.write("This page should print in portrait orientation from drawer 1.");
scsWtr.endPage();
scsWtr.setSourceDrawer(2);
scsWtr.setTextOrientation(0);
scsWtr.absoluteVerticalPosition(6);
scsWtr.write("This page should print in landscape orientation from drawer 2.");
scsWtr.endPage();
scsWtr.close();
System.out.println("Sample spool file created.");
// clean up after we are done with the list
outPutQueueList.close();
System.exit(0);
Er druckt auch auf Fach 2 was auf Fach 2 ausgegeben werden soll. Mein Problem bei dieser Variante ist, dass ich keine komplizierteren Grafiken auf diesen Weg ausdrucken kann.
Deshalb bevorzuge ich die JavaPrintService aus der ibmjps.jar.
Der Aufruf sieht wie folgt aus:
if(seriesPrintService.getName().equals("C2126MFP")){
DocFlavor psFlavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE;
DocAttributeSet attributeSet = new HashDocAttributeSet();
attributeSet.add(MediaTray.TOP);
SimpleDoc pdf = new SimpleDoc(pages, psFlavor, attributeSet);
PrintRequestAttributeSet pra = new HashPrintRequestAttributeSet();
pra.add(new SourceDrawer(2));
//
// Object categories=services[i].getSupportedAttributeCategories();
// Object sources =
// services[i].getSupportedAttributeValues(SourceDrawer.class, null,null);
//
// Object orientation =
// services[i].getSupportedAttributeValues(OrientationRequested. class, null,null);
//
// Object printerFiles =
// services[i].getSupportedAttributeValues(PrinterFileAttribute. class, null,null);
//
// Object spooledFile =
// services[i].getSupportedAttributeValues(SaveSpooledFile.class , null,null);
DocPrintJob psJob = services[i].createPrintJob();
// PrintService printService=services[i];
psJob.print(pdf, pra);
}
Mein Problem ist das obwohl ich sourceDrawer 2 ausgewählt habe immer nur auf Fach 1 gedruckt wird. Durch Aufruf der Methode
Object sources = services[i].getSupportedAttributeValues(SourceDrawer.class, null,null);
habe ich herausgefunden das nur der Wert 1 unterstützt wird.
Hat jemand eine Idee wodran das liegen könnte und wie ich mit Hilfe der JavaPrintServices die Fächer ansteuern kann?
Viele Grüße,
Tobias