I am using PDFBox 2.0.24. I am attempting to copy a PDF file to a new PDDocument and save that new document. The eventual goal is to use Overlay to overlay various images onto pages of the old document before adding them to the new document.
The problem I'm having is that when I close the old document or any intermediary document (like one created when making the Overlay), I get an error "COSStream has been closed and cannot be read" when I save the new document. I can demonstrate this error simply with just a simple function: @Test *public* *void* testCopyAnnotation() *throws* Exception { File inPdfFile = *new* File(*this*.getClass().getResource( "/patent-3_139_857.pdf").toURI()); PDDocument inDocument = PDDocument.*load*(inPdfFile); PDDocument outDocument = *new* PDDocument(); *int* pages = inDocument.getNumberOfPages(); *for* (*int* page = 0; page < pages; page++) { PDPage pdPage = inDocument.getPage(page); outDocument.importPage(pdPage); } inDocument.close(); outDocument.save(*OUT_DIR* + "/out-pdf-patente.pdf"); outDocument.close(); Assert.*assertTrue*(*true*); } The stack trace below is triggered by the line "outDocument.save(*OUT_DIR* + "/out-pdf-patente.pdf");". What is wrong here and how might I correct this? *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:83) at org.apache.pdfbox.cos.COSStream.createRawInputStream(COSStream.java:133) at org.apache.pdfbox.pdfwriter.COSWriter.visitFromStream(COSWriter.java:1268 ) at org.apache.pdfbox.cos.COSStream.accept(COSStream.java:416) at org.apache.pdfbox.cos.COSObject.accept(COSObject.java:158) at org.apache.pdfbox.pdfwriter.COSWriter.doWriteObject(COSWriter.java:572) at org.apache.pdfbox.pdfwriter.COSWriter.doWriteObjects(COSWriter.java:497) at org.apache.pdfbox.pdfwriter.COSWriter.doWriteBody(COSWriter.java:481) at org.apache.pdfbox.pdfwriter.COSWriter.visitFromDocument( COSWriter.java:1162) at org.apache.pdfbox.cos.COSDocument.accept(COSDocument.java:452) at org.apache.pdfbox.pdfwriter.COSWriter.write(COSWriter.java:1435) at org.apache.pdfbox.pdfwriter.COSWriter.write(COSWriter.java:1322) at org.apache.pdfbox.pdmodel.PDDocument.save(PDDocument.java:1375) at org.apache.pdfbox.pdmodel.PDDocument.save(PDDocument.java:1342) at org.apache.pdfbox.pdmodel.PDDocument.save(PDDocument.java:1326) -->> at com.optix.server.rest.TestFileServlet.testCopyAnnotation( TestFileServlet.java:152) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke( NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke( DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall( FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run( ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively( FrameworkMethod.java:47) 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:325) at org.junit.runners.BlockJUnit4ClassRunner.runChild( BlockJUnit4ClassRunner.java:78) at org.junit.runners.BlockJUnit4ClassRunner.runChild( BlockJUnit4ClassRunner.java:57) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run( JUnit4TestReference.java:93) at org.eclipse.jdt.internal.junit.runner.TestExecution.run( TestExecution.java:40) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests( RemoteTestRunner.java:529) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests( RemoteTestRunner.java:756) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run( RemoteTestRunner.java:452) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main( RemoteTestRunner.java:210) -- "Hell hath no limits, nor is circumscrib'd In one self-place; but where we are is hell, And where hell is, there must we ever be" --Christopher Marlowe, *Doctor Faustus* (v. 111-13)