在JavaFx 2.2中截取场景或场景的一部分

时间:2013-08-02 19:11:45

标签: javafx-2 converter pdfbox

我已设法使用

创建WritableImage

WritableImage snapshot = obj.getScene()。snapshot(null);

现在我想在pdf文件中输出这个截图。我已经设法使用Apache pdfbox库使用以下代码将文本输出到pdf:

PDDocument doc = null;         PDPage page = null;

   try{
       doc = new PDDocument();
       page = new PDPage();

       doc.addPage(page);
       PDFont font = PDType1Font.HELVETICA_BOLD;

       PDPageContentStream content = new PDPageContentStream(doc, page);
       content.beginText();
       content.setFont( font, 12 );
       content.moveTextPositionByAmount( 100, 700 );
       content.drawString("Hello World");

       content.endText();
       content.close();
      doc.save("PDFWithText.pdf");
      doc.close();
    } catch (Exception e){
    System.out.println(e);
    }

使用WritableImage而不是使用基本的String文本时,我该怎么做?

另外,如何拍摄场景中某些节点的屏幕截图?

由于

1 个答案:

答案 0 :(得分:1)

  

拍摄场景的截图

您的问题中已经有了相应的工作代码。

WritableImage snapshot = stage.getScene().snapshot(null);

  

截取一张。 。 。 JavaFx 2.2中场景的一部分

拍摄节点的快照类似于拍摄场景的快照,您只需使用节点上的snapshot methods而不是场景。首先将节点置于场景中,然后对节点进行快照。

WritableImage snapshot = node.snapshot(null, null);

可以传递给node.snapshot调用的第一个参数是SnapshotParameters的一些配置(您可能不需要,但您可以调查它们以查看它们是否是必需的或有用的你的情况)。


  

现在我想在pdf文件中输出这个截图。如何使用WritableImage而不是使用基本的String文本?

我没有使用您在问题中引用的pdfbox工具包。可能该工具包使用基于awt的图像而不是JavaFX图像,因此您需要使用SwingFXUtils.fromFXImage将JavaFX快照图像转换为awt缓冲图像。

要实际将awt编码图像转换为pdf文件,请参阅pdfbox工具包的文档。 Kasas对Add BufferedImage to PDFBox document的回答似乎为此操作提供了代码段。看起来相关的代码(我没试过这个)是:

PDPageContentStream content = new PDPageContentStream(doc, page);
PDXObjectImage ximage = new PDJpeg(doc, bufferedImage);
content.drawImage(ximage, x, y);