首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Itext7中删除页面时出现PDF空异常错误

从Itext7中删除页面时出现PDF空异常错误
EN

Stack Overflow用户
提问于 2021-06-18 00:11:18
回答 1查看 65关注 0票数 0

我尝试在PDF中保留总共12页的页面范围,并删除其余的页面

代码语言:javascript
复制
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方法中得到一个空指针异常:

代码语言:javascript
复制
assert current != null;
current.addPages(pages);

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-23 06:04:42

这确实是iText中的一个错误。作为一种解决办法,您可以尝试计算要在结束时离开的页面,而不是先复制它们,然后再删除其中的一些页面。

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

以下是这种方法的示例:

代码语言:javascript
复制
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();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68022971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档