# Probleme beim Drucken (mit Swing)



## Scrapy (15. September 2005)

Ganz so einfach schein das Drucken in Java nicht wirklich zu sein.
Man kann sich eine ganze Menge Attribute der Drucker anzeigen lassen aber wie mir scheint nur wenige verändern.

Ich drucke momentan mit folgender Funktion, womit ich ein Dokument erstelle:

```
DocFlavor dflDokument = DocFlavor.SERVICE_FORMATTED.PRINTABLE;
PrintRequestAttributeSet praDruckAttribute = new HashPrintRequestAttributeSet();
praDruckAttribute.add(MediaSizeName.ISO_A4);
DocPrintJob dpjDrucken = ptsDruckDienst.createPrintJob();
Doc docDokument = new SimpleDoc(new SeiteDrucken(), dflDokument, null);
dpjDrucken.print(docDokument, praDruckAttribute);
```
Die Grafik unter der Klasse: "SeiteDrucken" mit der Methode: "print(...)", dich ich mit Graphics2D erzeuge wird richtig gut ausgedruckt.

Leider kann ich über den obigen Code keine Druckoptionen einstellen, wie z.B. wenn 2 Kopien gedruckt werden sollen. Um das zu verändern habe ich eine andere Routine gefunden, die direkt in der Methode: "print(...)" in der Klasse "SeiteDrucken" aufgerufen wird:

```
PrinterJob prjDrucken = PrinterJob.getPrinterJob();
prjDrucken.setJobName("Test");
prjDrucken.setCopies(2);
prjDrucken.setPrintable(this);
PageFormat.setPaper();
if(prjDrucken.printDialog())
{
	try
	{
		prjDrucken.print();
	}
	catch(PrinterException ex)
	{
	}
}
```
- Leider kann ich hierüber nicht den Druckrand einstellen. Da ich aber Bilder drucken möchte und mein Drucker den randlosen Druck unterstützt, sind mir die 25,4 mm einfach zu viel - selbst für Dokumente ist das ein zu breiter Rand.
- Des Weiteren erscheint der Name: "Java Printing" in der Druckliste, anstelle von "Test" oder ein anderer benutzerdefinierter Name.
Das sind die 2 kleinen Problemchen, die mir momentan den Kopf zerbrechen. 

Drucken in Java ist noch Neuland für mich, wäre schön, wenn ihr mir bei meinen Problemen helfen könntet.

Danke schonmal im voraus!


----------



## schnuffie (21. September 2005)

Für beide Probleme gibt es das entsprechende Objekt in Java:

Erzeuge ein java.awt.print.Paper ab und setze Deine Werte bei setImagableArea(...).

Der Klasse java.awt.PageFormat übergibst Du dieses Objekt.

In der print(...)-Methode übergibst Du dieses PageFormat.

Beim java.awt.PrinterJob kannst Du z.B. die Anzahl der Kopien festlegen.


----------

