Alex_winf01 Geschrieben 16. April 2008 Geschrieben 16. April 2008 Liebe Forengemeinde, ich habe ein "kleines" Problem mit meiner Druckfunktion, die soweit funzt. ABER: Da mein JTabbedPane sehr groß ist vom Inhalt her, wird jeder Reiter auf 2 Seiten gedruckt. Gibt es eine Möglichkeit (etwa wie in Excel mit Datei -> Seite einrichten -> Skalierung -> Größe X% der Normalgröße verkleinern) die ganze Sache auf eine Seite "zu quetschen"? Fragt bitte nicht warum. Die Kollegen und der Kunde möchten das so. Und da gibt es keine Diskussion!!! Ich bitte um konstruktive Hinweise. So drucke ich bis jetzt aus: class druckenListener implements ActionListener { public void actionPerformed(ActionEvent e) { pj = PrinterJob.getPrinterJob(); 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 = lizenzPane.getSize(); hauptpanel.setSize(size); formular = new Formular_Lizenzbestimmung(lizenzPane); pj.setPrintable(formular, pageFormat); pj.print(); } } catch (PrinterException ex) { ex.printStackTrace(); } } } class Formular_Lizenzbestimmung implements Printable { private Container container; private int index = -1; private Rectangle page = new Rectangle(0, 0, 0, 0); Formular_Lizenzbestimmung(Container container) { this.container = container; } public int print(Graphics g, PageFormat pageFormat, int pageIndex) { Graphics2D g2d = (Graphics2D) g; g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY()); int iWidth = (int) pageFormat.getImageableWidth(); int iHeight = (int) pageFormat.getImageableHeight(); 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; } } Zitieren
Dragon8 Geschrieben 17. April 2008 Geschrieben 17. April 2008 Was genau macht er denn falsch? Bzw. welche teile druckt er auf ne neue Seite? Weil eigentlich sieht der Quelltext so vollkommen in Ordnung aus. Ich habe ihn auch gerade mal getestet und da funktionierte auch alles reibungslos. Zitieren
Alex_winf01 Geschrieben 17. April 2008 Autor Geschrieben 17. April 2008 @ Dragon8 Also das drucken an sich funzt. Nur meine GUI passt nicht auf eine DIN-A4-Seite. Somit wird etwas das letzte Drittel des JTappedPane auf eine neue Seite gedruckt. Ich möchte aber gerne alles auf eine Seite haben. Zitieren
Dragon8 Geschrieben 17. April 2008 Geschrieben 17. April 2008 Ach so, die passt in der Länge nicht....nagut, da hatte ich jetzt gedacht, dass das so sein soll, da in deinem code ja extra integriert ist, dass er das bei zu großer Höhe auf mehrere Blätter teilt. Dann wäre spontan meine erste idee nun, entweder nen extra wert für die Höhenskalieren zu berechnen, dann wird das ausgedruckte aber wahrscheinlich verzerrt, oder du berechnest den Wert für die Höhenskalierung, vergleichst den mit der Wert für die Breitenskalierung und nimmst dann den kleinsten für beide. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.