Itext 将JavaFX滚动窗格内容保存到PDF文件

Itext 将JavaFX滚动窗格内容保存到PDF文件,itext,javafx-8,Itext,Javafx 8,我使用下面的代码将JavaFx应用程序中滚动窗格的内容保存到PDF文件中 button.setOnMouseClicked(new EventHandler<MouseEvent>() { public void handle(MouseEvent event) { File pdfFile = fileChooser.showSaveDialog(primaryStage); try { BufferedImage bufImage = SwingFXUtils.fro

我使用下面的代码将JavaFx应用程序中滚动窗格的内容保存到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();
}
button.setOnMouseClicked(新建EventHandler()){
公共无效句柄(MouseeEvent事件){
文件pdfFile=fileChooser.showsavedilog(primaryStage);
试一试{
buffereImage bufImage=SwingFXUtils.fromFXImage(scrollPane.snapshot(新快照参数(),null),null);
FileOutputStream out=新的FileOutputStream(新文件(“../temp.jpg”);
write(bufImage,“jpg”,out);
out.flush();
out.close();
com.itextpdf.text.Image Image=com.itextpdf.text.Image.getInstance(“../temp.jpg”);
Document doc=新文档(new com.itextpdf.text.Rectangle(image.getScaledWidth(),image.getScaledHeight());
FileOutputStream fos=新的FileOutputStream(Pdfile);
PdfWriter.getInstance(doc,fos);
doc.open();
doc.newPage();
image.setAbsolutePosition(0,0);
文档添加(图像);
fos.flush();
doc.close();
fos.close();
}
捕获(例外e)
{
e、 printStackTrace();
}
} });

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

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

当编写pdf文件时,它是空白的,只是它很长,就像jpg真正转换为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();
}

有人能帮我修一下吗?要将滚动窗格的快照拍摄为具有实际大小/比例的PDF格式?

我首先缩放了图像,然后创建了具有缩放页面大小的文档。这解决了问题

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);