将 JavaFX ScrollPane 内容保存到 PDF 文件

Save JavaFX ScrollPane content to PDF file

我正在使用以下代码将我的 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文件一样。

谁能帮我解决这个问题?使用实际 size/scale ?

将 ScrollPane 的快照转换为 PDF

我首先缩放了图像,然后使用缩放后的 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);