From fa2516df712aa59eb414933a912d30bb6fa1606e Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Fri, 26 Feb 2021 14:47:52 -0500 Subject: Fix behavior for finding /Q, /DA, and /DR for form fields If not found in the field hierarchy, /Q and /DA are supposed to be looked up in the document-level form dictionary. /DR is supposed to only come from the document dictionary. --- include/qpdf/QPDFFormFieldObjectHelper.hh | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'include') diff --git a/include/qpdf/QPDFFormFieldObjectHelper.hh b/include/qpdf/QPDFFormFieldObjectHelper.hh index edb93df8..6052f2e3 100644 --- a/include/qpdf/QPDFFormFieldObjectHelper.hh +++ b/include/qpdf/QPDFFormFieldObjectHelper.hh @@ -121,12 +121,22 @@ class QPDFFormFieldObjectHelper: public QPDFObjectHelper // the field tree into account. Returns the empty string if the // default appearance string is not available (because it's // erroneously absent or because this is not a variable text - // field). + // field). If not found in the field hierarchy, look in /AcroForm. QPDF_DLL std::string getDefaultAppearance(); + // Return the default resource dictionary for the field. This + // comes not from the field but from the document-level /AcroForm + // dictionary. While several PDF generates put a /DR key in the + // form field's dictionary, experimentation suggests that many + // popular readers, including Adobe Acrobat and Acrobat Reader, + // ignore any /DR item on the field. + QPDF_DLL + QPDFObjectHandle getDefaultResources(); + // Return the quadding value, taking inheritance from the field - // tree into account. Returns 0 if quadding is not specified. + // tree into account. Returns 0 if quadding is not specified. Look + // in /AcroForm if not found in the field hierarchy. QPDF_DLL int getQuadding(); @@ -200,6 +210,7 @@ class QPDFFormFieldObjectHelper: public QPDFObjectHelper void generateAppearance(QPDFAnnotationObjectHelper&); private: + QPDFObjectHandle getFieldFromAcroForm(std::string const& name); void setRadioButtonValue(QPDFObjectHandle name); void setCheckBoxValue(bool value); void generateTextAppearance(QPDFAnnotationObjectHelper&); -- cgit v1.2.3-70-g09d2