Oberer Seitenrand kann beim Drucken vom Anwender nicht verstellen werden.

hansmueller

Mitglied
Hallo,

ich habe eine Druckfunktion mit einem Druckdialog print.Dialog() erstellt.
Das funktioniert alles super.

Aber, wenn der Anwender auf die Idee kommt im Druckdialog die Seitenränder zu ändern, funktioniert das manchmal nicht korrekt.

Probleme macht der obere Seitenrand.

Beispiel 1:
Der Anwender ändert nur jeweils einen Seitenrand.

Ergebnis:
Oben -> funktioniert nicht
Links -> funktioniert
Unten -> funktioniert
Rechts -> funktioniert

Beispiel 2:
Der Anwender ändert den oberen und einen beliebigen Seitenrand.

Ergebnis:
Oben und Links -> funktioniert nicht, nur der linke Rand wird verschoben
Oben und Unten -> funktioniert
Oben und Rechts -> funktioniert

Ist das ein Fehler von Java?
Wie kann ich diesen Fehler umgehen bzw. abfangen?

Ich habe zum schnellen Ausprobieren ein kleines Testprogramm geschrieben.
(Die Druckausgabe einfach in einen PDF-Maker umleiten und anschauen).

Code:
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.SystemColor;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Chromaticity;
import javax.print.attribute.standard.MediaPrintableArea;
import javax.print.attribute.standard.MediaSizeName;
import javax.print.attribute.standard.OrientationRequested;
import javax.print.attribute.standard.PrintQuality;


public class MainProg implements Printable
{
	PrinterJob Druckjob;
	PrintRequestAttributeSet aset;
	
	public static void main(String[] args)
	{		
		MainProg x = new MainProg();
		x.Drucken();
	}

	public void Drucken()
	{						
		Druckjob = PrinterJob.getPrinterJob();
        aset = new HashPrintRequestAttributeSet();
        
        Druckjob.setPrintable(this);
     
	aset.add(MediaSizeName.ISO_A4);
	aset.add(new MediaPrintableArea(20, 20, 170, 257, MediaPrintableArea.MM));
	aset.add(OrientationRequested.PORTRAIT);
	aset.add(PrintQuality.NORMAL);
	aset.add(Chromaticity.MONOCHROME);
					
        boolean ok = Druckjob.printDialog(aset);
        if(ok)
        {
            try
            {	            	
            	Druckjob.print(aset);	            	
            }
            catch(Exception ex)
            {
            	ex.printStackTrace();
            }
        }
	}

	public int print(Graphics g, PageFormat pageFormat, int pageIndex)
			throws PrinterException
	{
		System.out.println(pageIndex);
		System.out.println("Im print.");
		if(pageIndex > 0)
		{
			System.out.println("Mehr als 1 Seiten");
			return this.NO_SUCH_PAGE;
		}
		System.out.println("Drucke");
		Font font = new Font("Times", Font.PLAIN, 20);
				
		Graphics2D g2d = (Graphics2D)g;
                g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
		g2d.setFont(font);
		g2d.setColor(SystemColor.yellow);
		g2d.fillRect(0, 0, (int)pageFormat.getWidth(), (int)pageFormat.getHeight());
		g2d.setPaintMode();
		g2d.setColor(SystemColor.black);
		g2d.drawString("TEST", 50, 50);
		
		return this.PAGE_EXISTS;
	}
}

MfG
hansmueller
 
Zurück