Hallo liebe Forengemeinde,
mit folgendem Listener kümmere ich mich um das Drucken:
Die Klasse Formular_Lizenzbestimmung sieht wie folgt aus:
Jetzt habe ich folgendes "Problem":
Der 2. Reiter wird wie folgt abgeschnitten:
Auf der 2. von 3 Seiten wird die letzte Zeile nur halb ausgedruckt. Die 3. von 3 Seiten wird auch nur halb ausgedruckt. Wie kann ich das beheben?
mit folgendem Listener kümmere ich mich um das Drucken:
Java:
class DruckenListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
pj = PrinterJob.getPrinterJob();
try
{
if (pj.printDialog())
{
paper = new Paper();
paper.setSize(594.936, 841.536); // Set to A4 size.
paper.setImageableArea(30, 30, 530, 780);//set margins
pageFormat = new PageFormat();
pageFormat.setPaper(paper);
size = reiter1l.getSize();
size1 = reiter2l.getSize();
size2 = reiter3l.getSize();
size3 = reiter4l.getSize();
//1. Reiter drucken
reiter1l.setSize(size);
formular = new Formular_Lizenzbestimmung(reiter1l);
pj.setPrintable(formular, pageFormat);
pj.print();
//2. Reiter drucken
reiter2l.setSize(size1);
formular = new Formular_Lizenzbestimmung(reiter2l);
pj.setPrintable(formular, pageFormat);
pj.print();
//3. Reiter drucken
reiter3l.setSize(size2);
formular = new Formular_Lizenzbestimmung(reiter3l);
pj.setPrintable(formular, pageFormat);
pj.print();
//4. Reiter drucken
reiter4l.setSize(size3);
formular = new Formular_Lizenzbestimmung(reiter4l);
pj.setPrintable(formular, pageFormat);
pj.print();
}
}
catch (PrinterException ex)
{
ex.printStackTrace();
}
}
}
Die Klasse Formular_Lizenzbestimmung sieht wie folgt aus:
Java:
class Formular_Lizenzbestimmung implements Printable
{
private Container container; /** container nimmt die Elemente der GUI für den Druck auf**/
private int index = -1; /** index bestimmt, welcher Reiter gerade gedruckt wird**/
private Rectangle page = new Rectangle(0, 0, 0, 0); /** page: Welche Seite?**/
/** Konstruktor**/
Formular_Lizenzbestimmung(Container container)
{
this.container = container;
}
/** Die Methode print übernimmt den Druck**/
public int print(Graphics g, PageFormat pageFormat, int pageIndex)
{
Graphics2D g2d = (Graphics2D) g; /** g2d nimmt den Bildschirmprint auf**/
g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
int iWidth = (int) pageFormat.getImageableWidth(); /** iWidth nimmt die Breite der Seite auf**/
int iHeight = (int) pageFormat.getImageableHeight(); /** iHeigt nimmt die Höhe der Seite auf**/
/** scaleFactor???**/
double scaleFactor = (double) iWidth / (double) container.getWidth();
while (index < pageIndex)
{
if (pageIndex > container.getHeight() * scaleFactor / iHeight)
{
return NO_SUCH_PAGE;
}
page.y += page.height;
page.width = (int) (iWidth / scaleFactor);
page.height = (int) (iHeight / scaleFactor);
index++;
}
g2d.scale(scaleFactor, scaleFactor);
g2d.translate(0, -page.y);
g2d.clip(page);
container.print(g2d);
return PAGE_EXISTS;
}
}
Jetzt habe ich folgendes "Problem":
Der 2. Reiter wird wie folgt abgeschnitten:
Auf der 2. von 3 Seiten wird die letzte Zeile nur halb ausgedruckt. Die 3. von 3 Seiten wird auch nur halb ausgedruckt. Wie kann ich das beheben?