diff options
author | Jay Berkenbilt <ejb@ql.org> | 2019-01-02 03:27:18 +0100 |
---|---|---|
committer | Jay Berkenbilt <ejb@ql.org> | 2019-01-04 05:18:13 +0100 |
commit | e3144ac4177b7c38567f41a8e31a6c162d3b76f4 (patch) | |
tree | 94d2e557359b040cae83224a9c5e33f7cb46d7db /libqpdf | |
parent | 26393f51373d95bb2fe5a99d1de9d04d8d7eb920 (diff) | |
download | qpdf-e3144ac4177b7c38567f41a8e31a6c162d3b76f4.tar.zst |
Add form fields to json output
Also add some additional methods for detecting form field types to
assist in the json creation and for later use.
Diffstat (limited to 'libqpdf')
-rw-r--r-- | libqpdf/QPDFAnnotationObjectHelper.cc | 11 | ||||
-rw-r--r-- | libqpdf/QPDFFormFieldObjectHelper.cc | 64 |
2 files changed, 72 insertions, 3 deletions
diff --git a/libqpdf/QPDFAnnotationObjectHelper.cc b/libqpdf/QPDFAnnotationObjectHelper.cc index 3295fd3a..5e4be795 100644 --- a/libqpdf/QPDFAnnotationObjectHelper.cc +++ b/libqpdf/QPDFAnnotationObjectHelper.cc @@ -49,6 +49,13 @@ QPDFAnnotationObjectHelper::getAppearanceState() return ""; } +int +QPDFAnnotationObjectHelper::getFlags() +{ + QPDFObjectHandle flags_obj = this->oh.getKey("/F"); + return flags_obj.isInteger() ? flags_obj.getIntValue() : 0; +} + QPDFObjectHandle QPDFAnnotationObjectHelper::getAppearanceStream( std::string const& which, @@ -169,13 +176,11 @@ QPDFAnnotationObjectHelper::getPageContentForAppearance( // appearance matrix. QPDFObjectHandle rect_obj = this->oh.getKey("/Rect"); - QPDFObjectHandle flags_obj = this->oh.getKey("/F"); QPDFObjectHandle as = getAppearanceStream("/N").getDict(); QPDFObjectHandle bbox_obj = as.getKey("/BBox"); QPDFObjectHandle matrix_obj = as.getKey("/Matrix"); - int flags = flags_obj.isInteger() ? flags_obj.getIntValue() : 0; - + int flags = getFlags(); if (flags & forbidden_flags) { QTC::TC("qpdf", "QPDFAnnotationObjectHelper forbidden flags"); diff --git a/libqpdf/QPDFFormFieldObjectHelper.cc b/libqpdf/QPDFFormFieldObjectHelper.cc index 283b632d..1a04742a 100644 --- a/libqpdf/QPDFFormFieldObjectHelper.cc +++ b/libqpdf/QPDFFormFieldObjectHelper.cc @@ -190,6 +190,70 @@ QPDFFormFieldObjectHelper::getQuadding() return result; } +int +QPDFFormFieldObjectHelper::getFlags() +{ + QPDFObjectHandle f = getInheritableFieldValue("/Ff"); + return f.isInteger() ? f.getIntValue() : 0; +} + +bool +QPDFFormFieldObjectHelper::isText() +{ + return (getFieldType() == "/Tx"); +} + +bool +QPDFFormFieldObjectHelper::isCheckbox() +{ + return ((getFieldType() == "/Btn") && + ((getFlags() & (ff_btn_radio | ff_btn_pushbutton)) == 0)); +} + +bool +QPDFFormFieldObjectHelper::isRadioButton() +{ + return ((getFieldType() == "/Btn") && + ((getFlags() & ff_btn_radio) == ff_btn_radio)); +} + +bool +QPDFFormFieldObjectHelper::isPushbutton() +{ + return ((getFieldType() == "/Btn") && + ((getFlags() & ff_btn_pushbutton) == ff_btn_pushbutton)); +} + +bool +QPDFFormFieldObjectHelper::isChoice() +{ + return (getFieldType() == "/Ch"); +} + +std::vector<std::string> +QPDFFormFieldObjectHelper::getChoices() +{ + std::vector<std::string> result; + if (! isChoice()) + { + return result; + } + QPDFObjectHandle opt = getInheritableFieldValue("/Opt"); + if (opt.isArray()) + { + size_t n = opt.getArrayNItems(); + for (size_t i = 0; i < n; ++i) + { + QPDFObjectHandle item = opt.getArrayItem(i); + if (item.isString()) + { + result.push_back(item.getUTF8Value()); + } + } + } + return result; +} + void QPDFFormFieldObjectHelper::setFieldAttribute( std::string const& key, QPDFObjectHandle value) |