2016-05-02 16 views
2

javafx印刷を使用してPdf-RendererライブラリからPDFFileオブジェクトを印刷したいとします。非Nodeオブジェクトを印刷することは可能ですか?現在、私はAWTの印刷(check this example)を使用していますが、AWTの印刷ダイアログが表示されたときにjavafxのウィンドウがフリーズしてしまうので、javafxとうまく行きません。JavaFX非ノードオブジェクトの印刷

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(); 
    } 
} 

答えて

3

あなたはjavafx.scene.image.ImageBufferedImageを変換し、そして最終的に画像を含むImageViewを印刷java.awt.image.BufferedImageにページを描画し、各ページからjava.awt.Imageを取得することができます。

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(); 
    } 
} 
:よう

何か

このコードは、FXアプリケーションスレッドから実行して、UIを応答性に保つことができます。

+0

回答@james_dに感謝します。出力を拡大すると明瞭になりませんか? (すなわち、ラスタまたはベクトル) – bazi