我正在尝试将我自己创建的PDF文档(并非使用iText库创建)附加到我使用iText库创建的另一个PDF文档(版本2.1.7 - 我知道这个一个旧版本,但这是我现在必须使用的。)
Document myDoc = new Document(PageSize.A4, 15, 15, 15, 15);
ByteArrayOutputStream myDocBAOS = new ByteArrayOutputStream();
PdfWriter writer = PdfWriter.getInstance(myDoc, myDocBAOS);
// ...
// add stuff to my PDF
// ...
myDoc.close();
ByteArrayOutputStream finalDoc = new ByteArrayOutputStream();
PdfCopyFields pdfMerger = new PdfCopyFields( finalDoc );
pdfMerger.addDocument( new PdfReader(myDocBAOS.toByteArray()) );
pdfMerger.addDocument( new PdfReader(thirdPartyDocBytes) ); // IOException
试图附加第三方文档(我自己没有创建)的最后一条声明失败了:
java.io.IOException:重建失败:未找到预告片。原始信息:未找到预告片。
at com.lowagie.text.pdf.PdfReader.readPdf(Unknown Source)
我可以在几个不同的PDF查看器中打开导致问题的文档,没有任何问题,因此它没有损坏。我还尝试打印最后1024个字节,内容的最后3行是:
startxref
116个
%% EOF
我假设trailer not found
错误指的是EOF标记,但它就在最后一行,所以问题是什么?我已经在几个项目中使用这个库多年了,我已经成功地以这种方式合并文档(包括用iText创建的文档和我没有创建的第三方文档)。
我尝试使用以下方法运行更简单的测试:
byte[] docBytes = IOUtils.toByteArray(new FileReader("/tmp/thirdPartyDoc.pdf"));
PdfReader reader = new PdfReader(docBytes);
...我收到了更多信息,但我不明白这意味着什么:
iText无法阅读的PDF文档的com.lowagie.text.exceptions.InvalidPdfException:重建失败:未找到预告片。原始消息:在文件指针127处找不到外部参照子部分 at com.lowagie.text.pdf.PdfReader.readPdf(Unknown Source)
我尝试使用上面的2行读取PDF,但这次使用iText 5.5.13,我收到同样的错误。