首页 文章

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

提问于
浏览
2

我已经成功使用了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 回答

  • 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);
    

相关问题