如何解决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();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。