# Datei Drucken



## Vicepoint (5. Jun 2009)

Hallo, ich habe folgendes Problem:

ich möchte eine Methode in Java, der ich einen Dateinamen übergebe. die Datei soll dann einfach über den Standarddrucker ausgedruckt werden. es kann sich dabei um Word PDF oder Grafikdateien handeln.

bisher habe ich leider nur bespiele für textausgabe auf dem drucker gefunden.

mfg
Vicepoint


----------



## Verjigorm (5. Jun 2009)

Desktop (Java Platform SE 6)) und print(File)

ab 1.6


----------



## Vicepoint (5. Jun 2009)

Danke schonmal für die schnelle antwort.
wie genau binde ich die klasse jetzt ein, damits funktioniert?


----------



## tuxedo (5. Jun 2009)

Steht doch in der API die bereits verlinkt wurde ... Ansonsten: Google ist auch dein Freund  So schwer ist es nicht ....

- Alex


----------



## Vicepoint (5. Jun 2009)

ich weiß leider nicht, wie ich den "Desktop" initialisiere 
kann mir da jemand weiter helfen?


----------



## bygones (5. Jun 2009)

steht doch da....
getDesktop


----------



## Verjigorm (5. Jun 2009)

```
Desktop.getDesktop().print(new File(dateiname));
```


----------



## tuxedo (5. Jun 2009)

Anmerkung: Am Anfang ist das API lesen nicht ganz leicht. Aber da MUSS man durch. Wenn man's mal durchschaut hat isses wie so vieles ziemlich einfach  
Also erst lesen, dann versuchen zu verstehen, und dann anhand eines konkreten Problems fragen stellen.

- Alex


----------



## Vicepoint (5. Jun 2009)

Vielen dank, hat funktioniert!


----------



## Vicepoint (5. Jun 2009)

leider werden aber nur textdokumente gedruckt. mit bildern funktioniert es offensichtlich nicht. kann mir dabei jemand helfen?


----------



## Verjigorm (5. Jun 2009)

Standardmässig geht das auch, mache ich hier ständig.

Irgendeine Fehlermeldung?


----------



## Vicepoint (5. Jun 2009)

nein leider keine fehlermeldung, es öffnet sich der windowsdialog zum bilderdrucken, aber es werden keine bilder zur auswahl angezeigt...


----------



## Guybrush Threepwood (5. Jun 2009)

Ich glaube, Du verstehst da etwas falsch: Die Desktop-Klasse startet nur die standardmäßig im System zum Drucken eines bestimmten Dateityps vorgesehene Anwendung. Vielleicht ist bei Dir keine Standardanwendung zum Drucken von Bilder registriert? Eigentlich müsste dan eine IOException geworfen werden. Was meinst Du mit 





> aber es werden keine bilder zur auswahl angezeigt...


?

Sollen ja auch keine angezeigt werden, oder?


----------



## Vicepoint (7. Jun 2009)

Na die standardanwendung fürs bilderdrucken startet. normalerweise werden dann dort bilder zur auswahl angezeigt. mit der beschriebenen vorgehensweise allerdings nicht.


----------



## Verjigorm (8. Jun 2009)

Ich hab nichtmal ne ahnung was die Standardanwendung fürs bilderdrucken bei Windows ist


----------



## Vicepoint (8. Jun 2009)

so siehts aus und wenn mann auf weiter klickt kommt folgendes:






es geht nur zwischen beiden hin und her, drucken kann man aber nix.
wenn ich mehrere bilder im ordner hab wird der dialog entsprechend öfter gestartet, mit dem selben ergebnis - nähmlich keinem :-(


----------



## Guybrush Threepwood (8. Jun 2009)

Sorry, die Frage ist für mich zu speziell (und auch recht gefährlich, wenn man bedenkt, dass selbst bei Windows unterschiedliche Versionen das unterschiedlich handhaben können). Als Trost für das Ausdrucken von PNGs zumindest die folgende Methode:


```
public static void printPNG(File filename) {
		PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
		DocFlavor flavor = DocFlavor.INPUT_STREAM.PNG;
		PrintService printService[] = PrintServiceLookup.lookupPrintServices(
				flavor, pras);
		PrintService defaultService = PrintServiceLookup
				.lookupDefaultPrintService();
		PrintService service = ServiceUI.printDialog(null, 200, 200,
				printService, defaultService, flavor, pras);
		if (service != null) {
			DocPrintJob job = service.createPrintJob();
			FileInputStream fis;
			try {
				fis = new FileInputStream(filename);
				DocAttributeSet das = new HashDocAttributeSet();
				Doc doc = new SimpleDoc(fis, flavor, das);
				job.print(doc, pras);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
```

... läst sich ja auch leicht auf andere Bildtypen erweitern.


----------



## thE_29 (1. Jul 2009)

Gibts für < java 6 eine Alternative für die Desktop Klasse und vorallem für .print()?


----------



## Gast2 (1. Jul 2009)

thE_29 hat gesagt.:


> Gibts für < java 6 eine Alternative für die Desktop Klasse und vorallem für .print()?



Mhm kenn grad keine... 
Hast schon mal nachgeschaut ob es einen backport gibt?
Oder hol dir das 6er jdk und programmier sie nach ist ja OS...


----------



## Guybrush Threepwood (6. Jul 2009)

Ja, einen Backport (bzw. die ursprüngliche Lib, die dann in das JDK gewandert ist) gibt es: https://jdic.dev.java.net/


----------

