QPDFAcroFormDocumentHelper: add missing analyze calls

This commit is contained in:
Jay Berkenbilt 2021-03-04 17:38:15 -05:00
parent 0b77f2cf26
commit cb6e53136f
7 changed files with 938 additions and 931 deletions

View File

@ -25,31 +25,31 @@ endobj
<< /DV /1 /FT /Btn /Ff 49152 /Kids [ 25 0 R 26 0 R 27 0 R ] /T (r1) /V /2 >>
endobj
9 0 obj
<< /AP << /N 28 0 R >> /DA (0 0.4 0 rg /F1 18 Tf) /DR 5 0 R /DV () /FT /Tx /Ff 0 /Rect [ 72 470.774 190.8 484.922 ] /Subtype /Widget /T (Text Box 1) /Type /Annot /V (Formy field) >>
<< /AP << /N 28 0 R >> /DA (0 0.4 0 rg /F1 18 Tf) /DR 5 0 R /DV () /FT /Tx /Ff 0 /Rect [ 72 470.774 190.8 484.922 ] /Subtype /Widget /T (Text Box 1+1) /Type /Annot /V (Formy field) >>
endobj
10 0 obj
<< /AP << /N 29 0 R >> /DA (0 0.4 0 rg /F1 18 Tf) /DR 5 0 R /DV () /FT /Tx /Ff 0 /Rect [ 372 330.774 386.148 470.374 ] /Subtype /Widget /T (Text Box 1) /Type /Annot /V (Rot-ccw field) >>
<< /AP << /N 29 0 R >> /DA (0 0.4 0 rg /F1 18 Tf) /DR 5 0 R /DV () /FT /Tx /Ff 0 /Rect [ 372 330.774 386.148 470.374 ] /Subtype /Widget /T (Text Box 1+1) /Type /Annot /V (Rot-ccw field) >>
endobj
11 0 obj
<< /DV /1 /FT /Btn /Ff 49152 /Kids [ 30 0 R 31 0 R 32 0 R ] /T (r1) /V /2 >>
<< /DV /1 /FT /Btn /Ff 49152 /Kids [ 30 0 R 31 0 R 32 0 R ] /T (r1+1) /V /2 >>
endobj
12 0 obj
<< /AP << /N 33 0 R >> /DA (0 0.4 0 rg /F1 18 Tf) /DR 5 0 R /DV () /FT /Tx /Ff 0 /Rect [ 72 470.774 190.8 484.922 ] /Subtype /Widget /T (Text Box 1) /Type /Annot /V (Formy field) >>
<< /AP << /N 33 0 R >> /DA (0 0.4 0 rg /F1 18 Tf) /DR 5 0 R /DV () /FT /Tx /Ff 0 /Rect [ 72 470.774 190.8 484.922 ] /Subtype /Widget /T (Text Box 1+2) /Type /Annot /V (Formy field) >>
endobj
13 0 obj
<< /AP << /N 34 0 R >> /DA (0 0.4 0 rg /F1 18 Tf) /DR 5 0 R /DV () /FT /Tx /Ff 0 /Rect [ 372 330.774 386.148 470.374 ] /Subtype /Widget /T (Text Box 1) /Type /Annot /V (Rot-ccw field) >>
<< /AP << /N 34 0 R >> /DA (0 0.4 0 rg /F1 18 Tf) /DR 5 0 R /DV () /FT /Tx /Ff 0 /Rect [ 372 330.774 386.148 470.374 ] /Subtype /Widget /T (Text Box 1+2) /Type /Annot /V (Rot-ccw field) >>
endobj
14 0 obj
<< /DV /1 /FT /Btn /Ff 49152 /Kids [ 35 0 R 36 0 R 37 0 R ] /T (r1) /V /2 >>
<< /DV /1 /FT /Btn /Ff 49152 /Kids [ 35 0 R 36 0 R 37 0 R ] /T (r1+2) /V /2 >>
endobj
15 0 obj
<< /AP << /N 38 0 R >> /DA (0 0.4 0 rg /F1 18 Tf) /DR 5 0 R /DV () /FT /Tx /Ff 0 /Rect [ 72 470.774 190.8 484.922 ] /Subtype /Widget /T (Text Box 1) /Type /Annot /V (Formy field) >>
<< /AP << /N 38 0 R >> /DA (0 0.4 0 rg /F1 18 Tf) /DR 5 0 R /DV () /FT /Tx /Ff 0 /Rect [ 72 470.774 190.8 484.922 ] /Subtype /Widget /T (Text Box 1+3) /Type /Annot /V (Formy field) >>
endobj
16 0 obj
<< /AP << /N 39 0 R >> /DA (0 0.4 0 rg /F1 18 Tf) /DR 5 0 R /DV () /FT /Tx /Ff 0 /Rect [ 372 330.774 386.148 470.374 ] /Subtype /Widget /T (Text Box 1) /Type /Annot /V (Rot-ccw field) >>
<< /AP << /N 39 0 R >> /DA (0 0.4 0 rg /F1 18 Tf) /DR 5 0 R /DV () /FT /Tx /Ff 0 /Rect [ 372 330.774 386.148 470.374 ] /Subtype /Widget /T (Text Box 1+3) /Type /Annot /V (Rot-ccw field) >>
endobj
17 0 obj
<< /DV /1 /FT /Btn /Ff 49152 /Kids [ 40 0 R 41 0 R 42 0 R ] /T (r1) /V /2 >>
<< /DV /1 /FT /Btn /Ff 49152 /Kids [ 40 0 R 41 0 R 42 0 R ] /T (r1+3) /V /2 >>
endobj
18 0 obj
<< /Annots [ 43 0 R 6 0 R 44 0 R 7 0 R 45 0 R 46 0 R 47 0 R 48 0 R 25 0 R 26 0 R 27 0 R ] /Contents [ 49 0 R 50 0 R 51 0 R ] /MediaBox [ 0 0 612 792 ] /Parent 4 0 R /Resources << /Font << /F1 52 0 R >> /ProcSet [ /PDF /Text ] /XObject << /Fx1 53 0 R >> >> /Type /Page >>
@ -579,128 +579,128 @@ xref
0000000606 00000 n
0000000808 00000 n
0000000900 00000 n
0000001097 00000 n
0000001300 00000 n
0000001393 00000 n
0000001591 00000 n
0000001794 00000 n
0000001887 00000 n
0000002085 00000 n
0000002288 00000 n
0000002381 00000 n
0000002668 00000 n
0000002956 00000 n
0000003245 00000 n
0000003534 00000 n
0000003630 00000 n
0000003839 00000 n
0000004075 00000 n
0000004317 00000 n
0000004559 00000 n
0000004801 00000 n
0000005010 00000 n
0000005246 00000 n
0000005489 00000 n
0000005732 00000 n
0000005975 00000 n
0000006184 00000 n
0000006420 00000 n
0000006663 00000 n
0000006906 00000 n
0000007149 00000 n
0000007358 00000 n
0000007594 00000 n
0000007839 00000 n
0000008084 00000 n
0000008329 00000 n
0000008502 00000 n
0000008669 00000 n
0000008775 00000 n
0000008883 00000 n
0000008991 00000 n
0000009099 00000 n
0000009180 00000 n
0000009304 00000 n
0000009407 00000 n
0000009507 00000 n
0000010126 00000 n
0000010299 00000 n
0000010466 00000 n
0000010572 00000 n
0000010680 00000 n
0000010788 00000 n
0000010896 00000 n
0000010977 00000 n
0000011101 00000 n
0000011204 00000 n
0000011377 00000 n
0000011544 00000 n
0000011650 00000 n
0000011758 00000 n
0000011866 00000 n
0000011974 00000 n
0000012055 00000 n
0000012179 00000 n
0000012282 00000 n
0000012455 00000 n
0000012622 00000 n
0000012728 00000 n
0000012836 00000 n
0000012944 00000 n
0000013052 00000 n
0000013133 00000 n
0000013257 00000 n
0000013360 00000 n
0000013405 00000 n
0000013688 00000 n
0000013852 00000 n
0000014136 00000 n
0000014300 00000 n
0000014583 00000 n
0000014747 00000 n
0000015030 00000 n
0000015194 00000 n
0000015478 00000 n
0000015642 00000 n
0000015925 00000 n
0000016089 00000 n
0000016372 00000 n
0000016536 00000 n
0000016820 00000 n
0000016984 00000 n
0000017267 00000 n
0000017431 00000 n
0000017715 00000 n
0000017880 00000 n
0000018165 00000 n
0000018330 00000 n
0000018614 00000 n
0000018779 00000 n
0000018959 00000 n
0000019074 00000 n
0000019245 00000 n
0000019444 00000 n
0000019643 00000 n
0000019843 00000 n
0000020023 00000 n
0000020194 00000 n
0000020393 00000 n
0000020592 00000 n
0000020792 00000 n
0000020972 00000 n
0000021143 00000 n
0000021342 00000 n
0000021541 00000 n
0000021741 00000 n
0000021921 00000 n
0000022092 00000 n
0000022291 00000 n
0000022490 00000 n
0000022690 00000 n
0000022751 00000 n
0000022962 00000 n
0000022999 00000 n
0000001099 00000 n
0000001304 00000 n
0000001399 00000 n
0000001599 00000 n
0000001804 00000 n
0000001899 00000 n
0000002099 00000 n
0000002304 00000 n
0000002399 00000 n
0000002686 00000 n
0000002974 00000 n
0000003263 00000 n
0000003552 00000 n
0000003648 00000 n
0000003857 00000 n
0000004093 00000 n
0000004335 00000 n
0000004577 00000 n
0000004819 00000 n
0000005028 00000 n
0000005264 00000 n
0000005507 00000 n
0000005750 00000 n
0000005993 00000 n
0000006202 00000 n
0000006438 00000 n
0000006681 00000 n
0000006924 00000 n
0000007167 00000 n
0000007376 00000 n
0000007612 00000 n
0000007857 00000 n
0000008102 00000 n
0000008347 00000 n
0000008520 00000 n
0000008687 00000 n
0000008793 00000 n
0000008901 00000 n
0000009009 00000 n
0000009117 00000 n
0000009198 00000 n
0000009322 00000 n
0000009425 00000 n
0000009525 00000 n
0000010144 00000 n
0000010317 00000 n
0000010484 00000 n
0000010590 00000 n
0000010698 00000 n
0000010806 00000 n
0000010914 00000 n
0000010995 00000 n
0000011119 00000 n
0000011222 00000 n
0000011395 00000 n
0000011562 00000 n
0000011668 00000 n
0000011776 00000 n
0000011884 00000 n
0000011992 00000 n
0000012073 00000 n
0000012197 00000 n
0000012300 00000 n
0000012473 00000 n
0000012640 00000 n
0000012746 00000 n
0000012854 00000 n
0000012962 00000 n
0000013070 00000 n
0000013151 00000 n
0000013275 00000 n
0000013378 00000 n
0000013423 00000 n
0000013706 00000 n
0000013870 00000 n
0000014154 00000 n
0000014318 00000 n
0000014601 00000 n
0000014765 00000 n
0000015048 00000 n
0000015212 00000 n
0000015496 00000 n
0000015660 00000 n
0000015943 00000 n
0000016107 00000 n
0000016390 00000 n
0000016554 00000 n
0000016838 00000 n
0000017002 00000 n
0000017285 00000 n
0000017449 00000 n
0000017733 00000 n
0000017898 00000 n
0000018183 00000 n
0000018348 00000 n
0000018632 00000 n
0000018797 00000 n
0000018977 00000 n
0000019092 00000 n
0000019263 00000 n
0000019462 00000 n
0000019661 00000 n
0000019861 00000 n
0000020041 00000 n
0000020212 00000 n
0000020411 00000 n
0000020610 00000 n
0000020810 00000 n
0000020990 00000 n
0000021161 00000 n
0000021360 00000 n
0000021559 00000 n
0000021759 00000 n
0000021939 00000 n
0000022110 00000 n
0000022309 00000 n
0000022508 00000 n
0000022708 00000 n
0000022769 00000 n
0000022980 00000 n
0000023017 00000 n
trailer << /Info 2 0 R /Root 1 0 R /Size 131 /ID [<e032a88c7a987db6ca3abee555506ccc><31415926535897932384626433832795>] >>
startxref
23074
23092
%%EOF

View File

@ -145,7 +145,7 @@ class QPDFAcroFormDocumentHelper: public QPDFDocumentHelper
// done through setFormFieldName() above.
QPDF_DLL
std::set<QPDFObjGen>
getFieldsWithQualifiedName(std::string const& name) const;
getFieldsWithQualifiedName(std::string const& name);
// Return the annotations associated with a terminal field. Note
// that in the case of a field having a single annotation, the

View File

@ -19,6 +19,10 @@ QPDFAcroFormDocumentHelper::QPDFAcroFormDocumentHelper(QPDF& qpdf) :
QPDFDocumentHelper(qpdf),
m(new Members())
{
// We have to analyze up front. Otherwise, when we are adding
// annotations and fields, we are in a temporarily unstable
// configuration where some widget annotations are not reachable.
analyze();
}
void
@ -68,6 +72,7 @@ void
QPDFAcroFormDocumentHelper::addAndRenameFormFields(
std::vector<QPDFObjectHandle> fields)
{
analyze();
std::map<std::string, std::string> renames;
std::list<QPDFObjectHandle> queue;
queue.insert(queue.begin(), fields.begin(), fields.end());
@ -214,8 +219,9 @@ QPDFAcroFormDocumentHelper::getFormFields()
std::set<QPDFObjGen>
QPDFAcroFormDocumentHelper::getFieldsWithQualifiedName(
std::string const& name) const
std::string const& name)
{
analyze();
// Keep from creating an empty entry
std::set<QPDFObjGen> result;
auto iter = this->m->name_to_fields.find(name);
@ -248,6 +254,7 @@ QPDFAcroFormDocumentHelper::getWidgetAnnotationsForPage(QPDFPageObjectHelper h)
std::vector<QPDFFormFieldObjectHelper>
QPDFAcroFormDocumentHelper::getFormFieldsForPage(QPDFPageObjectHelper ph)
{
analyze();
std::set<QPDFObjGen> added;
std::vector<QPDFFormFieldObjectHelper> result;
auto widget_annotations = getWidgetAnnotationsForPage(ph);

View File

@ -58,7 +58,7 @@ endobj
731.6
]
/Subtype /Widget
/T (Check Box 1)
/T (Check Box 1+1)
/Type /Annot
/V /Off
>>
@ -82,7 +82,7 @@ endobj
731.4
]
/Subtype /Widget
/T (Text Box 1)
/T (Text Box 1+1)
/Type /Annot
/V <feff>
>>
@ -308,23 +308,23 @@ xref
0000000025 00000 n
0000000199 00000 n
0000000337 00000 n
0000000681 00000 n
0000000949 00000 n
0000001022 00000 n
0000001128 00000 n
0000001234 00000 n
0000001314 00000 n
0000001394 00000 n
0000001561 00000 n
0000001581 00000 n
0000001819 00000 n
0000001849 00000 n
0000002199 00000 n
0000002408 00000 n
0000002428 00000 n
0000002537 00000 n
0000002669 00000 n
0000003006 00000 n
0000000683 00000 n
0000000953 00000 n
0000001026 00000 n
0000001132 00000 n
0000001238 00000 n
0000001318 00000 n
0000001398 00000 n
0000001565 00000 n
0000001585 00000 n
0000001823 00000 n
0000001853 00000 n
0000002203 00000 n
0000002412 00000 n
0000002432 00000 n
0000002541 00000 n
0000002673 00000 n
0000003010 00000 n
trailer <<
/DocChecksum /606E154FE5CF1A6B8B73D870AC8EBE04
/Root 1 0 R
@ -332,5 +332,5 @@ trailer <<
/ID [<f1c10d47699f47f5166db140c15c0bc1><31415926535897932384626433832795>]
>>
startxref
3027
3031
%%EOF

View File

@ -1,4 +1,3 @@
iterating over form fields
WARNING: form-bad-fields-array.pdf, object 1 0 at offset 50: /Fields key of /AcroForm dictionary is not an array; ignoring
WARNING: form-bad-fields-array.pdf, object 4 0 at offset 615: this widget annotation is not reachable from /AcroForm in the document catalog
WARNING: form-bad-fields-array.pdf, object 16 0 at offset 3419: this widget annotation is not reachable from /AcroForm in the document catalog
@ -11,6 +10,7 @@ WARNING: form-bad-fields-array.pdf, object 32 0 at offset 5893: this widget anno
WARNING: form-bad-fields-array.pdf, object 33 0 at offset 6251: this widget annotation is not reachable from /AcroForm in the document catalog
WARNING: form-bad-fields-array.pdf, object 34 0 at offset 6607: this widget annotation is not reachable from /AcroForm in the document catalog
WARNING: form-bad-fields-array.pdf, object 10 0 at offset 2311: this widget annotation is not reachable from /AcroForm in the document catalog
iterating over form fields
Field: 4 0 R
Parent: none
Fully qualified name: Text Box 1

View File

@ -1,9 +1,9 @@
iterating over form fields
WARNING: form-errors.pdf, object 4 0 at offset 625: loop detected while traversing /AcroForm
WARNING: form-errors.pdf, object 5 0 at offset 993: encountered a direct object as a field or annotation while traversing /AcroForm; ignoring field or annotation
WARNING: form-errors.pdf, object 15 0 at offset 3452: encountered a non-dictionary as a field or annotation while traversing /AcroForm; ignoring field or annotation
WARNING: form-errors.pdf, object 16 0 at offset 3475: this widget annotation is not reachable from /AcroForm in the document catalog
WARNING: form-errors.pdf, object 32 0 at offset 5974: this widget annotation is not reachable from /AcroForm in the document catalog
iterating over form fields
Field: 4 0 R
Parent: none
Fully qualified name: Text Box 1

File diff suppressed because it is too large Load Diff