# [Minimalprogramm] mit Java Drucken



## THEBRAIN (9. Feb 2011)

Hallo,

Ich beschäftige mich gerade mit dem Drucken unter Java.
Im Internet habe ich schon einige Tutorials gefunden jedoch sind diese immer gleich sehr umfangreich und nicht das womit ich gerne anfangen möchte. :shock:

am liebsten wäre mir eine Umsetzung mit javax.* da dieses das neuste ist und weiter entwickelter als die Druckmethoden von Java 1.0-1.2 sein soll. Aber wenn ihr als erfahrener Coder eine andere Meinung habt dann wäre ich auch mit der zufrieden.

*Ich würde mich sehr freuen wenn jemand ein "sehr kleines Beispiel" anbieten könnte zum einfach Textdruck. *:rtfm:

Vielen dank.


----------



## XHelp (9. Feb 2011)

Mach in die catch-Blöcke 
	
	
	
	





```
ex.printStackTrace();
```
 rein, vermutlich weißt du dann mehr


----------



## Final_Striker (9. Feb 2011)

```
public class Drucker {

	public static void main(String[] args) {
		try {
			
			FileInputStream textStream = new FileInputStream("c:/bild.jpg");
			
			DocFlavor formatSTREAM = DocFlavor.INPUT_STREAM.JPEG;
			PrintService service = PrintServiceLookup.lookupDefaultPrintService();
			DocPrintJob job = service.createPrintJob();
			Doc doc = new SimpleDoc(textStream, formatSTREAM, null);
			job.print(doc, null);

		} catch (PrintException e) {
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}	
	}
}
```


----------



## THEBRAIN (9. Feb 2011)

@ Final_Striker
- Sauber, das nenne ich doch mal klein und übersichtlich - genau richtig für den Einstieg :applaus::toll:

DICKES THX, und für deine Arbeit nen frisches


----------



## Final_Striker (9. Feb 2011)

kannst dir das noch durchlesen: Java 1.4 Neuheiten, Teil II: Java Print Service API (javax.print+++javax.print.attribute+++javax.print.attribute.standard+++javax.print.event)


----------



## THEBRAIN (10. Feb 2011)

Gibt es eine einfache Möglichkeit den Inhalt eines jTextArea (Text) zu Drucken?
Habe bereits geschaut aber kein geeignetes Format in der DocFlavor gefunden.


----------



## StefanG (11. Feb 2011)

```
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterJob;
import java.util.StringTokenizer;

public class MyPrintTool {
		
	public MyPrintTool() {
	}

	public void starteAusdruck(final String dateiInhalt) {
		PageFormat pageFormat = new PageFormat();
		PrinterJob printerJob = PrinterJob.getPrinterJob();
		printerJob.setPrintable(new Printable() {
			public int print(Graphics graphics, PageFormat pageFormat,
					int pageIndex) {
				Graphics2D graphics2D = (Graphics2D) graphics;
				graphics2D.translate(pageFormat.getImageableX(),
						pageFormat.getImageableY());
				StringTokenizer stringTokenizer = new StringTokenizer(
						dateiInhalt, "'");
				Font font = new Font("Monospaced", Font.BOLD, 10);
				graphics2D.setFont(font);
				int pageWidth = graphics2D.getClipBounds().width;
				FontMetrics fontMetrics = graphics2D.getFontMetrics(font);
				int position = fontMetrics.getHeight();
				int height = fontMetrics.getAscent();
				while (stringTokenizer.hasMoreTokens()) {
					String line = stringTokenizer.nextToken().trim() + "'";
					int lineWidth = fontMetrics.stringWidth(line);
					while (lineWidth > pageWidth) {
						String lineCopy = line;
						String firstPart = "";
						while (lineWidth > pageWidth) {
							int index = lineCopy.lastIndexOf(' ');
							firstPart = lineCopy.substring(0, index);
							lineWidth = fontMetrics.stringWidth(firstPart);
							lineCopy = firstPart;
						}
						graphics2D.drawString(firstPart, 0, position);
						position += height;
						line = line
								.substring(firstPart.length(), line.length())
								.trim();
						lineWidth = fontMetrics.stringWidth(line);
					}
					graphics2D.drawString(line, 0, position);
					position += height;
				}
				return (pageIndex == 0 ? PAGE_EXISTS : NO_SUCH_PAGE);
			}
		}, pageFormat);
		if (printerJob.printDialog()) {
			try {
				printerJob.print();
			} catch (Throwable throwable) {
				throwable.printStackTrace();
			}
		}
	}
}
```

Kannst auch das als eigene Klasse verwenden. Der Methode starteAusdruck gibts du dann als Parameter den Inhalt der JTextArea mit.

Derzeit habe ich noch einen StringTokenizer eingebaut! Er fügt immer bei einem " ' " einen zeilenumbruch ein. Müsstest du dir auf deinen Anwendungsfall eventuell anpassen oder entfernen.


----------

