I created a new PDF file with Foxit PhantomPDF that's the same as the one I
created with Adobe Acrobat DC.  Without the work-around you gave me, the
PDF I created with Foxit PhantomPDF has the same problem as the one I
created with Acrobat DC.  The date field is empty until I click on it.
When I move the focus away, the date field content disappears.  With the
work-around the PDF I created with Foxit PhantomPDF works correctly.

So, it appears that it's not a defect in the document that I created with
Adobe Acrobat DC.

On Tue, Dec 24, 2019 at 3:35 PM Maruan Sahyoun <sahy...@fileaffairs.de>
wrote:

> I think the reasoning is that setting a different string will not ensure
> the proper format as has been intentef by the forms designer
>
> > Am 24.12.2019 um 20:18 schrieb Tilman Hausherr <thaush...@t-online.de>:
> >
> > Hi,
> >
> > In the meantime I found the file FreedomExpressions.pdf and amusingly,
> the JS content is the same:
> >
> > AFDate_FormatEx("mm/dd/yyyy");
> >
> > I agree that we should create the appearance stream. But I still wonder
> why the decision was made a long time ago not to.
> >
> > Tilman
> >
> >> Am 24.12.2019 um 18:07 schrieb Maruan Sahyoun:
> >> We should be able to remove the test for a JavaScript action and
> generate the appearance regardless. If there is a JavaScript
> >> action that should take the value and recalculate the entry. What
> happens here (I think as I don't have the form) is that the
> >> JavaScript is attached to an interactive event which is not triggered
> which results in an empty field.
> >>
> >> OTOH this is also a defect of the form itself as the scripting assumes
> interactive use.
> >>
> >> If we remove the check we will take the provided string as is and won't
> execute the JavaScript (as we can't) which might lead to
> >> a visual representation which is not intented e.g. the JavaScript
> typically does date formatting in a way that differs from the
> >> string being passed.
> >>
> >> BTW that's the reasoning why we don't set the appearance if there is a
> JavaScript action attached.
> >>
> >> WDYT?
> >>
> >> BR
> >> Maruan
> >>
> >>
> >>
> >>> Oh, I could reproduce this.
> >>>
> >>> Then I debugged it. The code doesn't set the appearance if the /F entry
> >>> is set. (That is a Javascript action)
> >>>
> >>> There is a code comment:
> >>>
> >>>              PDFormFieldAdditionalActions actions = field.getActions();
> >>>
> >>>              // in case all tests fail the field will be formatted by
> >>> acrobat
> >>>              // when it is opened. See FreedomExpressions.pdf for an
> >>> example of this.
> >>>              if (actions == null || actions.getF() == null ||
> >>> widget.getCOSObject().getDictionaryObject(COSName.AP) != null)
> >>>              {
> >>>
> >>> This code part is from before it became an apache project, I don't have
> >>> that file, didn't search for the ticket.
> >>>
> >>> So remove the /F entry before setting, with
> >>>
> >>> field.getActions().setF(null);
> >>>
> >>> The drawback is that the "formatter" will be gone. A compromise would
> be
> >>> to put it back after setting the field:
> >>>
> >>>          PDDocument doc = PDDocument.load(...);
> >>>          PDField f =
> >>> doc.getDocumentCatalog().getAcroForm().getField("dateField");
> >>>          PDAction fa = f.getActions().getF();
> >>>          f.getActions().setF(null);
> >>>          f.setValue("01.01.2020");
> >>>          f.getActions().setF(fa);
> >>>
> >>>
> >>> Tilman
> >>>
> >>> Am 24.12.2019 um 16:57 schrieb Robert Pepersack:
> >>>> Hi Tilman,
> >>>> I'm using PDFBox version 2.0.17.  Here is my code:
> >>>>
> >>>>   public void fillForm(Map<String, String> formMap)
> >>>> {
> >>>>
> >>>> File file = new File(myFile);
> >>>>
> >>>> try (PDDocument doc = PDDocument.load(file)) {
> >>>>
> >>>> PDDocumentCatalog docCatalog = doc.getDocumentCatalog();
> >>>> PDAcroForm acroForm = docCatalog.getAcroForm();
> >>>>
> >>>> if (acroForm != null) {
> >>>>
> >>>> for (Map.Entry<String, String> entry : formMap.entrySet()) {
> >>>> String key = entry.getKey();
> >>>> PDField field = acroForm.getField(key);
> >>>>
> >>>> if (field instanceof PDVariableText) {
> >>>>
> >>>> if (field instanceof PDTextField) {
> >>>> PDTextField textField = PDTextField.class.cast(field);
> >>>> textField.setValue(formMap.get(key));
> >>>>
> >>>> } else if (field instanceof PDChoice) {
> >>>> PDChoice choice = PDChoice.class.cast(field);
> >>>> choice.setValue(formMap.get(key));
> >>>>
> >>>> }
> >>>> } else if (field instanceof PDCheckBox) {
> >>>> PDCheckBox checkBox = PDCheckBox.class.cast(field);
> >>>> boolean value = Boolean.valueOf(formMap.get(key));
> >>>> if (value) {
> >>>> checkBox.check();
> >>>> } else {
> >>>> checkBox.unCheck();
> >>>> }
> >>>>
> >>>> } else if (field instanceof PDRadioButton) {
> >>>> PDRadioButton radioButton = PDRadioButton.class.cast(field);
> >>>> radioButton.setValue(formMap.get(key));
> >>>>
> >>>> }
> >>>> }
> >>>>
> >>>> File outputFile = new File("test.pdf");
> >>>> doc.save(outputFile);
> >>>> }
> >>>> } catch (IOException e) {
> >>>> throw new AssistBusinessException(e);
> >>>> }
> >>>> }
> >>>>
> >>>> }
> >>>>
> >>>> On Tue, Dec 24, 2019 at 10:43 AM Tilman Hausherr <
> thaush...@t-online.de>
> >>>> wrote:
> >>>>
> >>>>> Am 23.12.2019 um 22:09 schrieb Robert Pepersack:
> >>>>>> 2. Run my Java program that loads the .pdf file, populates its form
> >>>>>> fields, and saves it to a new file on my local disk.
> >>>>> What code did you use to populate the date field, and what PDFBox
> >>>>> version did you use (the current version is 2.0.18)? I'm asking
> because
> >>>>> the date field does not have an appearance stream.
> >>>>>
> >>>>> Tilman
> >>>>>
> >>>>>
> >>>>> ---------------------------------------------------------------------
> >>>>> To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org
> >>>>> For additional commands, e-mail: users-h...@pdfbox.apache.org
> >>>>>
> >>>>>
> >>> ---------------------------------------------------------------------
> >>> To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org
> >>> For additional commands, e-mail: users-h...@pdfbox.apache.org
> >>>
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org
> > For additional commands, e-mail: users-h...@pdfbox.apache.org
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org
> For additional commands, e-mail: users-h...@pdfbox.apache.org
>
>

Reply via email to