Einzelnen Beitrag anzeigen
Alt 17.02.2006, 22:02   #7 (permalink)
tobsen
Overclocker
 
Benutzerbild von tobsen
 

Registriert seit: 09.07.2005
Beiträge: 233

tobsen sorgt für eine eindrucksvolle Atmosphäretobsen sorgt für eine eindrucksvolle Atmosphäre

Standard AW: drucken eines textes in java

So,

also der Code von Dir, tele, hat mir sehr geholfen. Zwar kann ich noch nicht drucken, aber ich denke mit deinem Code bin ich viel näher dran als vorher. Hab nur ein/zwei Konstanten geändert.
(tele & co können jetzt unten weiterlesen)


------------------------------------------------------------------------------------------------------

Für die anderen Leute die in diesem Thread noch nach ner Anleitung suchen geb ich mal meinen Zwischenstand an:

Also erstmal die diversen import Anweisungen:
Code:
import javax.print.*;
import javax.print.DocFlavor.STRING;
import javax.print.attribute.*;
import javax.print.attribute.standard.*;
Dann meine Methode printJob():
Code:
public void printJob() throws PrinterException {
			String content = taContent.getText();
					  
			 DocFlavor flavor = DocFlavor.INPUT_STREAM.TEXT_PLAIN_US_ASCII;
		     PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
			   aset.add(MediaSizeName.ISO_A4);
			   PrintService[] pservices =
		 				 PrintServiceLookup.lookupPrintServices(flavor, aset);
			   if (pservices.length > 0) {
		    	   DocPrintJob pj = pservices[0].createPrintJob();
				   
		 	 // InputStreamDoc is an implementation of the Doc interface //
		    	   Doc doc = new InputStreamDoc(content, flavor);
				   try {
		 			 pj.print(doc, aset);
				 } catch (PrintException e) { 
					}
			   }
		}
Und dann noch meine neue Klasse inputStreamDoc:
Code:
import javax.print.*;
import javax.print.DocFlavor.STRING;
import javax.print.attribute.*;
import javax.print.attribute.standard.*;
import java.io.*;



class InputStreamDoc implements Doc {
	private String filename;
	private DocFlavor docFlavor;
	private InputStream stream;

	public InputStreamDoc(String name, DocFlavor flavor) {
		filename = name;
		docFlavor = flavor;
	}
   
	public DocFlavor getDocFlavor() { 
		return docFlavor;
	}

	/* No attributes attached to this Doc - mainly useful for MultiDoc */
	public DocAttributeSet getAttributes() {
		return null;
	}

	/* Since the data is to be supplied as an InputStream delegate to
	* getStreamForBytes().
	*/
	public Object getPrintData() throws IOException {
		return getStreamForBytes();
	}

	/* Not possible to return a GIF as text */
	public Reader getReaderForText()
		throws UnsupportedEncodingException, IOException {
	   return null;
	}

	/* Return the print data as an InputStream.
	* Always return the same instance.
	*/
	public InputStream getStreamForBytes() throws IOException {
		synchronized(this) {
			if (stream == null) {
				stream = new FileInputStream(filename);
			}
			return stream;
		} 
	}
}
Wie gesagt, es funktioniert noch nicht, aber ich denke es müsste schon ungefähr so laufen *hoff*
------------------------------------------------------------------------------------------------------



Aber noch ne Frage (sorry falls die dumm klingt):
In der Methode printJob() hab ich folgende Zeile:
Code:
Doc doc = new InputStreamDoc(content, flavor);
Die Variable content ist ja der String der den Text enthält. Aber der ist doch da falsch stimmts? Ich denke ich kann da keinen String übergeben. tele macht es ja mit einer Datei "test.ps".
Frage: Ich muss also den Text aus der Textarea erst in einem neuen File (z.B. "printTemp.txt") abspeichern und dann dieses File in der Anweisung angeben, oder?
tobsen ist offline   Mit Zitat antworten