问题与报告的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)
问题:
答案 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,则会忽略该问题。