PDF drucken: "invalid flavor"

Status
Nicht offen für weitere Antworten.
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:

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:

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)
Ist jetzt aber für's erste wie gesagt nicht weiter wild.

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 ?
 
T

tuxedo

Gast
[UPDATE2]

http://forum.java.sun.com/thread.jspa?threadID=280879&messageID=2465388 :
This is one of Sun's nasty little "gotchas" in java. While they included a PDF flavor in javax.print, there's still no PDF renderer, so printing PDF is not yet supported. When will it be? Oh, probably about the same time the promised update to the Windows version of javax.comm comes out...

Die Aussage ist aber von 2004... Kann doch unmöglich sein dass in den vergangenen 2 Jahren das nicht gefixt wurde?!

- Alex
 

thE_29

Top Contributor
Hey, Suns Update und BugPolicy von bestehenden Dingen ist gleich 0!!

Es gibt in der Top Bug Liste Fehler die 7 Jahre alte sind!!! (und in java 6 noch immer da sind)


PDFs kann man nicht drucken, dafür aber PostScript Dateien!

Oder du druckst über den Adobe aus!

acrord32.exe /h /p "C:\\bla\\doc.pdf"
 
T

tuxedo

Gast
Hi,
okay. Also muss ich jetzt PDF nach PS konvertieren... Klappt das drucken dann mit allen Druckern oder brauch ich hier wieder nen speziellen?

Oder kennt jemand ne PDF Druck-API die unter der LGPL oder ähnlichem steht?

- Alex

[UPDATE]

Okay, ich bin ein wenig fündig geworden:

http://www.pdfbox.org

Damit hab ich schon meinen ersten Druckerfolg hinter mir. Leider ist in 0.7.2 noch ein Bug der nur de erste Seite druckt, und die nicht ganz korrekt. Teste gerade die 0.7.3 Dev-Version ....
 

robertpic71

Bekanntes Mitglied
Eine weitere Lib ist JPedal (Dual Licence Commercial + GPL). Die dürften schon etwas weiter sein.

JPedal findest du unter www.jpedal.org/.

Da bei uns in der Firma fast alle Drucker auch unter Linux als Cups-Drucker definiert sind, drucke ich meine PDF's auf den Cupsdrucker. Cups wandelt dann selbständig PDF's für den Drucker um.

RobertPic
 
T

tuxedo

Gast
JPedal hab ich auch schon gefunden.
Allerdings läuft mein Projekt nicht unter der GPL und soll es auch nicht werden. LPGL oder BSD-Style wäre besser :)

Der Kaufpreis für die uneingeschränkte Lizenz, die ich wohl benötigen würde, ist dann doch etwas zu übertrieben für meine Mittel.

Die Idee mit CUPS hab ich auch schon in Erwägung gezogen. Aber dadurch handle ich mir noch ein paar weitere Abhängigkeiten ein die ich im Moment nicht gebrauchen kann.
Der Server läuft zwar unter Linux, soll aber nur die Datenbank stellen und die Serverseite der Software stellen. Die Clients sollen jeweils IHRE drucker benutzen können, ohne dass am Server eingegriffen werden muss.

Werde jetzt also doch noch etwas suchen müssen. Bin mir sicher dass es eine akzeptable Lösung gibt PDF in Postscript zu konvertieren und dann zu drucken oder sowas in der Art.
Oder PDFBox kriegts irgendwann in nicht allzuferner Zukunft gebacken mit dem PDF drucken....

Mal sehen.

- Alex

P.S. 0.7.3 von PDFBox druckt schon besser, aber immer noch nicht korrekt. Habs auch noch nciht geschafft mehr wie die erste Seite eines Dokuments mit vielen Seiten zu drucken.
 

OnkeltOm

Neues Mitglied
hallo,

ich denke ich habe das gleiche - zumindest aber ein ähnliches problem... ich möchte eine mit iText erzeugte pdf-datei sowohl speichern als auch programmatisch ausdrucken...

bist du einer lösung schon näher...? wäre für weiteren input dankbar...

gruss tom
 
T

tuxedo

Gast
Eine wriklich praktikable Lösung habe ich nicht gefunden. Zumindest keine die mein Budget nicht schröpfen würde.

Das einzigste was geht ist das Drucken via Acrobat Kommandozeile.
Aber da bleibt, etwas unschöner weise, Acrobat minimiert in der tastleiste geöffnet.

- Alex
 

Oni

Top Contributor
moin,

gibt es zu diesem thema mittlerweile etwas neues? alternativen zum drucken über acrobat?

gruß oni
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
OnDemand Drucken / Druckserver Allgemeine Java-Themen 13
M Drucken drawString(); Allgemeine Java-Themen 1
M Drucken ohne Dialog Allgemeine Java-Themen 1
M Drucken von Dateien Allgemeine Java-Themen 10
S Seitenausrichtung beim Drucken Allgemeine Java-Themen 1
T Drucken einer PDF Datei Allgemeine Java-Themen 4
S Input/Output Drucken Allgemeine Java-Themen 2
C Mehrere Seiten drucken in Hoch- und Querformat Allgemeine Java-Themen 0
T Drucken von JPanel Allgemeine Java-Themen 4
F Mehrere JTables' drucken Allgemeine Java-Themen 0
B JTextArea 6 mal auf DinA4 Format verteilen und drucken Allgemeine Java-Themen 1
Androbin Drucken in Java - Größen- und Positionsprobleme Allgemeine Java-Themen 3
E Drucken einer Pdf Datei unter Java. Allgemeine Java-Themen 1
M pdf File bzw. ausgefüllte pdf Formulare drucken Allgemeine Java-Themen 2
L Aktuell angezeigtes Drucken Allgemeine Java-Themen 8
Thallius Drucken mit Logo Allgemeine Java-Themen 2
Thallius Drucken mit Templates Allgemeine Java-Themen 3
S PDF-Generierung und Drucken Allgemeine Java-Themen 11
A Drucken auf theoretisch unendlich langer Seite Allgemeine Java-Themen 2
M Fehlende Zeichen beim Drucken mit PDFBox Allgemeine Java-Themen 10
B Text auf Standarddrucker drucken Allgemeine Java-Themen 3
B Drucken (Inhaltsverzeichnis usw.) Allgemeine Java-Themen 4
F Drucken von Escape-Sequenzen Allgemeine Java-Themen 11
H Drucken von Belegen (Belegdrucker: EPSON TM-T88III Allgemeine Java-Themen 2
W Input/Output Drucken ohne GUI Allgemeine Java-Themen 11
C PDF Dateien mit Java drucken Allgemeine Java-Themen 2
R PDF duplex drucken Allgemeine Java-Themen 3
A Drucken auf kleine Formate Allgemeine Java-Themen 2
sylo PageFormat - Das Problem mit dem Drucken Allgemeine Java-Themen 5
M Drucken hilfe Allgemeine Java-Themen 4
Y Drucken mit Java Allgemeine Java-Themen 2
M aus Datei drucken Allgemeine Java-Themen 5
M Problem beim Drucken von PDFs Allgemeine Java-Themen 3
T Drucken von variabel langen Listen (es kommen nur leere Seiten raus) Allgemeine Java-Themen 2
A Drucken ändert aktuelles Verzeichnis Allgemeine Java-Themen 2
S Drucken ohne Rand Allgemeine Java-Themen 3
A Drucken einer JList Allgemeine Java-Themen 3
D pdf mit iText drucken Allgemeine Java-Themen 4
K SWT OpenOffcie Dokument drucken Allgemeine Java-Themen 8
V Drucken von Listen Allgemeine Java-Themen 6
J xls Datei drucken mit Java Allgemeine Java-Themen 10
A HTML-Seite aufrufen, drucken und zum Programm zurückkehren Allgemeine Java-Themen 2
J Drucken mit drawString() und Zeilenumbruch Allgemeine Java-Themen 3
O Mehrere Exemplare(Kopieen) drucken Allgemeine Java-Themen 2
P JTable drucken Allgemeine Java-Themen 8
U Dokumente als PDF "drucken" Allgemeine Java-Themen 3
T Drucken mit PrintJob und Einstellungen merken Allgemeine Java-Themen 3
O Mehrseitiges Drucken Allgemeine Java-Themen 5
V Datei Drucken Allgemeine Java-Themen 19
D Inhalt der JTextArea drucken Allgemeine Java-Themen 2
S Problem beim Drucken auf Netzwerkdrucker unter Linux Allgemeine Java-Themen 9
R Drucken über bestimmten Drucker Allgemeine Java-Themen 11
V Probleme beim Drucken mehrerer PDF's Allgemeine Java-Themen 17
Zed Tool zum drucken von Sourcecode Allgemeine Java-Themen 9
G diagramm drucken Allgemeine Java-Themen 3
J Drucken über Java oder OOo empfehlenswert? Allgemeine Java-Themen 15
W Drucken in Graustufen Allgemeine Java-Themen 4
F Frage zum Drucken Allgemeine Java-Themen 4
G Drucken einer GUI-Komponenter ? Allgemeine Java-Themen 4
Lazybone iText und Drucken Allgemeine Java-Themen 5
G Drucken mit Laserdrucker Allgemeine Java-Themen 5
Lazybone Rechnung erstellen und Drucken Allgemeine Java-Themen 19
G Drucken in Java Allgemeine Java-Themen 3
M Drucken Allgemeine Java-Themen 2
M Drucken Schacht auswählen/bestimmen Allgemeine Java-Themen 2
P Drucken Allgemeine Java-Themen 9
T OO zum drucken/convertieren ohne Socket Allgemeine Java-Themen 8
M Drucken mit BufferedImage Allgemeine Java-Themen 9
S hilfe für drucken Allgemeine Java-Themen 4
B Drucken - welche Bibliothek favorisiert Ihr? Allgemeine Java-Themen 16
D Masken drucken Allgemeine Java-Themen 13
C von Java aus ein Dokument im Browser drucken Allgemeine Java-Themen 11
L Per IText erstelltes PDF automatisch drucken Allgemeine Java-Themen 13
G Drucken Allgemeine Java-Themen 9
L Rechnungen in Java erstellen & drucken Allgemeine Java-Themen 23
G iText: Problem beim Drucken von AcroFormen Allgemeine Java-Themen 2
André Uhres Drucken: Printer is not accepting job Allgemeine Java-Themen 3
F PostScript mit Java "drucken" Allgemeine Java-Themen 12
G Das aktuelle Fenster drucken Allgemeine Java-Themen 13
R Rechnung aus Java heraus erstellen und drucken Allgemeine Java-Themen 8
T Drucken von RTF-Dokumenten? Allgemeine Java-Themen 11
H Drucken unter Linux funktioniert nicht Allgemeine Java-Themen 2
A Nochmals Drucken Allgemeine Java-Themen 2
N Drucken+Papiergröße Allgemeine Java-Themen 9
B Daten zum Drucken aufbereiten Allgemeine Java-Themen 8
S Text optimal drucken Allgemeine Java-Themen 2
G drucken von html-code Allgemeine Java-Themen 2
S drucken unter j2sdk-1.4 möglich; unter jdk1.5 nicht; warum? Allgemeine Java-Themen 4
M Problem mit PageFormat beim Drucken Allgemeine Java-Themen 2
S Drucken!er druckt es zu groß aus! Allgemeine Java-Themen 5
S Drucken! Allgemeine Java-Themen 2
A Prof. Lib fürs Drucken Allgemeine Java-Themen 5
J Eine Rechnung speichern vom Drucken Allgemeine Java-Themen 3
J vorm Drucken speichern Allgemeine Java-Themen 3
J Drucken mit Java Allgemeine Java-Themen 2
S Drucken: Seite x von y ? Allgemeine Java-Themen 2
W Ablaufanzeige beim Drucken mit printerJob Allgemeine Java-Themen 3
T Drucken von Daten in einen DIN A5 Vordruck Allgemeine Java-Themen 2
P Drucken einer Excel Datei in Java Allgemeine Java-Themen 8
J Attribute beim Drucken ändern/ausstellen Allgemeine Java-Themen 8

Ähnliche Java Themen

Neue Themen


Oben