[NEWSboard IBMi Forum]
Seite 3 von 5 Erste ... 2 3 4 ... Letzte

Thema: PDF drucken

  1. #25
    Registriert seit
    Jan 2005
    Beiträge
    1
    Hallo KM,

    es wäre nett, wenn ich das JS auch bekommen könnte.

    mr@softm-stuttgart.de

    Vielen Dank im Voraus

    SMMR


    Zitat Zitat von KM
    Hallo Rolf,

    habe jetzt endlich die Lösung zu meinem Problem gefunden. Das Problem beim Befehl

    AcroRd32.exe /p /h "Datei.pdf" (über STRPCCMD)

    war, dass zwar die PDF-Datei korrekt gedruckt wurde, jedoch die DOS-Box nicht geschlossen wurde, da der Acrobat-Reader im Hintergrund gestartet wurde, aber nicht mehr beendet wurde. Der DDE-Kanal blieb somit offen. Wenn ich nun per Programm eine weitere PDF drucken wollte, wurde eine weitere DOS-Box geöffnet, usw.. Mein Rechner wäre dann nach kurzer Zeit auf Ressourcen-Probleme gestoßen.
    Jetzt habe ich im Internet ein JavaScript-File gefunden, das ich über RUNRMTCMD aufrufen kann. An diese JS-Datei gebe ich den PDF-Dateinamen als Parameter mit und die PDF wird gedruckt und der Acrobat-Reader hinterher wieder beendet. Das ist genau das, was ich wollte. Somit kann ich die PDFs voll automatisiert drucken.

    Gruß,
    KM

  2. #26
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.005
    Hallo SMMR,

    schau mal weiter unten. In einem anderen Beitrag zu diesem Thema habe ich das Tool mal eingefügt. Du kannst es von dort runterladen.

    Gruß,
    KM

  3. #27
    Registriert seit
    Mar 2005
    Beiträge
    1
    Hi,

    ich hab mir auch das Tool geholt, allerdings bekomm ich immer ein Fehler bei Zeile 42.
    meldung:" 'oAcro' ist Null oder kein Objekt'".

    Kann mir wer da helfen?


    Gruß

  4. #28
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.005
    Hallo Funmaker,

    welche Version des Acrobat Reader hast Du denn ?

    Gruß,
    KM

  5. #29
    Registriert seit
    Oct 2004
    Beiträge
    240
    Ich beschäftige mich gerade auch mit dem Problem und möchte hier noch kurz meinen (nicht Windows-)Lösungsansatz vorstellen, vielleicht hat ja jemand schon Erfahrung damit.

    Voraussetzung dafür, ist ein konfiguriertes CUPS, welches auch einen Filter für PDF installiert hat.

    Auf Linux (x86) kann ich so eine PDF Datei ausdrucken:

    lp -d printername -h hostname Datei.pdf

    Durch den installierten Filter wird das PDF-Dokument umgesetzt und ausgedruckt.

    Ich habe mir den lp-Befehl von unserer AIX in die PASE-Umgebung geholt - leider ist das nur der originale lp Befehl und nicht der Cups, welcher bei der CUPS-Installation die originalen Druckbefehle (lp, lpr...) ersetzt.


    Hier liegt noch das Fragezeichen - ob der Client (lp) oder der Cups-Server den Filter anwendet.

    Um von der AS/400 auszudrucken, muss ich mich noch gedulden - denn die AS/400 (V5R2) kann zwar IPP, für CUPS Bedarf es aber noch eines PTF's....

    Dann werde ich das PDF als *USERASCII mit TRANSFORM(*NO) an die Cups-Queue senden und schauen was passiert.

    Alternativen:
    1. Ich habe versucht Ghostscript für den Befehl "pdf2ps" in der PASE-Umgebung zu portieren. Allerdings fehlen mir dazu libs. Diese kann ich zwar von der AIX kopieren, diese sind aber anscheinend 1:1 nicht für PASE zu gebrauchen..

    Zu PASE muss ich noch sagen, dass ich bisher nur kleinere Programme erfolgreich in die PASE-Umgebung portieren konnte.

    2. Java ab 1.4
    Unterstützt auch IPP und printStreamingFiles, mit welchen man unter Umständen PDF zu PS wandeln könnte bzw. PDF's via IPP an Cups zu bringen.

    Ich habe mich damit aber noch nicht beschäftigt, da ich es vorher noch mit dem CUPS-Drucker (PTF) testen will und auch nicht weiß, wie weit dieser Teil auf der AS/400 umgesetzt ist.

    3. Achja, auch die AS/400 kann seit V5R2 IPP-Server spielen. Ich habe aber noch nirgends die Möglichkeiten für Filter ala CUPS gesehen.


    Fortsetzung folgt...

    mfg
    Robert P.

  6. #30
    Registriert seit
    Oct 2004
    Beiträge
    240

    PDF über Cupsdrucker umsetzen/ausdrucken

    Ich wollte noch nachliefern, dass sich nach dem PTF zwar die Cups-Drucker wunderbar ansteuern lassen, aber ein kopiertes (PASE rfile auf QPRINT TRANSFORM(*NO) devtype(*userascii)) PDF-File wird nicht von Cups umgesetzt. Das File wird anscheinend nur 1:1 an den Drucker weitergeleitet - ein Postscriptfile (Level 2) funktioniert zum Beispiel.

    In Java 1.4 wird PDF zwar als Dokumententyp (DocFlavor) angeboten, aber das war es auch schon - kein drucken und auch keine Umsetzung (alle Plattformen).

    Zum Glück gibt es ja eine große OpenSource-Gemeinde für Java und so konnte ich das Problem relativ rasch "beheben". Mittels OpenSource "jipsi" kann man auch Cups-Drucker als Druckerresourcen in Java ansprechen.

    Damit war der Weg frei für ein "pdf2cups" und siehe da: funktioniert wunderbar. Zwecks annehmbarer Performance sollte es aber als Serverjob laufen.

    Robert P.

    PS. Der Filter von Cups kann für alles Mögliche verwendet werden, z.B. TIF's usw.

  7. #31
    Registriert seit
    May 2005
    Beiträge
    2
    Ich wäre über mehr technische Details über die "pdf2cups" auf der AS/400 stark interessiert. Bitte mit mir Kontakt aufnehmen!

  8. #32
    Registriert seit
    Oct 2004
    Beiträge
    240
    Zitat Zitat von watzl
    Bitte mit mir Kontakt aufnehmen!
    E-Mail ist nicht öffentlich zugänglich, daher poste ich gleich hier:

    Voraussetzungen:

    • Java ab Version 1.4, Ausdruck mittels javax.print.*
    • Jipsi (Achtung! aktuelle Version nur in CVS, (1))
    • Java http-Zugriffsklassen (commons..) von Apache (in Download-Zip enthalten)
    • dns von CupsServer muss in AS/400 eingetragen sein (CFGTCP / 10) ... IP-Adresse geht nicht, da Cups die Rückantwortadresse wieder mit dns gibt
    • Cups mit installierten Filter für PDF (mir ist unter Linux noch keine Installtion ohne PDF-Filter untergekommen)
    In dem Downloadfile sind auch verschiedene Bespieleprogramme enthalten. Aber all diese Beispielprogramme verlangen im Dialog/Texteingabe eine Druckerauswahl. Hier ein kleines Demo, für den Commandline-Einsatz:
    PHP-Code:
     // pdf2cups.java
     //
     
    import javax.print.*;
     
    import javax.print.attribute.*;
     
    import javax.print.attribute.standard.DocumentName;
     
    import javax.print.attribute.standard.JobName;
     
    import javax.print.attribute.standard.Copies;
     
    import javax.print.attribute.standard.RequestingUserName;
     
     
    import de.lohndirekt.print.IppPrintServiceLookup;
     
    import de.lohndirekt.print.attribute.auth.RequestingUserPassword;
     
     
    import java.io.File;
     
    import java.io.FileInputStream;
     
    import java.io.IOException;
     
    import java.io.InputStream;
     
    import java.net.URISyntaxException;
     
    import java.util.Locale;
     
     public class 
    pdf2cups {
     
     
     
     public 
    PrintService getPrinterByUrl(String printerUrlthrows Exception {
     
            
    PrintService service null;
     
            try {
                if (
    printerUrl.lastIndexOf("/")==-1) {
                    
    System.out.println("keine vollständige Cups-Url gefunden");
                    return 
    null;
                }
                
    // Server und Printename trennen
                
    String printerName printerUrl.substring(printerUrl lastIndexOf"/" )+1);
                
    String serverName printerUrl.substring(0printerUrl.lastIndexOf ("/"));
                
    System.out.println("Printing on Server: " serverName " Queue "printerName);
     
                
    PrintServiceLookup lookup =
                new 
    IppPrintServiceLookup(new java.net.URI(serverName),"","");
                
    PrintService[] services lookup.getPrintServices();
     
                if (
    services.length 0) {
                    
    service null;
                    
    // gewünschten nach Namen auswählen
                    
    for(int i=0;i<services.length;i++) {
                       if(
    services[i].getName().equalsIgnoreCase(printerName)) {
                         
    service services[i];
                         break;
                        }
                    }
     
                 }
              } catch(
    Exception e) {
                         
    System.err.println("Service nicht gefunden " e);
              }
              return 
    service;
            }
     public 
    boolean run(String pdfFileString printerURLthrows Exception {
     
                 
    boolean printOK false;
                 
    PrintService service getPrinterByUrl(printerURL);
                 if(
    service!=null) {
                    
    // Attribute für Druckjob festlegen
                    
    PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
                    
    JobName docname = new JobName("AS/400 Spoolumsetzung"Locale.getDefault());
                    
    RequestingUserName usernameAttr = new RequestingUserName(
                            
    "AS400"Locale.GERMANY);
                    
    attributes.add(usernameAttr);
                    
    attributes.add(docname);
                    
    // Kopienanzahl, Schacht... hier hinein
     
                    
    DocPrintJob job service.createPrintJob();
                    
    FileInputStream stream = new FileInputStream(pdfFile);
                    
    DocAttributeSet das = new HashDocAttributeSet();
                    
    Doc doc = new SimpleDoc(streamDocFlavor.INPUT_STREAM.PDFdas);
                    try {
                         
    // Druckjob absetzen
                         
    job.print(docattributes);
                         
    System.out.println("printing successfull...");
                         
    printOK true;
                    } catch (
    PrintException e) {
                         
    e.printStackTrace();
                    }
                 }
                 return 
    printOK;
     }
     
     public static 
    void main(String args[]) throws Exception {
            if(
    args.length 2)
             {
                 
    System.out.println("Parameter: PDF-File cups-Adresse");
             }
             else
             {
                 new 
    pdf2cups().run(args[0],args[1]);
             }
            }
     } 
    Der Aufruf (QSH)könnte dann so aussehen (2):
    java -cp /etc/PDF400/jipsi.jar:/etc/PDF400/ext/commons-httpclient-2.0.1.jar:/etc/PDF400/ext/commons-logging.jar pdf2cups /etc/PDF400/HelloWorld.PDF http://dnx:631/printers/EDV_DELL

    1. Parameter: Dateiname inkl. Pfad: /etc/PDF400/HelloWorld.PDF
    2. Parameter volle Cups-Url (/printers/ kann auch wegbleiben), der letzte Teil wird als Druckername verwendet

    also Server: http://dnx:631/printers
    Drucker-Queue: EDV_DELL

    Zur Performance ist zu sagen, dass der Start der JVM die meiste Zeit beansprucht. Ich verwende eine etwas andere Version (wg. Attributen) nur im Serverbetrieb aus anderen Javaklassen - da gibt es eigentlich keine Wartezeiten.

    Wir verwenden den Cupsdruck zur Formularumformatierung. Der Drucker wird mit dem Formulartyp Firmenpapier gestartet. Alle anderen Formulare werden vom Java-Serverjob übernommen, als PDF mit Hilfslinien oder Hintergrundformular umformatiert und via Cups (am gleichen Drucker, Fach2, weißes Papier) ausgegeben. So können wir stressfrei die alten IBM-Drucker und Formulare nach und nach ausmustern, ohne irgendwelche bedingten Overrides in unsere Programme eingebaut zu haben.

    Robert P.



    (1) leider konnte ich die gepatchte Version nicht uploaden (mit 600KB zu groß)

    (2) absichtlich alle benötigten jars angeführt, zumindest die commons... wird man irgendwo im /QIBM/ProdData/Java.. (ext oder Lib) unterbringen

  9. #33
    Registriert seit
    May 2005
    Beiträge
    2
    Erst mal Danke für die schnelle Reaktion!
    Mit der ausführlichen Beschreibung wird mir schon einiges klarer. Für den Einsatz dieser Lösung ist aber zwingend ein LINUX CUPS Server notwendig. Ich habe gehofft das man auch mit einer reinen AS/400 Lösung das Problem lösen könnte! Ich habe zwar schon verschiedene Versuche mit PCL und PS gefahren, konnte aber nie einen 100%igen Erfolgt erhalten.
    Nutzen Sie einen extra Linux Server oder betreiben Sie Linux mittels LPAR auf der AS/400?

    Watzl

  10. #34
    Registriert seit
    Oct 2004
    Beiträge
    240
    Zitat Zitat von watzl
    .... Ich habe zwar schon verschiedene Versuche mit PCL und PS gefahren, konnte aber nie einen 100%igen Erfolgt erhalten.
    Also Postscriptdateien (.ps Level 2) konnte ich auch direkt von der AS/400 drucken - der Drucker muss aber auch Postscript verstehen. Außerdem muss das File in ein *USERACII Spoolfile umgewandelt werden.

    Zitat Zitat von watzl
    Nutzen Sie einen extra Linux Server oder betreiben Sie Linux mittels LPAR auf der AS/400?
    Bei uns stehen genug Linux-Server herum, auf welchen auch alle Drucker im Cups definiert sind.

    Von daher war die Cups-Lösung für uns naheliegend.

    Es gibt sicher noch einige Lösungsansätze (z.B. pdf2ps auf Java-Basis enthalten in der kostenpflichtigen Java-Lib SmartJprint) aber meistens hat man dann ein Postscriptfile, welches die dazugehörigen Drucker benötigt.

    Robert P.

  11. #35
    Registriert seit
    Dec 2005
    Beiträge
    1
    Hallo KM,

    es wäre nett, wenn ich das JavaScript auch bekommen könnte.

    Hier meine E-Mail Adresse:
    Joerg.Mueller@heidelberg.com



    Vielen Dank im Voraus

    xhonk

  12. #36
    Registriert seit
    Jul 2006
    Beiträge
    1
    Hallo KM,

    kannst du mir auch das JAVA-Script mailen und wie man es aufruft.
    michelberger@schwaebische-bank.de

Similar Threads

  1. PDF in OUTQ drucken? (von IFS)
    By LaggerChr in forum NEWSboard Linux
    Antworten: 36
    Letzter Beitrag: 31-01-16, 13:34
  2. AFPRSC --> PDF
    By jgv in forum NEWSboard Drucker
    Antworten: 1
    Letzter Beitrag: 28-11-06, 10:15
  3. PDF drucken
    By KM in forum NEWSboard Drucker
    Antworten: 1
    Letzter Beitrag: 20-09-06, 12:27
  4. PDF und mehr für iher System
    By mk in forum NEWSboard Server Software
    Antworten: 2
    Letzter Beitrag: 31-08-06, 12:30
  5. PDF aus RPG drucken
    By miro in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 02-09-05, 14:09

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •