[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Oct 2011
    Beiträge
    12

    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


  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    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 ?
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Oct 2011
    Beiträge
    12
    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.

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Wenn du alles in Java machst, kannst du doch am Besten direkt eine PDF-Ausgabe erstellen, da gibts Lib's für.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    Oct 2011
    Beiträge
    12
    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.

  6. #6
    Registriert seit
    Oct 2011
    Beiträge
    12
    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.

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Wenn ich mir deinen Code so ansehe, verwechselst du da 2 Funktionen:

    setSourceDrawer <= Papiereingabefach

    setDestinationDrawer <= Papierausgabefach
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  8. #8
    Registriert seit
    Oct 2011
    Beiträge
    12
    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.

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  10. #10
    Registriert seit
    Oct 2011
    Beiträge
    12
    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.

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  12. #12
    Registriert seit
    Oct 2011
    Beiträge
    12
    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

  1. Neue Möglichkeiten mit SQL auf i5 / iSeries / AS400
    By Fondue in forum NEWSboard Server Software
    Antworten: 0
    Letzter Beitrag: 28-04-06, 19:40
  2. Auf Canon iP5200R direkt von der AS400 aus drucken?
    By AS400Noob in forum NEWSboard Drucker
    Antworten: 5
    Letzter Beitrag: 04-04-06, 15:08
  3. Sprache ändern auf der AS400
    By Christian.Hesse in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 24-11-05, 14:28
  4. Sicherheitssoftware auf der AS400
    By hs in forum IBM i Hauptforum
    Antworten: 19
    Letzter Beitrag: 08-08-05, 09:42
  5. von java aus auf die AS400-Bibliotheken
    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
  •