-
 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 printerUrl) throws 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(0, printerUrl.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 pdfFile, String printerURL) throws 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(stream, DocFlavor.INPUT_STREAM.PDF, das); try { // Druckjob absetzen job.print(doc, attributes); 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
Similar Threads
-
By LaggerChr in forum NEWSboard Linux
Antworten: 36
Letzter Beitrag: 31-01-16, 13:34
-
By jgv in forum NEWSboard Drucker
Antworten: 1
Letzter Beitrag: 28-11-06, 10:15
-
By KM in forum NEWSboard Drucker
Antworten: 1
Letzter Beitrag: 20-09-06, 12:27
-
By mk in forum NEWSboard Server Software
Antworten: 2
Letzter Beitrag: 31-08-06, 12:30
-
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
-
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