我目前正在使用iText,想知道是否有一种方法可以从PDF文件中删除页面?
我已经用阅读器打开了它,现在想在保存到新文件之前删除其中的一页;我该怎么做呢?
更好的删除页面方式是执行以下操作:
reader.selectPages("1-5,10-12");
这意味着我们只选择第1-5页和第10-12页,有效地“删除”了第6-9页。
通过以下方式获取现有pdf文件的读取器:
PdfReader pdfReader = new PdfReader("source pdf file path");
现在通过以下方式更新读者:
pdfReader.selectPages("1-5,15-20");
PdfStamper pdfStamper = new PdfStamper(pdfReader,
new FileOutputStream("destination pdf file path"));
通过以下方式关闭PdfStamper:
pdfStamper.close();
这也会关闭PdfReader。
干杯......
针对iText 7,我找到了以下范例:
PdfReader pdfReader = new PdfReader(PATH + name + ".pdf");
PdfDocument srcDoc = new PdfDocument(pdfReader);
PdfDocument resultDoc = new PdfDocument(new PdfWriter(PATH + name + "_cut.pdf"));
resultDoc.initializeOutlines();
srcDoc.copyPagesTo(1, 2, resultDoc);
resultDoc.close();
srcDoc.close();
另请参见此处:克隆和重新排序页面 以及此处:克隆和拆分PDF文件
InitializeOutlines
和 Close
方法的首字母大写?正如你在上面看到的,这个问题标记了 [tag:java],因此解决方案必须首先被认为是 Java 解决方案。在 iText / Java 中,这些方法的首字母应该是小写... - mkl这里有一个已经准备好用于实际使用的删除函数。经过验证可以与itext 2.1.7
一起正常工作。它也不使用"强类型"。
/**
* Removes given pages from a document.
* @param reader document
* @param pagesToRemove pages to remove; 1-based
*/
public static void removePages(PdfReader reader, int... pagesToRemove) {
int pagesTotal = reader.getNumberOfPages();
List<Integer> allPages = new ArrayList<>(pagesTotal);
for (int i = 1; i <= pagesTotal; i++) {
allPages.add(i);
}
for (int page : pagesToRemove) {
allPages.remove(new Integer(page));
}
reader.selectPages(allPages);
}
您可以结合使用PdfStamper
和PdfCopy
。
在这个答案中,解释了如何复制整个文档。如果您更改示例代码中循环的条件,就可以删除不需要的页面。