Hi Maruan,
> you can change your code like this to use Helvetica.
> [...]
you saved my day, sir! It works like a charm, thank you very much.
To summarize it - I encountered two problems:
1. "Invisible" form field content.
Workaround: Setting 'pdAcroForm.setNeedAppearances( false )', filling
the fields and setting the property to 'true' again.
2. Wrong encoding / weird special chars in form fields.
Workaround: Using a PDF default font. In my case, setting the font of
all form fields to 'PDType1Font.HELVETICA' worked.
Can I contribute something to these problems, maybe creating a JIRA issue
(for the first item), or is PDFBOX-3332 sufficient for the moment?
Thanks again (also to you, John) for all your support
Best Regards,
Timo
-----Ursprüngliche Nachricht-----
Von: Maruan Sahyoun [mailto:[email protected]]
Gesendet: Mittwoch, 18. Mai 2016 15:03
An: [email protected]
Betreff: Re: After using 'PrinterJob' to print a PDF form, the form fields
are empty (PDFBox 2.0.0)
Hi,
> Am 18.05.2016 um 12:13 schrieb Timo Rumland <[email protected]>:
>
> Hello Maruan,
>
>> unfortunately you are hit by
> https://issues.apache.org/jira/browse/PDFBOX-3332.
>> Will check its state.
>> Maruan
>
> thanks a lot!
>
> In the meantime, is there any known workaround? I think about the
following:
>
>
> I read in the JIRA ticket, that using the standard PDF font Helvetica
> does not cause these problems.
> If this is correct:
>
> I can't control the source of the PDF files, but the used font for the
> form fields does not matter in my case. So while I can't force the
> source PDF form to use a specific font, I can modify the used font in
> the PDF form via PDFBox (if possible) before printing.
>
> Is there a way to set the default Helvetica font (specified by
> 'PDType1Font.HELVETICA' as far as I know) for all form fields before
> printing? Maybe this is a solution / workaround in my case, so no
> weird characters are displayed?
you can change your code like this to use Helvetica.
pdAcroForm.setNeedAppearances(false);
// Setting PDF field content in "textfield01"
PDField pdField = pdAcroForm.getField( "textfield01" );
PDType1Font helv = PDType1Font.HELVETICA;
// add the font to the AcroForm Resources
pdAcroForm.getDefaultResources().put(COSName.getPDFName("Helv"),
helv);
// Set the default appearance to use that font.
// Note: this was harcoded from the original value of
// 0 0 0 rg /F2 12 Tf
// which is not totally correct as the font should be the first
parameter
((PDTextField)pdField).setDefaultAppearance("/Helv 12 Tf");
pdField.setValue( "test content" );
pdAcroForm.setNeedAppearances(true);
BR
Maruan
>
>
> Thanks again!
>
>
> Best Regards,
> Timo
>
>
>
>
>
>
>
>
> -----Ursprüngliche Nachricht-----
> Von: Maruan Sahyoun [mailto:[email protected]]
> Gesendet: Mittwoch, 18. Mai 2016 10:43
> An: [email protected]
> Betreff: Re: After using 'PrinterJob' to print a PDF form, the form
> fields are empty (PDFBox 2.0.0)
>
> Hi,
>
>> Am 18.05.2016 um 09:14 schrieb Timo Rumland <[email protected]>:
>>
>> 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.
>>
>
> unfortunately you are hit by
> https://issues.apache.org/jira/browse/PDFBOX-3332.
>
> Will check its state.
> Maruan
>
>
>>
>> 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-
>>> p r inting (not providing a valid solution in my case)
>>> *
>>> http://stackoverflow.com/questions/24149361/form-field-values-set-wi
>>> t h -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]
>>
>
>
> ---------------------------------------------------------------------
> 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]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]