-
Fachansteuerung auf AS400 mit Java-IBMPrintServices
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.
Code:
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:
Code:
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
-
Nun ja, wenn der JavaService nicht mehr als ein Fach unterstützt wirst du daran auch nichts ändern können.
Allerdings verstehe ich nicht, warum du auf Fach2 keine Grafiken drucken kannst ?
-
Danke erstmal für die schnelle Antwort.
Ich kann auch auf Fach 1 mit der Methode keine Grafiken ausdrucken. Das liegt nicht am Drucker sondern an der der Klasse SCS3812Writer die kann halt nur Text schreiben. Ich will aber AWT und ähnliches ausdrucken und habe bisher keine Methode gefunde die dies kann in dem sie den SpooledFileOutputStream benutzt.
Sprich die diese Variante kann einfachen Text ausdrucken aber keine Grafiken bzw.
ich weiß nicht wie dies möglich ist.
-
Wenn du alles in Java machst, kannst du doch am Besten direkt eine PDF-Ausgabe erstellen, da gibts Lib's für.
-
Mir ist bisher noch keine begegnet. Gibt es da irgendeine Empfehlung? Die Lib muss auf jeden Fall auf der AS400 ausführbar sein und es muss eine Möglichkeit geben die Lib in irgend einer Form so einzubinden, dass ich Fächer ansteuern kann.
-
Interessant ist auch noch, dass wenn ich im WSCST das Druckerfach 1 auch auf die Escape Sequenz von Fach 2 setze trotzdem auf Fach 1 gedruckt wird. Also sprich bei der Variante mit den IBMPrintServices.
So als ob ihn das WSCST File überhaupt nicht interessieren würde.
Bei der ersten Variante wird der Drucker als Queue angesprochen und bei der zweiten als Device.
-
Wenn ich mir deinen Code so ansehe, verwechselst du da 2 Funktionen:
setSourceDrawer <= Papiereingabefach
setDestinationDrawer <= Papierausgabefach
-
In beiden Fällen setzte ich doch den SourceDrawer sprich das Eingabefach.
Es geht auf jeden Fall um das Fach aus dem das Papier gezogen werden soll. Sprich der SourceDrawer.
-
-
Danke für den Tipp, aber der Artikel war für mich der erste gute Orientierungspunkt für die IBM Java Print Services. Sprich er war hilfreich, aber führt mich im Moment nicht weiter.
-
Ich denke mal dein Problem ist, dass du Direktdruck verwendest.
Läßt sich der Spool denn auf der AS/400 anzeigen ?
Wenn nein, wird Hosttransform gar nicht aufgerufen und somit das WSCST nicht aktiv.
Alternativ kannst du auch eine PRTF benutzen die dann *AFPDS haben sollte.
Für die PDF-Erstellung gibt es
iText ® - Free / Open Source PDF Library for Java and C#
was wohl auch auf der AS/400 läuft (ggf. Java 5 oder 6 installieren und verwenden).
Wenn du PSF/400 auf der AS/400 hast, können PDF's auch auf der AS/400 dann gedruckt werden.
-
Ich glaube das hilft mir schon mal gut weiter:-).
Das Spool lässt sich nicht anzeigen, also wird auch keine Hosttransform statt gefunden haben. Ich denke das wird das Problem sein.
Ich bin vor kurzen erst auf AFPDS gestoßen und suche im Moment eine geeignete Java-Bibliothek die diese Funktionalität bereit stellt.
Mein Problem ist nicht die PDF-Erstellung, dass tut das von mir zu erweiternden Programm bereits. Das Problem ist dieses PDF auf der AS400 aus einem speziellen Fach auszudrucken.
Ich schaue mir PSF/400 mal an.
Similar Threads
-
By Fondue in forum NEWSboard Server Software
Antworten: 0
Letzter Beitrag: 28-04-06, 19:40
-
By AS400Noob in forum NEWSboard Drucker
Antworten: 5
Letzter Beitrag: 04-04-06, 15:08
-
By Christian.Hesse in forum NEWSboard Programmierung
Antworten: 1
Letzter Beitrag: 24-11-05, 14:28
-
By hs in forum IBM i Hauptforum
Antworten: 19
Letzter Beitrag: 08-08-05, 09:42
-
By Vicky-B in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 04-01-05, 14:32
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks