重建失败:PDF与iText for Java合并期间找不到预告片错误

时间:2017-11-08 17:07:15

标签: java itext pdf-generation

我正在尝试将我自己创建的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);

...我收到了更多信息,但我不明白这意味着什么:

  

com.lowagie.text.exceptions.InvalidPdfException:重建失败:未找到预告片。原始消息:在文件指针127处找不到外部参照子部分   at com.lowagie.text.pdf.PdfReader.readPdf(Unknown Source)

iText无法阅读的PDF文档的

This is an example

我尝试使用上面的2行读取PDF,但这次使用iText 5.5.13,我收到同样的错误。

0 个答案:

没有答案