2013-08-02 78 views
2

我已经设法使使用以场景的屏幕截图或2.2

WritableImage快照= obj.getScene()的快照(空)一个WritableImage的场景的JavaFX中的一部分。

现在我想输出这个截图的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时宁可使用基本字符串文本做到这一点?

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

感谢

+0

FYI:当你有多个问题,通常最好问他们在不同的问题。 – jewelsea

回答

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工具包。可能该工具包使用基于wtwt的图像而不是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); 
+0

感谢您的回复!它确实有帮助。我更接近将图像放在PDF上,但是当我使用代码时,pdf不会出现,但是当我添加由您提供的同一个线程显示的InputStream和OutputStream时,将创建该文档,但是我从Adobe程序获得一条错误消息,指出Acrobat无法正确显示页面。一旦我回到使用BufferedImage类,文档不会被创建,我不知道为什么。代码对我来说很有意义。 – Morelka