将JavaFX ScrollPane内容保存为PDF文件

时间:2015-04-29 11:03:43

标签: itext javafx-8

我使用以下代码将我的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();
}

} });

在滚动窗格中,我有一个很长的VBox,其中包含近40-50个标签。因此,此代码最初将其保存为jpg文件,然后将其添加到pdf文件中。

最初创建temp.jpg时,由于其长度,jpg文件看起来很薄。它应该被缩放以查看实际内容。

当写入pdf文件时,它是空白的,除非它像jpg真正转换为PDF文件时那样冗长。

任何人都可以帮我解决这个问题吗?使用实际大小/比例将ScrollPane的快照转换为PDF?

1 个答案:

答案 0 :(得分: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);