Veröffentlicht 16. April 200817 j 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; } }
17. April 200817 j 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.
17. April 200817 j Autor @ 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.
17. April 200817 j 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.
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.