2015-04-29 32 views
0

我使用下面的代碼將我的JavaFx應用程序中的ScrollPane的內容保存爲PDF文件。將JavaFX ScrollPane內容保存爲PDF文件

button.setOnMouseClicked(new EventHandler<MouseEvent>() { 
public void handle(MouseEvent event) { 

File pdfFile = fileChooser.showSaveDialog(primaryStage); 

try { 
    BufferedImage bufImage = SwingFXUtils.fromFXImage(scrollPane.snapshot(new SnapshotParameters(), null), null); 
    FileOutputStream out = new FileOutputStream(new File("../temp.jpg")); 
    javax.imageio.ImageIO.write(bufImage, "jpg", out); 
    out.flush(); 
    out.close(); 

    com.itextpdf.text.Image image =com.itextpdf.text.Image.getInstance("../temp.jpg"); 
    Document doc = new Document(new com.itextpdf.text.Rectangle(image.getScaledWidth(), image.getScaledHeight())); 
    FileOutputStream fos = new FileOutputStream(pdfFile); 
    PdfWriter.getInstance(doc, fos); 
    doc.open(); 
    doc.newPage(); 
    image.setAbsolutePosition(0, 0); 
    doc.add(image); 
    fos.flush(); 
    doc.close(); 
    fos.close(); 


} 
catch(Exception e) 
{ 
    e.printStackTrace(); 
} 

} });

在scrollpane中,我有一個很長的VBox,其中包含幾乎40-50個標籤。因此,此代碼最初將其保存爲jpg文件,然後將其添加到pdf文件中。

最初創建temp.jpg時,由於其長度的緣故,jpg文件看起來非常薄。它應該放大以查看實際內容。

當pdf文件被寫入時,它是空白的,只是它很長,因爲它實際上已經轉換爲PDF文件。

任何人都可以幫我解決這個問題嗎?用它的實際大小/比例將ScrollPane的快照轉換爲PDF?

回答

0

我第一次縮放圖像,然後用縮放的PageSize創建文檔。這解決了問題

com.itextpdf.text.Image image =com.itextpdf.text.Image.getInstance("../temp.jpg"); 
image.scalePercent(1); 
Document doc = new Document(new com.itextpdf.text.Rectangle(image.getScaledWidth(), image.getScaledHeight())); 
doc.open(); 
doc.add(image);