我使用以下代码将我的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?
答案 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);