如何使用 itext7 Java 将多个图像添加到 PDF?

Posted

技术标签:

【中文标题】如何使用 itext7 Java 将多个图像添加到 PDF?【英文标题】:How do you add multiple images to a PDF with itext7 Java? 【发布时间】:2020-10-10 00:53:37 【问题描述】:

第一个谷歌结果将我带到 5 年前发布的 Add multiple images into a single pdf file with iText using java。我不确定他们使用的是哪个版本,因为 Image 对象甚至没有我的 getInstance 方法。不用说,我没有从该链接中获得太多帮助。

无论如何,我正在尝试创建一个循环多个 JPG 图像以创建单个 PDF 文档的 javaFX 应用程序。下面是我的代码,它成功地从 2 个图像创建了一个 PDF,但是我无法在第二页上显示第二个图像。

在我上面发布的链接中,我看到的简单解决方案是先执行 document.newPage(),然后执行 document.add(img),但我的文档对象没有那个方法?我不知道该怎么办。

            PdfWriter writer = new PdfWriter("D:/sample1.pdf"); 

            // Creating a PdfDocument       
            PdfDocument pdfDoc = new PdfDocument(writer);              

            // Adding a new page 
            // I can add multiple pages here, but when I add multiple images they do not
            // automatically flow over to the next page. 
            pdfDoc.addNewPage();
            pdfDoc.addNewPage();  

            // Creating a Document        
            Document document = new Document(pdfDoc);               

            String imageFile = "C:/Users/***/Downloads/MAT204/1.3-1.4 HW/test.jpg";

            ImageData data = ImageDataFactory.create(imageFile);

            Image img = new Image(data);

            img.setAutoScale(true);

            img.setRotationAngle(-Math.toRadians(90));

            // I can add multiple images, but they overlaps each other and only
            // appears on the first page.
            // Is there a way for me to change the current page to write on?
            document.add(img);
            document.add(img);

            // Closing the document    
            document.close();              
            System.out.println("PDF Created");

无论如何,我只是想弄清楚如何在编写循环以自动化该过程之前手动添加另一个图像。

【问题讨论】:

【参考方案1】:

经过更多研究,我在这里找到了答案。

https://kb.itextpdf.com/home/it7kb/examples/multiple-images

protected void manipulatePdf(String dest) throws Exception 
    Image image = new Image(ImageDataFactory.create(IMAGES[0]));
    PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest));
    Document doc = new Document(pdfDoc, new PageSize(image.getImageWidth(), image.getImageHeight()));

    for (int i = 0; i < IMAGES.length; i++) 
        image = new Image(ImageDataFactory.create(IMAGES[i]));
        pdfDoc.addNewPage(new PageSize(image.getImageWidth(), image.getImageHeight()));
        image.setFixedPosition(i + 1, 0, 0);
        doc.add(image);
    

    doc.close();

【讨论】:

你节省了我的时间。你不接受你自己的答案吗?

以上是关于如何使用 itext7 Java 将多个图像添加到 PDF?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Java 中将多个可拖动图像添加到 JFrame?

如何使用 Python 将文本添加到多个图像

如何使用 JQuery 一次将多个图像添加到 DOM?

如何在表单提交之前将多个图像异步添加到 django 表单

使用 xslt 模板将多个图像添加到 docx 文件

iText7 图像质量优化器不能作为文档工作