# Drucken des Inhaltes einer JTextArea



## Troilus (9. Nov 2004)

Hi,
irgendwie ist das Drucken unter Java so einfach oder kaum einer nutzt es . Ich habe bei der Suche nur ein paar Threads zu diesem Thema gesehen.

Ich habe folgendes Problem:
Ich möchte den Inhalt einer JTextArea (also JTextArea.getText()) ausdrucken. Nach einigen rumforschen bin ich auf "javax.print" gestossen und hab mir das genauer angesehen.

Ich hab dann mit dem Wissen versucht eine Methode zu baun, mit der ich einen *String* auf dem Drucker ausgeben kann:

```
public static void printRecipe(String text2Print) {
		    
	    //Datenformat erzeugen
	    DocFlavor format = new DocFlavor("text/html",text2Print.getClass().getName());
	    
	    //Dokument erzeugen
	    Doc myDoc = new SimpleDoc(text2Print, format, null) ;
	    
	    //Drucker suchen
	    PrintService service = PrintServiceLookup.lookupDefaultPrintService();
	    
	    //Druckauftrag für einen Drucker erzeugen und Dokument drucken
	    DocPrintJob job = service.createPrintJob() ;
	    try {
	    job.print(myDoc, null);<--- Exception
	    } catch(PrintException ex) {
	      ex.printStackTrace();
	    }
	}
```

Wenn die Methode bei job.print angelangt ist meckert der Compiler:
sun.print.PrintJobFlavorException: invalid flavor
	at sun.print.Win32PrintJob.print(Unknown Source)

Jedoch müsste ich doch eigentlich mit *new DocFlavor("text/html",text2Print.getClass().getName());*
den Flavor für ein String richtig eingestellt haben. Kann mir evtl wer sagen was ich da falsch gemacht habe?


Zuvor hab ich gedacht, dass man nur die Methoden von "javax.print" mit Dateien benutzen kann. Zu diesem Zweck hab ich eine temporäre Datei erstellt und den String dort reingeknallt. Als Ergebnis konnte ich den Drucker ansprechen jedoch druckte der nix. Im Systray flackerte kurz der Systray auf und das wars dann.

Der Code dazu:

```
public static void printRecipe(boolean WithPic, String text2Print) {
		    
	   File tempFile = createTempFile(text2Print);
	   System.out.println("TempFile: "+tempFile.getAbsolutePath());
		
	    //Datei als Datenquelle einlesen.
	    FileInputStream textStream = null;
	    try {
	    textStream = new FileInputStream(tempFile.getAbsolutePath()) ;

	    } catch(FileNotFoundException ex) {
	      ex.printStackTrace();
	    }
	    
	    //Datenformat erzeugen.
	    DocFlavor format = DocFlavor.INPUT_STREAM.AUTOSENSE;
	    
	    //Dokument erzeugen.
	    Doc myDoc = new SimpleDoc(textStream, format, null) ;
	    
	    //Drucker suchen
	    PrintService service = PrintServiceLookup.lookupDefaultPrintService();
	    
	    //Druckauftrag für einen Drucker erzeugen und Dokument drucken.
	    DocPrintJob job = service.createPrintJob() ;
	    try {
	    job.print(myDoc, null);
	    } catch(PrintException ex) {
	      ex.printStackTrace();
	    }
	}
```

Ich würd lieber den String auf den Drucker bekommen. Jedoch interessierts mich wieso im 2. Quellcode der Drucker nix macht obwohl eigentlich alles ok ist. Gibts da spezielle Möglichkeiten um den Druckerstream zu überwachen?

Bis dann


----------



## bygones (9. Nov 2004)

Troilus hat gesagt.:
			
		

> irgendwie ist das Drucken unter Java so einfach oder kaum einer nutzt es . Ich habe bei der Suche nur ein paar Threads zu diesem Thema gesehen.


Weder das eine doch das andere  :bae: 
da fällt mir ein "Teste-neue-JTable-print-Methode".... dass muss ich noch machen.....


----------



## Troilus (9. Nov 2004)

Mh,
also laut deiner Aussage nehme ich nun mal an das viele Javaprogrammierer drucken von Bereichen ihrer Applikation implementiert haben und dies nicht trivial ist. 
Wie habt ihr das umgesetzt? Links zur Api bzw irgendwelchen Tutz würden wir schon mal reichen


----------



## thE_29 (10. Nov 2004)

Read the FAQ  da wird dir geholfen :bae:


----------



## Troilus (10. Nov 2004)

thE_29 hat gesagt.:
			
		

> Read the FAQ  da wird dir geholfen :bae:



Tjo  die habsch ja gelesen. Das zweite Beispiel will ich eigentlich nicht benutzen da ich das mit DocFlavor hinbekommen will/wollte. In der FAQ steht im 1. Beispiel bei der Wahl des Flavors folgendes:


```
DocFlavor flavor =  DocFlavor.INPUT_STREAM.XXX; //hier nachsehen, welches man benötigt!
```

da ich jedoch auf nen String zurückgreife kommt für mich (lt API) folgendes in Frage:


```
DocFlavor format = new DocFlavor("text/html",text2Print.getClass().getName());
```

Jedoch bekomme ich halt den o.g. Fehler und wollte im Endeffekt wissen, ob ich was falsch gemacht habe bzw. ob jemand mit DocFlavor bzw. mit dessen Umgang mit Strings Erfahrung hat.

In der FAQ steht dem net drin 

Soweit mal


----------

