2013-08-02 124 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