The best would be to upload the PDF somewhere, and also post your code.

I analyse PDFs sometimes with NOTEPAD++, sometimes with PDFDebugger, and often both. But these help only those who know what to expect.

The text below looks like a COSStream was closed prematurely (did you close the source documents too early?). I'd rather suspect a bug in your code or in our code.

Tilman



Am 28.02.2017 um 23:16 schrieb Thad Humphries:
I have a PDF 1.4 document that opens in different PDF viewers without
warnings, yet there seems to be something odd about it. How might I analyze
it?

If I merge this PDF from the command line with pdfbox-app-2.0.4.jar's
PDFMerger, the output is fine. However anytime I merge it in my own code,
where it is first opened into a byte array, loaded to a document, then call
PDFMergerUtility's appendDocument(destination, source), the
destination PDDocument cannot be saved to disk. This is the only PDF of
several dozen I've tested with this problem. I see nothing odd when I trace
the program in a debugger. It fails only at PDDocument save() (stack trace
below).

If I open the original PDF (39K) in MacOSX Yosemite's Preview and save it,
the saved PDF is now 40K, and it merges just fine in my code. (I believe
this PDF was created about 5 years ago, most likely with the export-to-PDF
action using OpenOffice on Linux. )

I expect that I'll see odd PDFs like this from time to time. (Lord knows
that I've amassed quite a collection of buggy TIFF images over the years.)
With TIFFs I can find out a lot using libtiff's tiffinfo and tiffdump
utilities and a hex editor. Are there any routines in PDFBox that might
help me with PDF files? Are there any other tools, open source or
commercial?


Stack trace from JUnit:

java.io.IOException: COSStream has been closed and cannot be read. Perhaps
its enclosing PDDocument has been closed?
at org.apache.pdfbox.cos.COSStream.checkClosed(COSStream.java:77)
at org.apache.pdfbox.cos.COSStream.createRawInputStream(COSStream.java:125)
at
org.apache.pdfbox.pdfwriter.COSWriter.visitFromStream(COSWriter.java:1200)
at org.apache.pdfbox.cos.COSStream.accept(COSStream.java:383)
at org.apache.pdfbox.cos.COSObject.accept(COSObject.java:158)
at org.apache.pdfbox.pdfwriter.COSWriter.doWriteObject(COSWriter.java:522)
at org.apache.pdfbox.pdfwriter.COSWriter.doWriteObjects(COSWriter.java:460)
at org.apache.pdfbox.pdfwriter.COSWriter.doWriteBody(COSWriter.java:444)
at
org.apache.pdfbox.pdfwriter.COSWriter.visitFromDocument(COSWriter.java:1096)
at org.apache.pdfbox.cos.COSDocument.accept(COSDocument.java:419)
at org.apache.pdfbox.pdfwriter.COSWriter.write(COSWriter.java:1367)
at org.apache.pdfbox.pdfwriter.COSWriter.write(COSWriter.java:1254)
at org.apache.pdfbox.pdmodel.PDDocument.save(PDDocument.java:1232)
at
com.jthad.util.image.TestPrintToPdf.testMergeTwoPdfDocs(TestPrintToPdf.java:192)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
at
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
at
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)




---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to