Bild ausdrucken - PageFormat setzen geht nicht

izoards

Bekanntes Mitglied
Hallo zusammen,

Ich möchte ein Bild meiner JavaFX Scene ausdrucken.
Irgendwie kriege ich es nicht hin, dass ich das Layout per Programm auf Querformat ändern kann. Über das Drucker Dialog Fenster, also manuell auf Querformat stellen funktionierts.

Hier mein Versuch:

Java:
//Im Window Controller wird das Bild gemacht:

WritableImage snapshot = scene.snapshot(null);
BufferedImage bufferedImage = SwingFXUtils.fromFXImage(snapshot, null);
new Thread(new PrintActionListener(bufferedImage)).start();

//die PrintActionListener Klasse sieht wie folgt aus:

public class PrintActionListener implements Runnable {



    private BufferedImage       image;

    public PrintActionListener(BufferedImage image) {
        this.image = image;
    }

    @Override
    public void run() {
        PrinterJob printJob = PrinterJob.getPrinterJob();
        printJob.setPrintable(new ImagePrintable(printJob, image));
     //   if (printJob.printDialog()) {
            try {
                printJob.print();
            } catch (PrinterException prt) {
                prt.printStackTrace();
            }
    }




    public class ImagePrintable implements Printable {

        private BufferedImage   image;

        public ImagePrintable(PrinterJob printJob, BufferedImage image) {
           PageFormat pageFormat = printJob.defaultPage();
           pageFormat.setOrientation(PageFormat.LANDSCAPE);
           this.image = image;
        }

        @Override
        public int print(Graphics g, PageFormat pageFormat, int pageIndex)
                throws PrinterException {
            System.out.println("PageFormat: " + pageFormat.getOrientation());
            if (pageIndex > 0) {
                return (NO_SUCH_PAGE);
            } else {
                double pageHeight = pageFormat.getImageableHeight(), pageWidth = pageFormat.getImageableWidth();
                int textSize = (int) (pageHeight - image.getHeight() * pageWidth / image.getWidth());
                Graphics2D g2d = (Graphics2D) g;
                g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
                if (pageHeight < image.getHeight() || pageWidth < image.getWidth()) {
                    g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
                            RenderingHints.VALUE_INTERPOLATION_BILINEAR);
                    g2d.drawImage(image, 0, 100, (int) pageWidth, (int) pageHeight - textSize, null);
                } else {
                    g2d.drawImage(image, 0, 100, null);
                }
                g2d.dispose();
                return (PAGE_EXISTS);
            }
        }
    }


Die Ausgabe von pageFormat.getOrientation() in der print() Methode gibt immer 1 = Portrait.
Obwohl ich es unter ImagePrintable auf Landscape setze.

Wie übergebe ich das pageFormat an die print() Methode?

Vielen Dank für eure Hilfe...
 
Ich habe das pageFormat auch in der print methode mal auf landscape gesetzt, funktioniert leider trotzdem nicht... :-(
 
Ok, habs rausgefunden 🙈
Dank diesem Eintrag:

https://www.java-forum.org/thema/im-querformat-drucken-mit-printjob.52099/


Trotzdem noch eine Frage, bezüglich Qualitätsverlust beim rendern von Grafiken.

Mein Bild (png) ist 1315 x 450 pixel gross.
Damit ich es auf ein A4 bringe, muss ich es um 90 grad drehen.

Was ist besser, das bild zu drehen? Oder wie ich es gemacht habe, mit:

g2d.drawImage(image, 0, 100, (int) pageWidth, (int) pageHeight - textSize, null);

und die Grösse anzugeben?
Oder kommt das auf dasselbe raus?

Oder habt Ihr mir ein Tipp, wie ich das Bild auf die A4 Seite anpasse ohne Qualitätsverlust?

Zur Zeit verliere ich ziemlich Qualität.. Wobei ich es als PDF "ausdrucke", da ich gerade keinen Drucker habe.
Ist der Qualitätsverlust allenfalls durch den Ausdruck ins PDF zu begründen?
 
Zur Zeit verliere ich ziemlich Qualität.. Wobei ich es als PDF "ausdrucke", da ich gerade keinen Drucker habe.
Ist der Qualitätsverlust allenfalls durch den Ausdruck ins PDF zu begründen?

Also beim drucken, ist die Qualität leider gleich schlecht. Es ist vorallem die Schrift...
 
Gibt es da irgendeinen Trick? Wenn ich das gespeicherte png - bild über windows drucke und beim Drucker auf "Seite anpassen" stelle, sieht das ganze tip top aus.

Habe auch schon imgscalr mit diversen Einstellungen versucht. Auch schon mit den RenderingHints gespielt, aber die Qualität bleibt schlecht...
 

Zurück
Oben