如何使用 iText 5 连续合并 PDF 而无需添加额外页面

问题描述 投票:0回答:1

我正在使用 Java 中的 iText 5 合并多个 PDF。我的目标是合并 PDF,如果第一个 PDF 的最后一页上还有空间,则第二个 PDF 会在第一个 PDF 的内容结束后立即开始。但是,当我合并 pdf 时,即使第一个 pdf 文件中留有大量空间,第二个 pdf 也会从另一页开始。

这是我的简单代码

import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.PdfCopy;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfImportedPage;
import java.io.FileOutputStream;

public class MergePDFs {
    public static void main(String[] args) {
        try {
            Document document = new Document();
            PdfCopy copy = new PdfCopy(document, new FileOutputStream("Merged.pdf"));
            document.open();

            PdfReader reader1 = new PdfReader("First.pdf");
            PdfReader reader2 = new PdfReader("Second.pdf");

            int n1 = reader1.getNumberOfPages();
            for (int i = 1; i <= n1; i++) {
                PdfImportedPage page = copy.getImportedPage(reader1, i);
                copy.addPage(page);
            }

            int n2 = reader2.getNumberOfPages();
            for (int i = 1; i <= n2; i++) {
                PdfImportedPage page = copy.getImportedPage(reader2, i);
                copy.addPage(page);
            }

            document.close();
            reader1.close();
            reader2.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
java pdf itext pdf-generation itext7
1个回答
0
投票

原因是因为您只是从 PDF 文件中获取页面并将其直接复制到

copy
对象,而不检查页面是否为空白或其他内容。要检查这一点,请查看我在 SO 的另一个问题上找到的示例:在此处输入链接描述它在与 iText 不同的库上运行。您可以从末尾迭代到开始,并计算一行中有多少个结束页可能是空白。

另一件事是你有一些重复的代码(双倍的 for 循环),你应该考虑将

document
reader1
reader2
包含在 try-with-resources 中。

祝你好运!

© www.soinside.com 2019 - 2024. All rights reserved.