我正在使用 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();
}
}
}
原因是因为您只是从 PDF 文件中获取页面并将其直接复制到
copy
对象,而不检查页面是否为空白或其他内容。要检查这一点,请查看我在 SO 的另一个问题上找到的示例:在此处输入链接描述它在与 iText 不同的库上运行。您可以从末尾迭代到开始,并计算一行中有多少个结束页可能是空白。
另一件事是你有一些重复的代码(双倍的 for 循环),你应该考虑将
document
、reader1
、reader2
包含在 try-with-resources 中。
祝你好运!