当前位置: 首页 > 面试题库 >

使用Java使用iText将多个图像添加到单个pdf文件中

毋承基
2023-03-14
问题内容

我有以下代码,但此代码仅将最后一张图像添加到pdf中。

    try {
        filePath = (filePath != null && filePath.endsWith(".pdf")) ? filePath
                : filePath + ".pdf";
        Document document = new Document();
        PdfWriter writer = PdfWriter.getInstance(document,
                new FileOutputStream(filePath));
        document.open();    
        // document.add(new Paragraph("Image Example"));
        for (String imageIpath : imagePathsList) {

            // Add Image
            Image image1 = Image.getInstance(imageIpath);
            // Fixed Positioning
            image1.setAbsolutePosition(10f, 10f);
            // Scale to new height and new width of image
            image1.scaleAbsolute(600, 800);
            // image1.scalePercent(0.5f);
            // Add to document
            document.add(image1);
            //document.bottom();


        }
        writer.close();

    } catch (Exception e) {
        LOGGER.error(e.getMessage());
    }

您能否给我一些有关如何更新代码以便将所有图像添加到导出的pdf中的提示?imagePathsList包含要添加到单个pdf中的图像的所有路径。

最好的问候,奥雷利亚


问题答案:

看一下MultipleImages示例,您将发现代码中存在两个错误:

  1. 您创建一个页面的大小为595 x 842用户单位,并将每个图像添加到该页面,而不管图像的尺寸如何。
  2. 您声称只添加了一张图片,但这不是事实。您要在 同一页面 上将 所有 图像叠加 在一起 。最后一个图像覆盖了所有先前的图像。 __

看一下我的代码:

public void createPdf(String dest) throws IOException, DocumentException {
    Image img = Image.getInstance(IMAGES[0]);
    Document document = new Document(img);
    PdfWriter.getInstance(document, new FileOutputStream(dest));
    document.open();
    for (String image : IMAGES) {
        img = Image.getInstance(image);
        document.setPageSize(img);
        document.newPage();
        img.setAbsolutePosition(0, 0);
        document.add(img);
    }
    document.close();
}

Document使用第一个图像的大小创建一个实例。然后,我遍历图像数组,然后 触发newPage() [*] 之前
将下一页的页面大小设置为每个图像的大小。然后,我将图像添加到坐标0、0处,因为现在图像的大小将与每个页面的大小匹配。

[*]
newPage()方法仅在向当前页面添加了内容时才有效。第一次执行循环时,尚未添加任何内容,因此没有任何反应。这就是为什么在创建Document实例时需要将页面大小设置为第一张图像的大小的原因。



 类似资料:
  • 我正在使用iText生成Pdf。但当我试图在pdf中添加图像时, 我mage.get实例(新的URL(timetableResource.getImageUrl()));document.add(学校标志); 但我得到的错误是 HTTP状态500-服务器为URL返回了HTTP响应代码400:http://139.59.72.150:8080/sms/attachments/23/42/school

  • 问题内容: 我正在尝试使用itext java api将anchor(命名为destinations)添加到pdf。但是它不起作用。当我单击文本时,什么也没有发生。这就是我在做什么。 我究竟做错了什么?。任何帮助 问题答案: 试试这个。它为我工作。并会做魔术。

  • 嗨,我有一些问题,使用itextPDF将图像添加到PDF... 过去几年,我从原稿纸上扫描了10000多张图像,大小/像素各不相同 当我使用将图像添加到pdf时 img.scale绝对(823,640)或img.scaleToFit(823,640) 不改变每个图像的结果,例如: 第一个654是最适合pdf页面的,原始tiff图像(2048 x 2929) 这是原始tiff图像的第二个9436(1

  • 上周,我们从itext 5.3.6升级到5.5.6,在测试过程中,我们发现在启用完全压缩的现有pdf上添加图像存在问题。请参见下一个代码示例:

  • 我想使用IText7将图像添加到现有PDF文件中的特定位置。 在使用iTextSharp的另一个项目中,代码非常简单: 但我找不到使用IText7执行此操作的正确方法。 我有PdfReader和PdfWriter,但在IText7中我可以在哪里找到PdfStamper? 或者可能有其他方法可以将图像添加到IText7中现有的PDF文件中? (我不能在当前项目中使用iTextSharp)

  • 问题内容: 在我的pdf文件中,我需要有多个页眉和页脚。在页眉中,我希望标题标题位于左侧,而某些文本位于中心。 同样,在页脚中,我需要在左侧打印公司名称,在中心打印页码,并在右侧打印有关表格内容的一些信息。 我看过很多文章,但是我没有正确的想法来创建它,有人请帮助我提供一些示例代码片段。 问题答案: 页眉和页脚应使用“页面事件”添加。如果您需要一些示例,只需在官方网站上查找关键字header /