使用iText,JAVA从PDF文件中删除页面

时间:2018-08-10 05:49:42

标签: java itext

我的pdf为10页,其中我需要从pdffile中删除2页。 以上要求应使用iTEXT和JAVA。这些页面应从PDF中删除,而不创建任何新文件或pdf。

2 个答案:

答案 0 :(得分:1)

假设您使用的是最新版本,则代码如下所示:

import java.io.IOException;

import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;

public class RemovePage {

    public static final String SRC = "original.pdf";
    public static final String DEST = "changed.pdf";

    public static void main(String[] args) throws IOException {
        PdfReader reader = new PdfReader(SRC);
        PdfWriter writer = new PdfWriter(DEST);
        PdfDocument document = new PdfDocument(reader, writer);
        document.removePage(2);
        document.close();
    }
}

这是一个5个步骤的过程:

  • 您使用输入文件的路径作为参数创建一个PdfReader对象。
  • 您创建一个PdfWriter对象,并将输出文件的路径作为参数。
  • 您用读者和作家创建了一个PdfDocument对象。
  • 您使用removePage()方法删除页面;在该示例中,我们删除了第2页。(如果需要删除更多页面,请明智地重复此步骤)。
  • 您关闭文档实例。

重要说明1:如果此代码示例不起作用,则说明您使用的iText版本错误。您应该使用iText 7.1.2:https://developers.itextpdf.com/itext7/download-and-install-information/Java

重要提示2:在您的问题中,您还提到“页面应从PDF删除,而不创建任何新文件或pdf。” 我故意忽略了这一要求,因为我认为这是设计缺陷。我要避免有人看到我的示例并在不阅读我的警告的情况下开始使用它。

如果您坚持实施此设计缺陷,请阅读常见问题解答条目How to update a PDF without creating a new PDF? 基本上,您有两种选择:安全的一种(可以满足需求)和危险的(可以真正实现需求)。

这是安全的解决方法:

  • 使用PdfReader读取原始文件;
  • 使用PdfWriter在磁盘或内存中创建一个临时文件,
  • 关闭文档后,用临时文件替换原始文件。

您仍然创建一个新文件,但没有人注意。这是大多数文档处理软件(例如Word)的工作方式。

这是危险的方法:

  • 将原始文件读入byte[]
  • 使用此PdfReader创建byte[],并且
  • 使用原始文件的路径作为PdfWriter的参数。

轻柔的警告:危险的方法可能会导致您被解雇或使您的考试不及格,因为如果在此过程中引发异常,它将导致原始文件损坏,无法修复。

答案 1 :(得分:-1)

您也可以使用PdfStamper,

PdfReader pdfReader = new PdfReader("source pdf file path");
reader.selectPages("2-4,10-15");
PdfStamper pdfStamper = new PdfStamper(pdfReader,
                new FileOutputStream("destination pdf file path"));
pdfStamper.close();