2016-05-02 11 views
2

Ich möchte ein PDFFile Objekt aus der Bibliothek Pdf-Renderer mit javafx Drucken drucken. Ist es möglich, nicht Node Objekte zu drucken? Derzeit verwende ich AWT-Drucken (check this example), aber es geht nicht gut mit javafx, weil mein javafx-Fenster einfriert, wenn der AWT-Druckdialog aufkommt.JavaFX Drucken nicht Knoten Objekte

Printer printer = Printer.getDefaultPrinter(); 
PageLayout pageLayout = printer.createPageLayout(Paper.A4, PageOrientation.PORTRAIT, Printer.MarginType.DEFAULT); 

PrinterJob job = PrinterJob.createPrinterJob(); 
if (job != null) { 
    boolean success = job.printPage(node); // use something otherthan a node(PDFFile in my case) 
    if (success) { 
     job.endJob(); 
    } 
} 

Antwort

3

Sie können eine java.awt.Image von jeder Seite erhalten, ziehen Sie die Seite zu einem java.awt.image.BufferedImage konvertieren die BufferedImage zu einem javafx.scene.image.Image und schließlich eine ImageView enthält das Bild drucken:

Etwas wie:

PrinterJob job = PrinterJob.createPrinterJob(); 
PDFFile pdfFile = ... ; 
if (job != null) { 
    boolean success = true ; 
    for (int pageNumber = 1; pageNumber <= pdfFile.getNumPages() ; pageNumber++) { 
     PDFPage page = pdfFile.getPage(pageNumber, true); 
     Rectangle2D bounds = page.getBBox(); 
     int width = (int) bounds.getWidth(); 
     int height = (int) bounds.getHeight(); 
     java.awt.Image img = page.getImage(width, height, bounds, null, true, true); 
     BufferedImage bImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 
     bImg.createGraphics().drawImage(img, 0, 0, null); 
     javafx.scene.image.Image fxImg = SwingFXUtils.toFXImage(bImg, null); 
     ImageView imageView = new ImageView(fxImg); 
     success = success & job.printPage(imageView); 
    } 

    if (success) { 
     job.endJob(); 
    } 
} 

Beachten Sie, dass dieser Code vom FX-Anwendungs-Thread ausgeführt werden kann, um die Benutzeroberfläche reaktionsbereit zu halten.

+0

danke für die Antwort @james_d. Verliere ich die Klarheit, wenn ich die Ausgabe heranzoome? (dh Raster oder Vektor) – bazi

Verwandte Themen