Commit 2ac099bd39d135566764029377ee8be137ab6c16
1 parent
66e41e3e
Refactor `AcroForm::traverseField` to improve field handling logic: streamline c…
…hecks, replace manual key access with `FormNode` methods, and enhance maintainability.
Showing
1 changed file
with
7 additions
and
4 deletions
libqpdf/QPDFAcroFormDocumentHelper.cc
| ... | ... | @@ -432,7 +432,11 @@ AcroForm::traverseField(QPDFObjectHandle field, QPDFObjectHandle const& parent, |
| 432 | 432 | annotation_to_field_[og] = QPDFFormFieldObjectHelper(our_field); |
| 433 | 433 | } |
| 434 | 434 | |
| 435 | - if (is_field && depth != 0 && field["/Parent"] != parent) { | |
| 435 | + if (!is_field) { | |
| 436 | + return true; | |
| 437 | + } | |
| 438 | + | |
| 439 | + if (depth != 0 && field["/Parent"] != parent) { | |
| 436 | 440 | for (auto const& kid: Array(field["/Parent"]["/Kids"])) { |
| 437 | 441 | if (kid == field) { |
| 438 | 442 | field.warn("while traversing /AcroForm found field with two parents"); |
| ... | ... | @@ -449,14 +453,13 @@ AcroForm::traverseField(QPDFObjectHandle field, QPDFObjectHandle const& parent, |
| 449 | 453 | field.replaceKey("/Parent", parent); |
| 450 | 454 | } |
| 451 | 455 | |
| 452 | - if (is_field && field.hasKey("/T")) { | |
| 453 | - QPDFFormFieldObjectHelper foh(field); | |
| 454 | - std::string name = foh.getFullyQualifiedName(); | |
| 456 | + if (node.T()) { | |
| 455 | 457 | auto old = fields_.find(og); |
| 456 | 458 | if (old != fields_.end() && !old->second.name.empty()) { |
| 457 | 459 | // We might be updating after a name change, so remove any old information |
| 458 | 460 | name_to_fields_[old->second.name].erase(og); |
| 459 | 461 | } |
| 462 | + std::string name = node.fully_qualified_name(); | |
| 460 | 463 | fields_[og].name = name; |
| 461 | 464 | name_to_fields_[name].insert(og); |
| 462 | 465 | } | ... | ... |