iText PDF失败并显示消息"字典键endstream不是名称"

时间:2017-10-10 09:48:13

标签: pdf itext pdf-generation

问题与报告的here相同。

我使用了this image并使用GraphicsMagick v1.3.26(建于2017-07-04)转换为this PDF

gm convert itext_banner_InvalidPdfException.jpg itext_banner_InvalidPdfException.pdf

当我尝试用iText v5.5.12阅读时,我得到以下异常:

java -cp itextpdf-5.5.12.jar com.itextpdf.text.pdf.parser.PdfContentReaderTool itext_banner_InvalidPdfException.pdf
com.itextpdf.text.exceptions.InvalidPdfException: Rebuild failed: Dictionary key endstream is not a name. at file pointer 1197; Original message: Dictionary key endstream is not a name. at file pointer 1197
    at com.itextpdf.text.pdf.PdfReader.readPdf(PdfReader.java:764)
    at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:197)
    at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:235)
    at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:223)
    at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:213)
    at com.itextpdf.text.pdf.parser.PdfContentReaderTool.listContentStream(PdfContentReaderTool.java:200)
    at com.itextpdf.text.pdf.parser.PdfContentReaderTool.main(PdfContentReaderTool.java:249)

问题:

  • 给定PDF有什么问题?似乎GhostScript中存在一个问题,由GraphicsMagick间接使用。
  • 当我使用iText RUPS v5.8.8打开它时,它不会向控制台标签打印任何警告。从iText RUPS的角度来看它是否有效?

1 个答案:

答案 0 :(得分:1)

您的PDF包含此损坏的对象:

11 0 obj
<<

endstream
endobj 

开场<<已被endstream关闭。这不匹配。

如果该对象仅仅是一个字典,它应该是这样的:

11 0 obj
<<
    [a reasonable number of dictionary entries]
>>
endobj 

如果该对象是一个流,它应该是这样的:

11 0 obj
<<
    [a reasonable number of dictionary entries]
>>
stream
    [stream data]
endstream
endobj 

顺便说一句,相关对象未引用PDF中的任何其他对象。因此,如果您在部分模式下以PdfReader打开PDF,则会忽略该问题。