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:
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 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...