从PDF中删除页面

13

我目前正在使用iText,想知道是否有一种方法可以从PDF文件中删除页面?

我已经用阅读器打开了它,现在想在保存到新文件之前删除其中的一页;我该怎么做呢?

5个回答

14

更好的删除页面方式是执行以下操作:

reader.selectPages("1-5,10-12");

这意味着我们只选择第1-5页和第10-12页,有效地“删除”了第6-9页。


12

通过以下方式获取现有pdf文件的读取器:

PdfReader pdfReader = new PdfReader("source pdf file path");

现在通过以下方式更新读者:

 pdfReader.selectPages("1-5,15-20");

获取 PDF 印章对象,通过该对象将更改写入文件。
PdfStamper pdfStamper = new PdfStamper(pdfReader,
                new FileOutputStream("destination pdf file path"));

通过以下方式关闭PdfStamper:

pdfStamper.close();

这也会关闭PdfReader。

干杯......


你肯定想让第二个代码块读作'pdfReader.selectPages...',对吧? - Jim Kiley

2

针对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文件


@Zoba,你为什么要将 InitializeOutlinesClose 方法的首字母大写?正如你在上面看到的,这个问题标记了 [tag:java],因此解决方案必须首先被认为是 Java 解决方案。在 iText / Java 中,这些方法的首字母应该是小写... - mkl
@mkl 噢,那是我的错 - 大脑短路了!我完全处于C#模式中! - Uke
谢谢您在C#中发布它!很少有人使用Java编程...而且从Java转换代码到C#真是一件麻烦的事情。 - pianocomposer

1

这里有一个已经准备好用于实际使用的删除函数。经过验证可以与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);
}

1

您可以结合使用PdfStamperPdfCopy

这个答案中,解释了如何复制整个文档。如果您更改示例代码中循环的条件,就可以删除不需要的页面。


不,有一种更简单的方法,我稍后会发布。 - AlanFoster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接