T
tuxedo
Gast
So,
jetzt wo ich endlich meine Daten im PDF Format vorliegen habe scheitere ich dran das PDF zu drucken...
War in der FAQ und hab dort nachgeschaut. Da ist ja auch ein schönes Beispiel drin.
war auch schon bei google und in Sun's Java-Forum. Aber alle beispiele laufen aufs gleiche raus.
Doch zurück zum FAQ-Beispiel:
ich habs das erste hier mal genommen und etwas modifiziert:
Das mit dem iDevice hab ich mal auskommentiert da er da immer etwas von "must be non-null" oder so gemeckert hat. Da ich für's erste eh kein PrintDialog benötige hab ichs mal weggelassen und den Default-Printer genommen.
Das hier war der Fehler:
So, zurück zum drucken: Beim ausführen von obigem Code (mit dem auskommentierten) bekomm ich folgenden Fehler:
Die angegebene Datei ist verfügbar, lässt sich in Acrobat öffnen und auch drucken. Nur Java frisst sie nicht.
Wenn ich DocFlavour auf Autosense stelle druckt er seitenweise Steuercodes statt der PDF.
Gibts unterschiede in PDF und deren kompatibilität? Hab noch keine PDF gefunden die mit obigen Code harmoniert.
Hat wer ne Idee was das sein könnte ?
-Alex
[UPDATE]
Okay, hab nochmal die Forensuche bemüht (http://www.java-forum.org/de/viewtopic.php?t=22899&highlight=invalid+flavor) und bin auf folgende Aussage von "thE_29" gestossen:
Super sache. Heisst das das ganze ist jetzt druckerabhängig oder wie? Acrobat hat eigtl nie Probleme
Muss doch zu machen sein... PDF drucken in Verbindung mit der Java Print API ...
Any ideas ?
jetzt wo ich endlich meine Daten im PDF Format vorliegen habe scheitere ich dran das PDF zu drucken...
War in der FAQ und hab dort nachgeschaut. Da ist ja auch ein schönes Beispiel drin.
war auch schon bei google und in Sun's Java-Forum. Aber alle beispiele laufen aufs gleiche raus.
Doch zurück zum FAQ-Beispiel:
ich habs das erste hier mal genommen und etwas modifiziert:
Code:
import javax.print.*;
import javax.print.attribute.*;
import java.io.*;
import javax.print.event.PrintJobListener;
import javax.print.event.PrintJobEvent;
import java.awt.GraphicsEnvironment;
public class PrintPDF {
private MyDruckListener drucker = new MyDruckListener();
public PrintPDF(String strFilename, int iDevice) {
try {
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
// setzt das auszudruckend Dokument fest
DocFlavor flavor = DocFlavor.INPUT_STREAM.PDF; // hier nachsehen,
// welches man
// benötigt!
PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor, pras);
PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
PrintService service = defaultService;
// // wenn als Device -1 übergeben wird, wird ein Dialog für das
// // drucken auswählen ausgegeben!
// if (iDevice == -1) {
// service = ServiceUI.printDialog(GraphicsEnvironment
// .getLocalGraphicsEnvironment().getDefaultScreenDevice()
// .getDefaultConfiguration(), 200, 200, printService,
// defaultService, flavor, pras);
// }
// // ansonsten wird der 1te (Standard/Default) Drucker genommen
// else {
// // wenn es keine Drucker gibt und das Device niedriger ist als
// // die Länge
// if (printService != null && printService.length != 0
// && printService.length > iDevice) {
// service = printService[iDevice];
// }
// // ansonsten standarddevice
// else if (printService != null && printService.length != 0) {
// service = printService[0];
// }
// }
//
//// service = defaultService;
// wenn der Dateiename null ist, wird die Druckfunktion beendet!
if (strFilename == null) {
return;
}
// wenn der Service nicht null ist, wird ausgedruckt
if (service != null) {
DocPrintJob job = service.createPrintJob();
// fügt listener hinzu
job.addPrintJobListener(drucker);
FileInputStream fis = new FileInputStream(strFilename);
DocAttributeSet das = new HashDocAttributeSet();
Doc doc = new SimpleDoc(fis, flavor, das);
job.print(doc, pras);
}
}
// wenn kein Druckerdevice gefunden wurde!!
catch (ArrayIndexOutOfBoundsException ex) {
ex.printStackTrace();
System.out.println("Keine Drucker gefunden!!");
}
// bei sonstigen Exceptions!
catch (Exception ex) {
ex.printStackTrace();
}
}
private class MyDruckListener implements PrintJobListener {
public void printDataTransferCompleted(PrintJobEvent printJobEvent) {
System.out.println("Daten wurden zum Drucker geschickt!");
}
public void printJobCompleted(PrintJobEvent printJobEvent) {
System.out.println("Drucker hat fertig gedruckt!");
}
public void printJobFailed(PrintJobEvent printJobEvent) {
System.out.println("Fehler beim Drucken!");
}
public void printJobCanceled(PrintJobEvent printJobEvent) {
System.out.println("Abbruch des druckes!");
}
public void printJobNoMoreEvents(PrintJobEvent printJobEvent) {
System.out.println("JobNoMoreEvents!");
}
public void printJobRequiresAttention(PrintJobEvent printJobEvent) {
System.out.println("JobRequieresAttention!");
}
}
public static void main(String[] args) {
new PrintPDF("my-output.pdf",-1);
}
}
Das mit dem iDevice hab ich mal auskommentiert da er da immer etwas von "must be non-null" oder so gemeckert hat. Da ich für's erste eh kein PrintDialog benötige hab ichs mal weggelassen und den Default-Printer genommen.
Das hier war der Fehler:
Ist jetzt aber für's erste wie gesagt nicht weiter wild.java.lang.IllegalArgumentException: services must be non-null and non-empty
at javax.print.ServiceUI.printDialog(ServiceUI.java:146)
at PrintPDF.<init>(PrintPDF.java:26)
at PrintPDF.main(PrintPDF.java:100)
So, zurück zum drucken: Beim ausführen von obigem Code (mit dem auskommentierten) bekomm ich folgenden Fehler:
Fehler beim Drucken!
sun.print.PrintJobFlavorException: invalid flavor
at sun.print.Win32PrintJob.print(Win32PrintJob.java:312)
at PrintPDF.<init>(PrintPDF.java:59)
at PrintPDF.main(PrintPDF.java:100)
Die angegebene Datei ist verfügbar, lässt sich in Acrobat öffnen und auch drucken. Nur Java frisst sie nicht.
Wenn ich DocFlavour auf Autosense stelle druckt er seitenweise Steuercodes statt der PDF.
Gibts unterschiede in PDF und deren kompatibilität? Hab noch keine PDF gefunden die mit obigen Code harmoniert.
Hat wer ne Idee was das sein könnte ?
-Alex
[UPDATE]
Okay, hab nochmal die Forensuche bemüht (http://www.java-forum.org/de/viewtopic.php?t=22899&highlight=invalid+flavor) und bin auf folgende Aussage von "thE_29" gestossen:
Java sagt std mäßig das fast kein Drucker PS oder PDF Dateien drucken kann...
Super sache. Heisst das das ganze ist jetzt druckerabhängig oder wie? Acrobat hat eigtl nie Probleme
Muss doch zu machen sein... PDF drucken in Verbindung mit der Java Print API ...
Any ideas ?