3

我已经设法使用

WritableImage 快照 = obj.getScene().snapshot(null);

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

PDDocument 文档 = 空;PDPage 页面 = 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 而不是使用基本字符串文本时,我该怎么做?

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

谢谢

4

1 回答 1

2

拍摄场景截图

您的问题中已经有适用于此的代码。

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

截取一个 . . . JavaFx 2.2 中场景的一部分

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

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

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


现在我想将此屏幕截图输出到 pdf 文件中。使用 WritableImage 而不是使用基本字符串文本时,我该怎么做?

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

要实际将 awt 编码图像转换为 pdf 文件,请查阅 pdfbox 工具包的文档。Kasas 对将 BufferedImage 添加到 PDFBox 文档的回答似乎为此操作提供了代码片段。看起来相关的代码(我还没有尝试过)是:

PDPageContentStream content = new PDPageContentStream(doc, page);
PDXObjectImage ximage = new PDJpeg(doc, bufferedImage);
content.drawImage(ximage, x, y);
于 2013-08-02T21:45:31.343 回答