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]

Reply via email to