iText7读取交叉引用表时出错表将被重建此外部参照子节中的文件位置{0}交叉引用条目

问题描述

我有一个简单的功能,可以使用iText7将ArrayList中的pdf合并在一起

            File pdfMerged = new File("merged.pdf");
            PdfDocument pdf = new PdfDocument(new PdfWriter(pdfMerged));
            PdfMerger merger = new PdfMerger(pdf);


            for (InputStream in : files) {
            //Add pages from the each document
                PdfDocument sourcePdf = new PdfDocument(new PdfReader(in));
                merger.merge(sourcePdf,1,sourcePdf.getNumberOfPages());
                
                sourcePdf.close();
            }

            pdf.close();
}

虽然大多数情况下都可以使用,但不幸的是,一个pdf出现以下错误。


2020-08-28 18:05:59,935  ERROR [kernel.pdf.PdfReader] [http-nio-8080-exec-9] Error occurred while reading cross reference table. Cross reference table will be rebuilt.
com.itextpdf.io.IOException: Error at file pointer 1,051,972.
at com.itextpdf.io.source.PdfTokenizer.throwError(PdfTokenizer.java:639)
at com.itextpdf.kernel.pdf.PdfReader.readXrefSection(PdfReader.java:839)
at com.itextpdf.kernel.pdf.PdfReader.readXref(PdfReader.java:777)
at com.itextpdf.kernel.pdf.PdfReader.readPdf(PdfReader.java:532)
at com.itextpdf.kernel.pdf.PdfDocument.open(PdfDocument.java:1638)
at com.itextpdf.kernel.pdf.PdfDocument.<init>(PdfDocument.java:231)
...
...
...
Caused by: com.itextpdf.io.IOException: file position {0} cross reference entry in this xref subsection.

在合并中使用的会引起问题的pdf在其他程序中可以正常打开。只是itext7在抱怨。

我不能共享有问题的pdf,但是我可以说它正在使用PDF版本1.6。

这将导致结果为空pdf。该错误是什么意思,我该如何解决或解决?

解决方法

我发现合并实际上是在工作并合并文件,但无论如何都会引发异常。我想通知开发人员或用户正在修复? 如果您仔细阅读该异常,则会显示“将重建交叉引用表”。因此,iText正在执行某种自动修复。

此异常触发了另一个try catch块,因此pdf从未被关闭。

奇怪的是,我在iText 7文档中找不到与此有关的任何文档。

无论如何,简单地尝试一下合并功能就可以解决我的问题。

    for (InputStream in : files) {
    //Add pages from the each document
        PdfDocument sourcePdf = new PdfDocument(new PdfReader(in));

        try{
            merger.merge(sourcePdf,1,sourcePdf.getNumberOfPages());
        } catch (Exception e) {
          //log an error and continue
        }
        sourcePdf.close();
    }

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...