You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@pdfbox.apache.org by "Gerhard Temper (Commented) (JIRA)" <ji...@apache.org> on 2011/11/01 13:22:32 UTC

[jira] [Commented] (PDFBOX-1125) NullPointerException when saving Document

    [ https://issues.apache.org/jira/browse/PDFBOX-1125?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13141100#comment-13141100 ] 

Gerhard Temper commented on PDFBOX-1125:
----------------------------------------

I have the same problem with pdfbox version 1.6 - using pdfbox version 1.4 the problem is not reproducible:
An additional check before calling doWriteSignature in the visitFromDocument function (COSWriter.java) fixed the problem:


--- COSWriter.java.ori	2011-06-28 21:35:28.000000000 +0200
+++ COSWriter.java	2011-10-31 12:05:20.763036700 +0100
@@ -1036,7 +1036,8 @@
             else
                 doWriteXRef(doc);
             doWriteTrailer(doc);
-            doWriteSignature(doc);
+            if(incrementalUpdate)
+                doWriteSignature(doc);
             
             return null;
         }
                
> NullPointerException when saving Document
> -----------------------------------------
>
>                 Key: PDFBOX-1125
>                 URL: https://issues.apache.org/jira/browse/PDFBOX-1125
>             Project: PDFBox
>          Issue Type: Bug
>          Components: Writing
>    Affects Versions: 1.6.0
>            Reporter: Per Abich
>
> I am trying to fill out this form(official Norwegian Government form): http://www.nav.no/Om+NAV/Skjemaer/Arbeidsgiverskjemaer/L%C3%B8nn+og+personalskjemaer+for+din+bedrift+%28HR%29/Yrkesskade/_attachment/1073746888?_ts=1271f676c80 
> My code looks as follows: 
>   public void setKode(InputStream inputStream, String value, OutputStream output) throws IOException, COSVisitorException
>   {
>     PDDocument pdfDocument = PDDocument.load(inputStream);
>     if (LOGGER.isInfoEnabled())
>     {
>       LOGGER.info(pdfDocument.getCurrentAccessPermission().toString());
>     }
>     PDDocumentCatalog docCatalog = pdfDocument.getDocumentCatalog();
>     PDAcroForm acroForm = docCatalog.getAcroForm();
>     PDField field = acroForm.getField("beskrivelse");
>     if (field != null)
>     {
>       field.setValue(value);
>     } else
>     {
>       System.err.println("No field found with name:" + "beskrivelse");
>     }
>     pdfDocument.save(output);
>   }
> While trying to fill in the field "beskrivelse" (or any other field in this form) I get the following stacktrace:
> java.lang.NullPointerException
> 	at java.io.FilterInputStream.close(FilterInputStream.java:155)
> 	at org.apache.pdfbox.pdfwriter.COSWriter.doWriteSignature(COSWriter.java:688)
> 	at org.apache.pdfbox.pdfwriter.COSWriter.visitFromDocument(COSWriter.java:1039)
> 	at org.apache.pdfbox.cos.COSDocument.accept(COSDocument.java:456)
> 	at org.apache.pdfbox.pdfwriter.COSWriter.write(COSWriter.java:1360)
> 	at org.apache.pdfbox.pdmodel.PDDocument.save(PDDocument.java:1121)
> 	at com.qmplus.PDFTest.App.setKode(App.java:36)
> 	at com.qmplus.PDFTest.AppTest.test(AppTest.java:35)
> 	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:44)
> 	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
> 	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
> 	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
> 	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
> 	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
> 	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:69)
> 	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:48)
> 	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
> 	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
> 	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
> 	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
> 	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
> 	at org.junit.runners.ParentRunner.run(ParentRunner.java:292)
> 	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
> 	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
> The funny thing is, the output is created and looks to my eyes fine...

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira