Hi Maruan,

> What you can do is set NeedApparances to false, update 
> the field and afterwards set the value to true again.

I've just tested this with the following code (I hope I understood you
correctly and my naive approach is sufficient):

----------

pdAcroForm.setNeedAppearances( false );
pdField.setValue( "test content" );
pdAcroForm.setNeedAppearances( true );

----------

(The rest of my sample code is unaltered.)

Now after running the test code, the form field in the resulting PDF file is
NOT empty, but the space between "test" and "content" (the desired field
content is "test content") has been replaced with a special character (and
the position of the text is slightly off).

Please, see this screenshot I made:

 * https://goo.gl/dWUvKy

There you can see the difference between the source PDF form file and the
resulting file after printing.


To be honest, I now have absolutely no idea what could cause this, and I
really hope you have some more ideas about it, as the problem gets more and
more urgent for my current project.



Thanks a lot for your help!



Best Regards,
Timo







-----Ursprüngliche Nachricht-----
Von: Maruan Sahyoun [mailto:[email protected]] 
Gesendet: Dienstag, 17. Mai 2016 21:19
An: [email protected]
Betreff: Re: After using 'PrinterJob' to print a PDF form, the form fields
are empty (PDFBox 2.0.0)

Hi,

> Am 17.05.2016 um 17:04 schrieb Timo Rumland <[email protected]>:
> 
> Hello,
> 
> after migrating from PDFBox 1.8 to 2.0.0, printing a PDF form via 
> 'PrinterJob' and ' PDFPrintable ', in which I filled out the form 
> fields via PDFBox, results in a PDF file (or a physical print) with 
> the form fields empty.
> 

the form fields value is set but the appearance stream for the form field
(what you see) is not updated as the NeedAppearances flag is set to true.
PDFBox (currently) handles it that it doens't update the appearance  stream
of the form field in that case (that should probably be changed).

What you can do is set NeedApparances to false, update the field and
afterwards set the value to true again.


BR
Maruan


> With PDFBox 1.8, the following simple code worked:
> 
> 
> ----------
> 
> File sourcePdfForm = new File( "g:/test-form.pdf" ); File 
> resultPdfForm = new File( "g:/test-form_out.pdf" );
> 
> // Load the source PDF form file
> PDDocument pdDocument = PDDocument.load( sourcePdfForm ); 
> PDDocumentCatalog pdDocumentCatalog = pdDocument.getDocumentCatalog(); 
> PDAcroForm pdAcroForm = pdDocumentCatalog.getAcroForm();
> 
> // Setting PDF field content in "textfield01"
> PDField pdField = pdAcroForm.getField( "textfield01" ); 
> pdField.setValue( "test content" );
> 
> pdDocument.save( resultPdfForm );
> pdDocument.close();
> 
> // Open the resulting PDF file, which shows the content in the PDF 
> field "textfield01"
> Desktop.getDesktop().open( resultPdfForm );
> 
> 
> // Now open the resulting file again, printing it with the default 
> printer // No matter if the default printer is an PDF printer (like 
> PDFCreator) or // an actual physical printer, the content of the field 
> "textfield01" is empty
> 
> pdDocument = PDDocument.load( resultPdfForm );
> 
> PrinterJob printerJob = PrinterJob.getPrinterJob(); 
> printerJob.setJobName( "printerJob" ); printerJob.setPrintService( 
> PrintServiceLookup.lookupDefaultPrintService()
> );   
> printerJob.setPrintable( new PDFPrintable( pdDocument ) ); 
> printerJob.print( new HashPrintRequestAttributeSet( 
> MediaSizeName.ISO_A4 ) );
> 
> pdDocument.close();
> 
> ----------
> 
> -- What this code sample does --
> 
> As you can see, this is a test case where I first load a source PDF 
> form, setting the value of a form field and save the resulting PDF 
> file. After that I load the resulting PDF file and use a PrinterJob to 
> print it on the default printer.
> 
> 
> -- The problem --
> 
> Now using PDFBox 2.0.0: No matter what the default printer is - a PDF 
> printer like PDFCreator or a physical printer - the form fields of the 
> printed out PDF file are empty
> 
> Interestingly, opening the resulting PDF form 'test-form_out.pdf' (see 
> line 'Desktop.getDesktop().open( resultPdfForm );') in any PDF viewer 
> (Adobe Acrobat Reader DC, PDF XChange Viewer etc.) shows the correct 
> form field content for field 'textfield01', which is 'test content'.
> 
> The test PDF form file I use is a really simple form, containing only 
> a label and the form field named "testfield01". If you wish, you can 
> download 'test-form.pdf' here:
> 
> * https://goo.gl/VMiohj
> 
> As mentioned, with PDFBox 1.8 I was able to print out PDF forms via a 
> 'PrinterJob' with form field contents.
> 
> 
> -- Related posts --
> 
> There are several posts or bug reports regard empty form fields, like
these:
> 
> *
> http://stackoverflow.com/questions/14541647/pdfbox-set-visible-when-pr
> inting (not providing a valid solution in my case)
> *
> http://stackoverflow.com/questions/24149361/form-field-values-set-with
> -pdfbo x-not-visible-in-adobe-reader (my PDF form is a AcroForm and 
> has no XFA
> data)
> * https://issues.apache.org/jira/browse/PDFBOX-71 (setting 
> 'pdAcroForm.getCOSObject().setItem( COSName.getPDFName( 
> "NeedAppearances" ), COSBoolean.TRUE );' did not help in my case)
> 
> Unfortunately, none of these did help.
> 
> 
> 
> Any advice on this problem is highly appreciated
> 
> 
> 
> Thanks a lot for your help!
> 
> 
> Best regards,
> Timo
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
> 


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



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

Reply via email to