重建失败:在PDF与iText for Java合并期间未找到尾部错误

重建失败:在PDF与iText for Java合并期间未找到尾部错误,java,itext,pdf-generation,Java,Itext,Pdf Generation,我正在尝试将一个不是我自己创建的PDF文档(也不是使用iText库创建的)附加到另一个我使用iText库创建的PDF文档(版本2.1.7-我知道这是一个旧版本,但我现在必须处理它) 尝试附加第三方文档(不是我自己创建的)的最后一条语句失败: java.io.IOException:重建失败:未找到拖车。;原始消息:未找到预告片。 请访问com.lowagie.text.pdf.PdfReader.readPdf(未知来源) 我可以在几个不同的PDF查看器中打开导致问题的文档,没有任何问题,因此它

我正在尝试将一个不是我自己创建的PDF文档(也不是使用iText库创建的)附加到另一个我使用iText库创建的PDF文档(版本2.1.7-我知道这是一个旧版本,但我现在必须处理它)

尝试附加第三方文档(不是我自己创建的)的最后一条语句失败:

java.io.IOException:重建失败:未找到拖车。;原始消息:未找到预告片。
请访问com.lowagie.text.pdf.PdfReader.readPdf(未知来源)

我可以在几个不同的PDF查看器中打开导致问题的文档,没有任何问题,因此它不会损坏。我还尝试打印最后1024个字节,内容的最后3行是:

开始外部参照
116
%%EOF

我假设
trail not found
错误指的是EOF标记,但它就在最后一行,那么问题出在哪里?我已经在几个项目中使用这个库很多年了,并且我已经成功地以这种方式合并了文档(包括用iText创建的文档和我没有创建的第三方文档的混合)


我尝试使用以下工具运行一个更简单的测试:

byte[] docBytes = IOUtils.toByteArray(new FileReader("/tmp/thirdPartyDoc.pdf"));
PdfReader reader = new PdfReader(docBytes);
…我得到了一条信息更丰富的错误消息,但我不明白它的意思:

com.lowagie.text.exceptions.InvalidPdfException:重建失败:未找到拖车。;原始消息:在文件指针127处未找到外部参照子节
请访问com.lowagie.text.pdf.PdfReader.readPdf(未知来源)

iText无法读取的PDF文档的



我试着用上面的两行读PDF,但是这次用iText 5.5.13,我得到了同样的错误

你能分享这些文件吗?此外,请尝试在iText的最新版本中重现该问题。不幸的是,“这是我现在必须处理的”对于调试您的问题来说不是一个有效的论点,我希望您能够理解。我添加了一个导致错误的PDF示例。另外,我的问题是关于iText2.x.x的(或者在跳转到v5之前的任何最新版本,我相信是2.1.7)。如果我的问题的答案是,此版本的iText无法处理某些PDF格式,那么这对我很有帮助。您还可以添加要与之合并的文档吗?为了能够完全重现您的问题?我尝试加载您的示例PDF,我成功了,没有任何进一步的麻烦。因此,文件
/tmp/thirdPartyDoc.pdf
与您提供的文件不同,或者
IOUtils.toByteArray(newFileReader(“/tmp/thirdPartyDoc.pdf”)
不包含该文件的内容。iText的旧版本。。。根据1.4参考,可能是一个只完全支持PDF的版本。PDF 1.5引入了另一种对PDF对象交叉引用进行编码的方法,您的示例文件使用了这种方法。您可以共享这些文档吗?此外,请尝试在iText的最新版本中重现该问题。不幸的是,“这是我现在必须处理的”对于调试您的问题来说不是一个有效的论点,我希望您能够理解。我添加了一个导致错误的PDF示例。另外,我的问题是关于iText2.x.x的(或者在跳转到v5之前的任何最新版本,我相信是2.1.7)。如果我的问题的答案是,此版本的iText无法处理某些PDF格式,那么这对我很有帮助。您还可以添加要与之合并的文档吗?为了能够完全重现您的问题?我尝试加载您的示例PDF,我成功了,没有任何进一步的麻烦。因此,文件
/tmp/thirdPartyDoc.pdf
与您提供的文件不同,或者
IOUtils.toByteArray(newFileReader(“/tmp/thirdPartyDoc.pdf”)
不包含该文件的内容。iText的旧版本。。。根据1.4参考,可能是一个只完全支持PDF的版本。PDF 1.5引入了另一种对PDF对象交叉引用进行编码的方法,您的示例文件使用了这种方法。
byte[] docBytes = IOUtils.toByteArray(new FileReader("/tmp/thirdPartyDoc.pdf"));
PdfReader reader = new PdfReader(docBytes);