Commit cf0e34222bdd84e417880f7f70f6a173d005d526
1 parent
361b387b
Refactor `FormNode::generateTextAppearance`: instead of attaching a stream filte…
…r replace the appearance stream content with the generated appearance.
Showing
1 changed file
with
9 additions
and
9 deletions
libqpdf/QPDFFormFieldObjectHelper.cc
| @@ -2,6 +2,7 @@ | @@ -2,6 +2,7 @@ | ||
| 2 | 2 | ||
| 3 | #include <qpdf/AcroForm.hh> | 3 | #include <qpdf/AcroForm.hh> |
| 4 | 4 | ||
| 5 | +#include <qpdf/Pipeline_private.hh> | ||
| 5 | #include <qpdf/Pl_QPDFTokenizer.hh> | 6 | #include <qpdf/Pl_QPDFTokenizer.hh> |
| 6 | #include <qpdf/QIntC.hh> | 7 | #include <qpdf/QIntC.hh> |
| 7 | #include <qpdf/QPDFAcroFormDocumentHelper.hh> | 8 | #include <qpdf/QPDFAcroFormDocumentHelper.hh> |
| @@ -912,13 +913,6 @@ FormNode::generateTextAppearance(QPDFAnnotationObjectHelper& aoh) | @@ -912,13 +913,6 @@ FormNode::generateTextAppearance(QPDFAnnotationObjectHelper& aoh) | ||
| 912 | aoh.replace("/AP", Dictionary({{"/N", AS}})); | 913 | aoh.replace("/AP", Dictionary({{"/N", AS}})); |
| 913 | } | 914 | } |
| 914 | } | 915 | } |
| 915 | - if (!AS) { | ||
| 916 | - // This could only have happened if aoh.getAppearanceStream("/N") did not return a stream. | ||
| 917 | - // The only way creation of a new AS could have failed is if getOwningQPDF returned a | ||
| 918 | - // nullptr, but this would throw a runtime error in newStream. So this should be impossible | ||
| 919 | - aoh.warn("unable to get normal appearance stream for update"); | ||
| 920 | - return; | ||
| 921 | - } | ||
| 922 | 916 | ||
| 923 | if (AS.obj_sp().use_count() > 3) { | 917 | if (AS.obj_sp().use_count() > 3) { |
| 924 | // The following check ensures that we only update the appearance stream if it is not | 918 | // The following check ensures that we only update the appearance stream if it is not |
| @@ -988,6 +982,12 @@ FormNode::generateTextAppearance(QPDFAnnotationObjectHelper& aoh) | @@ -988,6 +982,12 @@ FormNode::generateTextAppearance(QPDFAnnotationObjectHelper& aoh) | ||
| 988 | for (size_t i = 0; i < opt.size(); ++i) { | 982 | for (size_t i = 0; i < opt.size(); ++i) { |
| 989 | opt.at(i) = (*encoder)(opt.at(i), '?'); | 983 | opt.at(i) = (*encoder)(opt.at(i), '?'); |
| 990 | } | 984 | } |
| 991 | - AS.addTokenFilter( | ||
| 992 | - std::shared_ptr<QPDFObjectHandle::TokenFilter>(new ValueSetter(DA, V, opt, tf, bbox))); | 985 | + |
| 986 | + std::string result; | ||
| 987 | + pl::String pl(result); | ||
| 988 | + ValueSetter vs(DA, V, opt, tf, bbox); | ||
| 989 | + Pl_QPDFTokenizer vs_tok("", &vs, &pl); | ||
| 990 | + vs_tok.writeString(AS.getStreamData(qpdf_dl_all)); | ||
| 991 | + vs_tok.finish(); | ||
| 992 | + AS.replaceStreamData(std::move(result), Null::temp(), Null::temp()); | ||
| 993 | } | 993 | } |