Because of the structure of the Iterator interface, it is not possible
to throw an IOException in the iterator methods. A google search about
this finds rants that the design of java checked exceptions has made a
lot of people very angry, and has been widely regarded as a bad move.
Solutions?
1. use exception tunelling
2. use parseNextToken() without the iterator interface
3. create a new Iterator interface that supports exceptions
4. use getTokens() instead. Uh, no. See PDFBOX-695, this will cost more
memory.
I'm for (2), although I would use (3) if I find out it gets too complex.
Tilman
Examples of such exceptions:
317669.pdf
java.lang.RuntimeException: java.io.IOException: object reference 3 0 R
at offset 1173 in content stream
at
org.apache.pdfbox.pdfparser.PDFStreamParser$1.tryNext(PDFStreamParser.java:142)
at
org.apache.pdfbox.pdfparser.PDFStreamParser$1.hasNext(PDFStreamParser.java:150)
at
org.apache.pdfbox.contentstream.PDFStreamEngine.processStreamOperators(PDFStreamEngine.java:475)
at
org.apache.pdfbox.contentstream.PDFStreamEngine.processStream(PDFStreamEngine.java:456)
at
org.apache.pdfbox.contentstream.PDFStreamEngine.processPage(PDFStreamEngine.java:167)
at
org.apache.pdfbox.preflight.content.PreflightContentStream.validatePageContentStream(PreflightContentStream.java:76)
at
org.apache.pdfbox.preflight.process.reflect.SinglePageValidationProcess.validateContent(SinglePageValidationProcess.java:184)
at
org.apache.pdfbox.preflight.process.reflect.SinglePageValidationProcess.validate(SinglePageValidationProcess.java:89)
at
org.apache.pdfbox.preflight.utils.ContextHelper.callValidation(ContextHelper.java:84)
at
org.apache.pdfbox.preflight.utils.ContextHelper.validateElement(ContextHelper.java:57)
at
org.apache.pdfbox.preflight.process.PageTreeValidationProcess.validatePage(PageTreeValidationProcess.java:59)
at
org.apache.pdfbox.preflight.process.PageTreeValidationProcess.validate(PageTreeValidationProcess.java:47)
at
org.apache.pdfbox.preflight.utils.ContextHelper.callValidation(ContextHelper.java:84)
at
org.apache.pdfbox.preflight.utils.ContextHelper.validateElement(ContextHelper.java:122)
at
org.apache.pdfbox.preflight.PreflightDocument.validate(PreflightDocument.java:163)
at
com.mycompany.preflightmasstest.PreflightChecker.run(PreflightChecker.java:52)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.io.IOException: object reference 3 0 R at offset 1173 in
content stream
at
org.apache.pdfbox.pdfparser.BaseParser.getObjectFromPool(BaseParser.java:204)
at
org.apache.pdfbox.pdfparser.BaseParser.parseCOSDictionaryValue(BaseParser.java:197)
at
org.apache.pdfbox.pdfparser.BaseParser.parseCOSDictionaryNameValuePair(BaseParser.java:301)
at
org.apache.pdfbox.pdfparser.BaseParser.parseCOSDictionary(BaseParser.java:234)
at
org.apache.pdfbox.pdfparser.PDFStreamParser.parseNextToken(PDFStreamParser.java:210)
at
org.apache.pdfbox.pdfparser.PDFStreamParser.access$000(PDFStreamParser.java:46)
at
org.apache.pdfbox.pdfparser.PDFStreamParser$1.tryNext(PDFStreamParser.java:137)
... 18 more
475121.pdf
java.lang.RuntimeException: java.io.IOException: Value is not an
integer: -2366213136885537460660416106463232
at
org.apache.pdfbox.pdfparser.PDFStreamParser$1.tryNext(PDFStreamParser.java:142)
at
org.apache.pdfbox.pdfparser.PDFStreamParser$1.hasNext(PDFStreamParser.java:150)
at
org.apache.pdfbox.contentstream.PDFStreamEngine.processStreamOperators(PDFStreamEngine.java:475)
at
org.apache.pdfbox.contentstream.PDFStreamEngine.processStream(PDFStreamEngine.java:456)
at
org.apache.pdfbox.contentstream.PDFStreamEngine.processPage(PDFStreamEngine.java:167)
at
org.apache.pdfbox.preflight.content.PreflightContentStream.validatePageContentStream(PreflightContentStream.java:76)
at
org.apache.pdfbox.preflight.process.reflect.SinglePageValidationProcess.validateContent(SinglePageValidationProcess.java:184)
at
org.apache.pdfbox.preflight.process.reflect.SinglePageValidationProcess.validate(SinglePageValidationProcess.java:89)
at
org.apache.pdfbox.preflight.utils.ContextHelper.callValidation(ContextHelper.java:84)
at
org.apache.pdfbox.preflight.utils.ContextHelper.validateElement(ContextHelper.java:57)
at
org.apache.pdfbox.preflight.process.PageTreeValidationProcess.validatePage(PageTreeValidationProcess.java:59)
at
org.apache.pdfbox.preflight.process.PageTreeValidationProcess.validate(PageTreeValidationProcess.java:47)
at
org.apache.pdfbox.preflight.utils.ContextHelper.callValidation(ContextHelper.java:84)
at
org.apache.pdfbox.preflight.utils.ContextHelper.validateElement(ContextHelper.java:122)
at
org.apache.pdfbox.preflight.PreflightDocument.validate(PreflightDocument.java:163)
at
com.mycompany.preflightmasstest.PreflightChecker.run(PreflightChecker.java:52)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.io.IOException: Value is not an integer:
-2366213136885537460660416106463232
at org.apache.pdfbox.cos.COSNumber.get(COSNumber.java:109)
at
org.apache.pdfbox.pdfparser.PDFStreamParser.parseNextToken(PDFStreamParser.java:309)
at
org.apache.pdfbox.pdfparser.PDFStreamParser.access$000(PDFStreamParser.java:46)
at
org.apache.pdfbox.pdfparser.PDFStreamParser$1.tryNext(PDFStreamParser.java:137)
... 18 more
Caused by: java.lang.NumberFormatException: For input string:
"-2366213136885537460660416106463232"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Long.parseLong(Unknown Source)
at java.lang.Long.parseLong(Unknown Source)
at org.apache.pdfbox.cos.COSNumber.get(COSNumber.java:105)
... 21 more
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]