【问题标题】:Itext7 null exception error when removing pages from the PDF从 PDF 中删除页面时出现 Itext7 空异常错误
【发布时间】:2021-06-17 16:11:18
【问题描述】:

我正在尝试将 PDF 中的页面范围保持为总共 12 页并删除其余页面

PdfReader pdfReader = new PdfReader("src/main/sample/test_doc2.pdf");
pdfReader.setUnethicalReading(true);
PdfDocument inputPDF = new PdfDocument(pdfReader);
PdfDocument outputPDF = new PdfDocument(new PdfWriter("src/main/sample/output.pdf").setSmartMode(true));
inputPDF.copyPagesTo(1, inputPDF.getNumberOfPages(), outputPDF, new PdfPageFormCopier());

Integer pages[] = {
    1,
    2,
    3,
    4,
    5,
    6,
    7,
    8,
    9,
    // 10,
    // 11,
    12
};
ListIterator<Integer> pagesList = Arrays.asList(pages).listIterator(pages.length);


while (pagesList.hasPrevious()) {
    outputPDF.removePage(pagesList.previous());
}

outputPDF.close();

这适用于大多数范围,但对于某些范围(即,如果我只想保留第 10 页和第 11 页)我在第 303 行的 PDFPagesTree.class::generate_tree() itext 方法中遇到空指针异常:

assert current != null;
current.addPages(pages);

我尝试了不同的文档,并且始终获得范围 10-11 的空指针异常。

【问题讨论】:

标签: pdf itext itext7


【解决方案1】:

这确实是 iText 中的一个错误。作为一种解决方法,您可以尝试计算最终要留下哪些页面,而不是先复制它们,然后再删除其中的一些。

或者,您可以在从源文档复制页面后使用中间 PDF 作为结果,然后您可以创建另一个 PdfDocument 以从中间 PDF 中删除一些页面并生成最终结果。

以下是这种方法的示例:

PdfReader pdfReader = new PdfReader(inputPdf);
pdfReader.setUnethicalReading(true);
PdfDocument inputPDF = new PdfDocument(pdfReader);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfDocument tempPDF = new PdfDocument(new PdfWriter(baos));
inputPDF.copyPagesTo(1, inputPDF.getNumberOfPages(), tempPDF, new PdfPageFormCopier());
tempPDF.close();

PdfDocument outPDF = new PdfDocument(new PdfReader(new ByteArrayInputStream(baos.toByteArray())),
        new PdfWriter(outputPdf));

Integer pages[] = {
        1,
        2,
        3,
        4,
        5,
        6,
        7,
        8,
        9,
        // 10,
        // 11,
        12
};
ListIterator<Integer> pagesList = Arrays.asList(pages).listIterator(pages.length);

while (pagesList.hasPrevious()) {
    outPDF.removePage(pagesList.previous());
}

outPDF.close();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-14
    • 1970-01-01
    相关资源
    最近更新 更多