mirror of
https://github.com/qpdf/qpdf.git
synced 2025-01-31 02:48:31 +00:00
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.
This commit is contained in:
parent
26393f5137
commit
e3144ac417
@ -61,6 +61,11 @@ class QPDFAnnotationObjectHelper: public QPDFObjectHelper
|
||||
QPDF_DLL
|
||||
std::string getAppearanceState();
|
||||
|
||||
// Return flags from "/F". The value is a logical or of
|
||||
// pdf_annotation_flag_e as defined in qpdf/Constants.h.
|
||||
QPDF_DLL
|
||||
int getFlags();
|
||||
|
||||
// Return a specific stream. "which" may be one of "/N", "/R", or
|
||||
// "/D" to indicate the normal, rollover, or down appearance
|
||||
// stream. (Any value may be passed to "which"; if an appearance
|
||||
|
@ -29,6 +29,7 @@
|
||||
#include <qpdf/QPDFObjectHelper.hh>
|
||||
|
||||
#include <qpdf/DLL.h>
|
||||
#include <vector>
|
||||
|
||||
class QPDFFormFieldObjectHelper: public QPDFObjectHelper
|
||||
{
|
||||
@ -120,6 +121,38 @@ class QPDFFormFieldObjectHelper: public QPDFObjectHelper
|
||||
QPDF_DLL
|
||||
int getQuadding();
|
||||
|
||||
// Return field flags from /Ff. The value is a logical or of
|
||||
// pdf_form_field_flag_e as defined in qpdf/Constants.h
|
||||
QPDF_DLL
|
||||
int getFlags();
|
||||
|
||||
// Methods for testing for particular types of form fields
|
||||
|
||||
// Returns true if field is of type /Tx
|
||||
QPDF_DLL
|
||||
bool isText();
|
||||
// Returns true if field is of type /Btn and flags do not indicate
|
||||
// some other type of button.
|
||||
QPDF_DLL
|
||||
bool isCheckbox();
|
||||
// Returns true if field is a checkbox and is checked.
|
||||
QPDF_DLL
|
||||
bool isChecked();
|
||||
// Returns true if field is of type /Btn and flags indicate that
|
||||
// it is a radio button
|
||||
QPDF_DLL
|
||||
bool isRadioButton();
|
||||
// Returns true if field is of type /Btn and flags indicate that
|
||||
// it is a pushbutton
|
||||
QPDF_DLL
|
||||
bool isPushbutton();
|
||||
// Returns true if fields if of type /Ch
|
||||
QPDF_DLL
|
||||
bool isChoice();
|
||||
// Returns choices as UTF-8 strings
|
||||
QPDF_DLL
|
||||
std::vector<std::string> getChoices();
|
||||
|
||||
// Set an attribute to the given value
|
||||
QPDF_DLL
|
||||
void setFieldAttribute(std::string const& key, QPDFObjectHandle value);
|
||||
|
@ -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");
|
||||
|
@ -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)
|
||||
|
199
qpdf/qpdf.cc
199
qpdf/qpdf.cc
@ -18,6 +18,7 @@
|
||||
#include <qpdf/QPDFPageObjectHelper.hh>
|
||||
#include <qpdf/QPDFPageLabelDocumentHelper.hh>
|
||||
#include <qpdf/QPDFOutlineDocumentHelper.hh>
|
||||
#include <qpdf/QPDFAcroFormDocumentHelper.hh>
|
||||
#include <qpdf/QPDFExc.hh>
|
||||
|
||||
#include <qpdf/QPDFWriter.hh>
|
||||
@ -385,6 +386,95 @@ static JSON json_schema(std::set<std::string>* keys = 0)
|
||||
JSON::makeString("position of destination page in document"
|
||||
" numbered from 1; null if not known"));
|
||||
}
|
||||
if (all_keys || keys->count("acroform"))
|
||||
{
|
||||
JSON acroform = schema.addDictionaryMember(
|
||||
"acroform", JSON::makeDictionary());
|
||||
acroform.addDictionaryMember(
|
||||
"hasacroform",
|
||||
JSON::makeString("whether the document has interactive forms"));
|
||||
acroform.addDictionaryMember(
|
||||
"needappearances",
|
||||
JSON::makeString("whether the form fields' appearance"
|
||||
" streams need to be regenerated"));
|
||||
JSON fields = acroform.addDictionaryMember(
|
||||
"fields", JSON::makeArray()).
|
||||
addArrayElement(JSON::makeDictionary());
|
||||
fields.addDictionaryMember(
|
||||
"object",
|
||||
JSON::makeString("reference to this form field"));
|
||||
fields.addDictionaryMember(
|
||||
"parent",
|
||||
JSON::makeString("reference to this field's parent"));
|
||||
fields.addDictionaryMember(
|
||||
"pageposfrom1",
|
||||
JSON::makeString("position of containing page numbered from 1"));
|
||||
fields.addDictionaryMember(
|
||||
"fieldtype",
|
||||
JSON::makeString("field type"));
|
||||
fields.addDictionaryMember(
|
||||
"fieldflags",
|
||||
JSON::makeString(
|
||||
"form field flags from /Ff --"
|
||||
" see pdf_form_field_flag_e in qpdf/Constants.h"));
|
||||
fields.addDictionaryMember(
|
||||
"fullname",
|
||||
JSON::makeString("full name of field"));
|
||||
fields.addDictionaryMember(
|
||||
"partialname",
|
||||
JSON::makeString("partial name of field"));
|
||||
fields.addDictionaryMember(
|
||||
"alternativename",
|
||||
JSON::makeString(
|
||||
"alternative name of field --"
|
||||
" this is the one usually shown to users"));
|
||||
fields.addDictionaryMember(
|
||||
"mappingname",
|
||||
JSON::makeString("mapping name of field"));
|
||||
fields.addDictionaryMember(
|
||||
"value",
|
||||
JSON::makeString("value of field"));
|
||||
fields.addDictionaryMember(
|
||||
"defaultvalue",
|
||||
JSON::makeString("default value of field"));
|
||||
fields.addDictionaryMember(
|
||||
"quadding",
|
||||
JSON::makeString(
|
||||
"field quadding --"
|
||||
" number indicating left, center, or right"));
|
||||
fields.addDictionaryMember(
|
||||
"ischeckbox",
|
||||
JSON::makeString("whether field is a checkbox"));
|
||||
fields.addDictionaryMember(
|
||||
"isradiobutton",
|
||||
JSON::makeString("whether field is a radiobutton --"
|
||||
" buttons in a single group share a parent"));
|
||||
fields.addDictionaryMember(
|
||||
"ischoice",
|
||||
JSON::makeString("whether field is a list, combo, or dropdown"));
|
||||
fields.addDictionaryMember(
|
||||
"istext",
|
||||
JSON::makeString("whether field is a text field"));
|
||||
JSON j_choices = fields.addDictionaryMember(
|
||||
"choices",
|
||||
JSON::makeString("for choices fields, the list of"
|
||||
" choices presented to the user"));
|
||||
JSON annotation = fields.addDictionaryMember(
|
||||
"annotation", JSON::makeDictionary());
|
||||
annotation.addDictionaryMember(
|
||||
"object",
|
||||
JSON::makeString("reference to the annotation object"));
|
||||
annotation.addDictionaryMember(
|
||||
"appearancestate",
|
||||
JSON::makeString("appearance state --"
|
||||
" can be used to determine value for"
|
||||
" checkboxes and radio buttons"));
|
||||
annotation.addDictionaryMember(
|
||||
"annotationflags",
|
||||
JSON::makeString(
|
||||
"annotation flags from /F --"
|
||||
" see pdf_annotation_flag_e in qpdf/Constants.h"));
|
||||
}
|
||||
return schema;
|
||||
}
|
||||
|
||||
@ -710,7 +800,7 @@ ArgParser::initOptionTable()
|
||||
// The list of selectable top-level keys id duplicated in three
|
||||
// places: json_schema, do_json, and initOptionTable.
|
||||
char const* json_key_choices[] = {
|
||||
"objects", "pages", "pagelabels", "outlines", 0};
|
||||
"objects", "pages", "pagelabels", "outlines", "acroform", 0};
|
||||
(*t)["json-key"] = oe_requiredChoices(
|
||||
&ArgParser::argJsonKey, json_key_choices);
|
||||
(*t)["json-object"] = oe_requiredParameter(
|
||||
@ -3022,6 +3112,109 @@ static void do_json_outlines(QPDF& pdf, Options& o, JSON& j)
|
||||
add_outlines_to_json(odh.getTopLevelOutlines(), j_outlines, page_numbers);
|
||||
}
|
||||
|
||||
static void do_json_acroform(QPDF& pdf, Options& o, JSON& j)
|
||||
{
|
||||
JSON j_acroform = j.addDictionaryMember(
|
||||
"acroform", JSON::makeDictionary());
|
||||
QPDFAcroFormDocumentHelper afdh(pdf);
|
||||
j_acroform.addDictionaryMember(
|
||||
"hasacroform",
|
||||
JSON::makeBool(afdh.hasAcroForm()));
|
||||
j_acroform.addDictionaryMember(
|
||||
"needappearances",
|
||||
JSON::makeBool(afdh.getNeedAppearances()));
|
||||
JSON j_fields = j_acroform.addDictionaryMember(
|
||||
"fields", JSON::makeArray());
|
||||
QPDFPageDocumentHelper pdh(pdf);
|
||||
std::vector<QPDFPageObjectHelper> pages = pdh.getAllPages();
|
||||
int pagepos1 = 0;
|
||||
for (std::vector<QPDFPageObjectHelper>::iterator page_iter =
|
||||
pages.begin();
|
||||
page_iter != pages.end(); ++page_iter)
|
||||
{
|
||||
++pagepos1;
|
||||
std::vector<QPDFAnnotationObjectHelper> annotations =
|
||||
afdh.getWidgetAnnotationsForPage(*page_iter);
|
||||
for (std::vector<QPDFAnnotationObjectHelper>::iterator annot_iter =
|
||||
annotations.begin();
|
||||
annot_iter != annotations.end(); ++annot_iter)
|
||||
{
|
||||
QPDFAnnotationObjectHelper& aoh = *annot_iter;
|
||||
QPDFFormFieldObjectHelper ffh =
|
||||
afdh.getFieldForAnnotation(aoh);
|
||||
JSON j_field = j_fields.addArrayElement(
|
||||
JSON::makeDictionary());
|
||||
j_field.addDictionaryMember(
|
||||
"object",
|
||||
ffh.getObjectHandle().getJSON());
|
||||
j_field.addDictionaryMember(
|
||||
"parent",
|
||||
ffh.getObjectHandle().getKey("/Parent").getJSON());
|
||||
j_field.addDictionaryMember(
|
||||
"pageposfrom1",
|
||||
JSON::makeInt(pagepos1));
|
||||
j_field.addDictionaryMember(
|
||||
"fieldtype",
|
||||
JSON::makeString(ffh.getFieldType()));
|
||||
j_field.addDictionaryMember(
|
||||
"fieldflags",
|
||||
JSON::makeInt(ffh.getFlags()));
|
||||
j_field.addDictionaryMember(
|
||||
"fullname",
|
||||
JSON::makeString(ffh.getFullyQualifiedName()));
|
||||
j_field.addDictionaryMember(
|
||||
"partialname",
|
||||
JSON::makeString(ffh.getPartialName()));
|
||||
j_field.addDictionaryMember(
|
||||
"alternativename",
|
||||
JSON::makeString(ffh.getAlternativeName()));
|
||||
j_field.addDictionaryMember(
|
||||
"mappingname",
|
||||
JSON::makeString(ffh.getMappingName()));
|
||||
j_field.addDictionaryMember(
|
||||
"value",
|
||||
ffh.getValue().getJSON());
|
||||
j_field.addDictionaryMember(
|
||||
"defaultvalue",
|
||||
ffh.getDefaultValue().getJSON());
|
||||
j_field.addDictionaryMember(
|
||||
"quadding",
|
||||
JSON::makeInt(ffh.getQuadding()));
|
||||
j_field.addDictionaryMember(
|
||||
"ischeckbox",
|
||||
JSON::makeBool(ffh.isCheckbox()));
|
||||
j_field.addDictionaryMember(
|
||||
"isradiobutton",
|
||||
JSON::makeBool(ffh.isRadioButton()));
|
||||
j_field.addDictionaryMember(
|
||||
"ischoice",
|
||||
JSON::makeBool(ffh.isChoice()));
|
||||
j_field.addDictionaryMember(
|
||||
"istext",
|
||||
JSON::makeBool(ffh.isText()));
|
||||
JSON j_choices = j_field.addDictionaryMember(
|
||||
"choices", JSON::makeArray());
|
||||
std::vector<std::string> choices = ffh.getChoices();
|
||||
for (std::vector<std::string>::iterator iter = choices.begin();
|
||||
iter != choices.end(); ++iter)
|
||||
{
|
||||
j_choices.addArrayElement(JSON::makeString(*iter));
|
||||
}
|
||||
JSON j_annot = j_field.addDictionaryMember(
|
||||
"annotation", JSON::makeDictionary());
|
||||
j_annot.addDictionaryMember(
|
||||
"object",
|
||||
aoh.getObjectHandle().getJSON());
|
||||
j_annot.addDictionaryMember(
|
||||
"appearancestate",
|
||||
JSON::makeString(aoh.getAppearanceState()));
|
||||
j_annot.addDictionaryMember(
|
||||
"annotationflags",
|
||||
JSON::makeInt(aoh.getFlags()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void do_json(QPDF& pdf, Options& o)
|
||||
{
|
||||
JSON j = JSON::makeDictionary();
|
||||
@ -3070,6 +3263,10 @@ static void do_json(QPDF& pdf, Options& o)
|
||||
{
|
||||
do_json_outlines(pdf, o, j);
|
||||
}
|
||||
if (all_keys || o.json_keys.count("acroform"))
|
||||
{
|
||||
do_json_acroform(pdf, o, j);
|
||||
}
|
||||
|
||||
// Check against schema
|
||||
|
||||
|
@ -195,7 +195,9 @@ $n_tests += scalar(@form_tests) + 2;
|
||||
# modifying the resulting PDF in various ways. That file would be good
|
||||
# starting point for generation of more complex forms should that be
|
||||
# required in the future. The file storage/form.pdf is a direct export
|
||||
# from LibreOffice with no modifications.
|
||||
# from LibreOffice with no modifications. The files
|
||||
# storage/field-types.odt and storage/field-types.pdf are the basis of
|
||||
# field-types.pdf used elsewhere in the test suite.
|
||||
|
||||
foreach my $f (@form_tests)
|
||||
{
|
||||
@ -356,6 +358,7 @@ my @json_files = (
|
||||
['page-labels-and-outlines', []],
|
||||
['page-labels-num-tree', []],
|
||||
['image-streams', []],
|
||||
['field-types', []],
|
||||
['image-streams', ['--decode-level=all']],
|
||||
['image-streams', ['--decode-level=specialized']],
|
||||
['page-labels-and-outlines', ['--json-key=objects']],
|
||||
@ -368,6 +371,8 @@ my @json_files = (
|
||||
['--json-key=objects', '--json-object=trailer']],
|
||||
['page-labels-and-outlines',
|
||||
['--json-key=objects', '--json-object=trailer', '--json-object=2 0 R']],
|
||||
['field-types', ['--json-key=acroform']],
|
||||
['need-appearances', ['--json-key=acroform']],
|
||||
);
|
||||
$n_tests += scalar(@json_files);
|
||||
foreach my $d (@json_files)
|
||||
|
3696
qpdf/qtest/qpdf/field-types.pdf
Normal file
3696
qpdf/qtest/qpdf/field-types.pdf
Normal file
File diff suppressed because it is too large
Load Diff
392
qpdf/qtest/qpdf/json-field-types-acroform.out
Normal file
392
qpdf/qtest/qpdf/json-field-types-acroform.out
Normal file
@ -0,0 +1,392 @@
|
||||
{
|
||||
"acroform": {
|
||||
"fields": [
|
||||
{
|
||||
"alternativename": "text",
|
||||
"annotation": {
|
||||
"annotationflags": 4,
|
||||
"appearancestate": "",
|
||||
"object": "4 0 R"
|
||||
},
|
||||
"choices": [],
|
||||
"defaultvalue": "",
|
||||
"fieldflags": 0,
|
||||
"fieldtype": "/Tx",
|
||||
"fullname": "text",
|
||||
"ischeckbox": false,
|
||||
"ischoice": false,
|
||||
"isradiobutton": false,
|
||||
"istext": true,
|
||||
"mappingname": "text",
|
||||
"object": "4 0 R",
|
||||
"pageposfrom1": 1,
|
||||
"parent": null,
|
||||
"partialname": "text",
|
||||
"quadding": 0,
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"alternativename": "r1",
|
||||
"annotation": {
|
||||
"annotationflags": 4,
|
||||
"appearancestate": "/1",
|
||||
"object": "21 0 R"
|
||||
},
|
||||
"choices": [],
|
||||
"defaultvalue": "/1",
|
||||
"fieldflags": 49152,
|
||||
"fieldtype": "/Btn",
|
||||
"fullname": "r1",
|
||||
"ischeckbox": false,
|
||||
"ischoice": false,
|
||||
"isradiobutton": true,
|
||||
"istext": false,
|
||||
"mappingname": "r1",
|
||||
"object": "21 0 R",
|
||||
"pageposfrom1": 1,
|
||||
"parent": "5 0 R",
|
||||
"partialname": "",
|
||||
"quadding": 0,
|
||||
"value": "/1"
|
||||
},
|
||||
{
|
||||
"alternativename": "r1",
|
||||
"annotation": {
|
||||
"annotationflags": 4,
|
||||
"appearancestate": "/Off",
|
||||
"object": "22 0 R"
|
||||
},
|
||||
"choices": [],
|
||||
"defaultvalue": "/1",
|
||||
"fieldflags": 49152,
|
||||
"fieldtype": "/Btn",
|
||||
"fullname": "r1",
|
||||
"ischeckbox": false,
|
||||
"ischoice": false,
|
||||
"isradiobutton": true,
|
||||
"istext": false,
|
||||
"mappingname": "r1",
|
||||
"object": "22 0 R",
|
||||
"pageposfrom1": 1,
|
||||
"parent": "5 0 R",
|
||||
"partialname": "",
|
||||
"quadding": 0,
|
||||
"value": "/1"
|
||||
},
|
||||
{
|
||||
"alternativename": "r1",
|
||||
"annotation": {
|
||||
"annotationflags": 4,
|
||||
"appearancestate": "/Off",
|
||||
"object": "23 0 R"
|
||||
},
|
||||
"choices": [],
|
||||
"defaultvalue": "/1",
|
||||
"fieldflags": 49152,
|
||||
"fieldtype": "/Btn",
|
||||
"fullname": "r1",
|
||||
"ischeckbox": false,
|
||||
"ischoice": false,
|
||||
"isradiobutton": true,
|
||||
"istext": false,
|
||||
"mappingname": "r1",
|
||||
"object": "23 0 R",
|
||||
"pageposfrom1": 1,
|
||||
"parent": "5 0 R",
|
||||
"partialname": "",
|
||||
"quadding": 0,
|
||||
"value": "/1"
|
||||
},
|
||||
{
|
||||
"alternativename": "checkbox1",
|
||||
"annotation": {
|
||||
"annotationflags": 4,
|
||||
"appearancestate": "/Off",
|
||||
"object": "6 0 R"
|
||||
},
|
||||
"choices": [],
|
||||
"defaultvalue": "/Off",
|
||||
"fieldflags": 0,
|
||||
"fieldtype": "/Btn",
|
||||
"fullname": "checkbox1",
|
||||
"ischeckbox": true,
|
||||
"ischoice": false,
|
||||
"isradiobutton": false,
|
||||
"istext": false,
|
||||
"mappingname": "checkbox1",
|
||||
"object": "6 0 R",
|
||||
"pageposfrom1": 1,
|
||||
"parent": null,
|
||||
"partialname": "checkbox1",
|
||||
"quadding": 0,
|
||||
"value": "/Off"
|
||||
},
|
||||
{
|
||||
"alternativename": "checkbox2",
|
||||
"annotation": {
|
||||
"annotationflags": 4,
|
||||
"appearancestate": "/Yes",
|
||||
"object": "7 0 R"
|
||||
},
|
||||
"choices": [],
|
||||
"defaultvalue": "/Yes",
|
||||
"fieldflags": 0,
|
||||
"fieldtype": "/Btn",
|
||||
"fullname": "checkbox2",
|
||||
"ischeckbox": true,
|
||||
"ischoice": false,
|
||||
"isradiobutton": false,
|
||||
"istext": false,
|
||||
"mappingname": "checkbox2",
|
||||
"object": "7 0 R",
|
||||
"pageposfrom1": 1,
|
||||
"parent": null,
|
||||
"partialname": "checkbox2",
|
||||
"quadding": 0,
|
||||
"value": "/Yes"
|
||||
},
|
||||
{
|
||||
"alternativename": "checkbox3",
|
||||
"annotation": {
|
||||
"annotationflags": 4,
|
||||
"appearancestate": "/Off",
|
||||
"object": "8 0 R"
|
||||
},
|
||||
"choices": [],
|
||||
"defaultvalue": "/Off",
|
||||
"fieldflags": 0,
|
||||
"fieldtype": "/Btn",
|
||||
"fullname": "checkbox3",
|
||||
"ischeckbox": true,
|
||||
"ischoice": false,
|
||||
"isradiobutton": false,
|
||||
"istext": false,
|
||||
"mappingname": "checkbox3",
|
||||
"object": "8 0 R",
|
||||
"pageposfrom1": 1,
|
||||
"parent": null,
|
||||
"partialname": "checkbox3",
|
||||
"quadding": 0,
|
||||
"value": "/Off"
|
||||
},
|
||||
{
|
||||
"alternativename": "r2",
|
||||
"annotation": {
|
||||
"annotationflags": 4,
|
||||
"appearancestate": "/Off",
|
||||
"object": "37 0 R"
|
||||
},
|
||||
"choices": [],
|
||||
"defaultvalue": "/2",
|
||||
"fieldflags": 49152,
|
||||
"fieldtype": "/Btn",
|
||||
"fullname": "r2",
|
||||
"ischeckbox": false,
|
||||
"ischoice": false,
|
||||
"isradiobutton": true,
|
||||
"istext": false,
|
||||
"mappingname": "r2",
|
||||
"object": "37 0 R",
|
||||
"pageposfrom1": 1,
|
||||
"parent": "9 0 R",
|
||||
"partialname": "",
|
||||
"quadding": 0,
|
||||
"value": "/2"
|
||||
},
|
||||
{
|
||||
"alternativename": "r2",
|
||||
"annotation": {
|
||||
"annotationflags": 4,
|
||||
"appearancestate": "/2",
|
||||
"object": "38 0 R"
|
||||
},
|
||||
"choices": [],
|
||||
"defaultvalue": "/2",
|
||||
"fieldflags": 49152,
|
||||
"fieldtype": "/Btn",
|
||||
"fullname": "r2",
|
||||
"ischeckbox": false,
|
||||
"ischoice": false,
|
||||
"isradiobutton": true,
|
||||
"istext": false,
|
||||
"mappingname": "r2",
|
||||
"object": "38 0 R",
|
||||
"pageposfrom1": 1,
|
||||
"parent": "9 0 R",
|
||||
"partialname": "",
|
||||
"quadding": 0,
|
||||
"value": "/2"
|
||||
},
|
||||
{
|
||||
"alternativename": "r2",
|
||||
"annotation": {
|
||||
"annotationflags": 4,
|
||||
"appearancestate": "/Off",
|
||||
"object": "39 0 R"
|
||||
},
|
||||
"choices": [],
|
||||
"defaultvalue": "/2",
|
||||
"fieldflags": 49152,
|
||||
"fieldtype": "/Btn",
|
||||
"fullname": "r2",
|
||||
"ischeckbox": false,
|
||||
"ischoice": false,
|
||||
"isradiobutton": true,
|
||||
"istext": false,
|
||||
"mappingname": "r2",
|
||||
"object": "39 0 R",
|
||||
"pageposfrom1": 1,
|
||||
"parent": "9 0 R",
|
||||
"partialname": "",
|
||||
"quadding": 0,
|
||||
"value": "/2"
|
||||
},
|
||||
{
|
||||
"alternativename": "text2",
|
||||
"annotation": {
|
||||
"annotationflags": 4,
|
||||
"appearancestate": "",
|
||||
"object": "10 0 R"
|
||||
},
|
||||
"choices": [],
|
||||
"defaultvalue": "salad πʬ",
|
||||
"fieldflags": 0,
|
||||
"fieldtype": "/Tx",
|
||||
"fullname": "text2",
|
||||
"ischeckbox": false,
|
||||
"ischoice": false,
|
||||
"isradiobutton": false,
|
||||
"istext": true,
|
||||
"mappingname": "text2",
|
||||
"object": "10 0 R",
|
||||
"pageposfrom1": 1,
|
||||
"parent": null,
|
||||
"partialname": "text2",
|
||||
"quadding": 0,
|
||||
"value": "salad πʬ"
|
||||
},
|
||||
{
|
||||
"alternativename": "combolist1",
|
||||
"annotation": {
|
||||
"annotationflags": 4,
|
||||
"appearancestate": "",
|
||||
"object": "13 0 R"
|
||||
},
|
||||
"choices": [
|
||||
"one",
|
||||
"two",
|
||||
"pi",
|
||||
"four"
|
||||
],
|
||||
"defaultvalue": "",
|
||||
"fieldflags": 393216,
|
||||
"fieldtype": "/Ch",
|
||||
"fullname": "combolist1",
|
||||
"ischeckbox": false,
|
||||
"ischoice": true,
|
||||
"isradiobutton": false,
|
||||
"istext": false,
|
||||
"mappingname": "combolist1",
|
||||
"object": "13 0 R",
|
||||
"pageposfrom1": 1,
|
||||
"parent": null,
|
||||
"partialname": "combolist1",
|
||||
"quadding": 0,
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"alternativename": "list1",
|
||||
"annotation": {
|
||||
"annotationflags": 4,
|
||||
"appearancestate": "",
|
||||
"object": "11 0 R"
|
||||
},
|
||||
"choices": [
|
||||
"five",
|
||||
"six",
|
||||
"seven",
|
||||
"eight"
|
||||
],
|
||||
"defaultvalue": "",
|
||||
"fieldflags": 0,
|
||||
"fieldtype": "/Ch",
|
||||
"fullname": "list1",
|
||||
"ischeckbox": false,
|
||||
"ischoice": true,
|
||||
"isradiobutton": false,
|
||||
"istext": false,
|
||||
"mappingname": "list1",
|
||||
"object": "11 0 R",
|
||||
"pageposfrom1": 1,
|
||||
"parent": null,
|
||||
"partialname": "list1",
|
||||
"quadding": 0,
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"alternativename": "drop1",
|
||||
"annotation": {
|
||||
"annotationflags": 4,
|
||||
"appearancestate": "",
|
||||
"object": "12 0 R"
|
||||
},
|
||||
"choices": [
|
||||
"nine",
|
||||
"ten",
|
||||
"elephant",
|
||||
"twelve"
|
||||
],
|
||||
"defaultvalue": "",
|
||||
"fieldflags": 131072,
|
||||
"fieldtype": "/Ch",
|
||||
"fullname": "drop1",
|
||||
"ischeckbox": false,
|
||||
"ischoice": true,
|
||||
"isradiobutton": false,
|
||||
"istext": false,
|
||||
"mappingname": "drop1",
|
||||
"object": "12 0 R",
|
||||
"pageposfrom1": 1,
|
||||
"parent": null,
|
||||
"partialname": "drop1",
|
||||
"quadding": 0,
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"alternativename": "combodrop1",
|
||||
"annotation": {
|
||||
"annotationflags": 4,
|
||||
"appearancestate": "",
|
||||
"object": "14 0 R"
|
||||
},
|
||||
"choices": [
|
||||
"alpha",
|
||||
"beta",
|
||||
"gamma",
|
||||
"delta"
|
||||
],
|
||||
"defaultvalue": "",
|
||||
"fieldflags": 393216,
|
||||
"fieldtype": "/Ch",
|
||||
"fullname": "combodrop1",
|
||||
"ischeckbox": false,
|
||||
"ischoice": true,
|
||||
"isradiobutton": false,
|
||||
"istext": false,
|
||||
"mappingname": "combodrop1",
|
||||
"object": "14 0 R",
|
||||
"pageposfrom1": 1,
|
||||
"parent": null,
|
||||
"partialname": "combodrop1",
|
||||
"quadding": 0,
|
||||
"value": ""
|
||||
}
|
||||
],
|
||||
"hasacroform": true,
|
||||
"needappearances": true
|
||||
},
|
||||
"parameters": {
|
||||
"decodelevel": "generalized"
|
||||
},
|
||||
"version": 1
|
||||
}
|
2694
qpdf/qtest/qpdf/json-field-types.out
Normal file
2694
qpdf/qtest/qpdf/json-field-types.out
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,4 +1,9 @@
|
||||
{
|
||||
"acroform": {
|
||||
"fields": [],
|
||||
"hasacroform": false,
|
||||
"needappearances": false
|
||||
},
|
||||
"objects": {
|
||||
"1 0 R": {
|
||||
"/Pages": "2 0 R",
|
||||
|
@ -1,4 +1,9 @@
|
||||
{
|
||||
"acroform": {
|
||||
"fields": [],
|
||||
"hasacroform": false,
|
||||
"needappearances": false
|
||||
},
|
||||
"objects": {
|
||||
"1 0 R": {
|
||||
"/Pages": "2 0 R",
|
||||
|
@ -1,4 +1,9 @@
|
||||
{
|
||||
"acroform": {
|
||||
"fields": [],
|
||||
"hasacroform": false,
|
||||
"needappearances": false
|
||||
},
|
||||
"objects": {
|
||||
"1 0 R": {
|
||||
"/Pages": "2 0 R",
|
||||
|
463
qpdf/qtest/qpdf/json-need-appearances-acroform.out
Normal file
463
qpdf/qtest/qpdf/json-need-appearances-acroform.out
Normal file
@ -0,0 +1,463 @@
|
||||
{
|
||||
"acroform": {
|
||||
"fields": [
|
||||
{
|
||||
"alternativename": "First name",
|
||||
"annotation": {
|
||||
"annotationflags": 4,
|
||||
"appearancestate": "",
|
||||
"object": "5 0 R"
|
||||
},
|
||||
"choices": [],
|
||||
"defaultvalue": "",
|
||||
"fieldflags": 0,
|
||||
"fieldtype": "/Tx",
|
||||
"fullname": "Given Name Text Box",
|
||||
"ischeckbox": false,
|
||||
"ischoice": false,
|
||||
"isradiobutton": false,
|
||||
"istext": true,
|
||||
"mappingname": "First name",
|
||||
"object": "5 0 R",
|
||||
"pageposfrom1": 1,
|
||||
"parent": null,
|
||||
"partialname": "Given Name Text Box",
|
||||
"quadding": 0,
|
||||
"value": "ABC mod"
|
||||
},
|
||||
{
|
||||
"alternativename": "Last name",
|
||||
"annotation": {
|
||||
"annotationflags": 4,
|
||||
"appearancestate": "",
|
||||
"object": "6 0 R"
|
||||
},
|
||||
"choices": [],
|
||||
"defaultvalue": "",
|
||||
"fieldflags": 0,
|
||||
"fieldtype": "/Tx",
|
||||
"fullname": "Family Name Text Box",
|
||||
"ischeckbox": false,
|
||||
"ischoice": false,
|
||||
"isradiobutton": false,
|
||||
"istext": true,
|
||||
"mappingname": "Last name",
|
||||
"object": "6 0 R",
|
||||
"pageposfrom1": 1,
|
||||
"parent": null,
|
||||
"partialname": "Family Name Text Box",
|
||||
"quadding": 0,
|
||||
"value": "DEF"
|
||||
},
|
||||
{
|
||||
"alternativename": "Address 1 Text Box",
|
||||
"annotation": {
|
||||
"annotationflags": 4,
|
||||
"appearancestate": "",
|
||||
"object": "7 0 R"
|
||||
},
|
||||
"choices": [],
|
||||
"defaultvalue": "",
|
||||
"fieldflags": 0,
|
||||
"fieldtype": "/Tx",
|
||||
"fullname": "Address 1 Text Box",
|
||||
"ischeckbox": false,
|
||||
"ischoice": false,
|
||||
"isradiobutton": false,
|
||||
"istext": true,
|
||||
"mappingname": "Address 1 Text Box",
|
||||
"object": "7 0 R",
|
||||
"pageposfrom1": 1,
|
||||
"parent": null,
|
||||
"partialname": "Address 1 Text Box",
|
||||
"quadding": 0,
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"alternativename": "House and floor",
|
||||
"annotation": {
|
||||
"annotationflags": 4,
|
||||
"appearancestate": "",
|
||||
"object": "8 0 R"
|
||||
},
|
||||
"choices": [],
|
||||
"defaultvalue": "",
|
||||
"fieldflags": 0,
|
||||
"fieldtype": "/Tx",
|
||||
"fullname": "House nr Text Box",
|
||||
"ischeckbox": false,
|
||||
"ischoice": false,
|
||||
"isradiobutton": false,
|
||||
"istext": true,
|
||||
"mappingname": "House and floor",
|
||||
"object": "8 0 R",
|
||||
"pageposfrom1": 1,
|
||||
"parent": null,
|
||||
"partialname": "House nr Text Box",
|
||||
"quadding": 0,
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"alternativename": "Address 2 Text Box",
|
||||
"annotation": {
|
||||
"annotationflags": 4,
|
||||
"appearancestate": "",
|
||||
"object": "9 0 R"
|
||||
},
|
||||
"choices": [],
|
||||
"defaultvalue": "",
|
||||
"fieldflags": 0,
|
||||
"fieldtype": "/Tx",
|
||||
"fullname": "Address 2 Text Box",
|
||||
"ischeckbox": false,
|
||||
"ischoice": false,
|
||||
"isradiobutton": false,
|
||||
"istext": true,
|
||||
"mappingname": "Address 2 Text Box",
|
||||
"object": "9 0 R",
|
||||
"pageposfrom1": 1,
|
||||
"parent": null,
|
||||
"partialname": "Address 2 Text Box",
|
||||
"quadding": 0,
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"alternativename": "Postcode Text Box",
|
||||
"annotation": {
|
||||
"annotationflags": 4,
|
||||
"appearancestate": "",
|
||||
"object": "10 0 R"
|
||||
},
|
||||
"choices": [],
|
||||
"defaultvalue": "",
|
||||
"fieldflags": 0,
|
||||
"fieldtype": "/Tx",
|
||||
"fullname": "Postcode Text Box",
|
||||
"ischeckbox": false,
|
||||
"ischoice": false,
|
||||
"isradiobutton": false,
|
||||
"istext": true,
|
||||
"mappingname": "Postcode Text Box",
|
||||
"object": "10 0 R",
|
||||
"pageposfrom1": 1,
|
||||
"parent": null,
|
||||
"partialname": "Postcode Text Box",
|
||||
"quadding": 0,
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"alternativename": "City Text Box",
|
||||
"annotation": {
|
||||
"annotationflags": 4,
|
||||
"appearancestate": "",
|
||||
"object": "11 0 R"
|
||||
},
|
||||
"choices": [],
|
||||
"defaultvalue": "",
|
||||
"fieldflags": 0,
|
||||
"fieldtype": "/Tx",
|
||||
"fullname": "City Text Box",
|
||||
"ischeckbox": false,
|
||||
"ischoice": false,
|
||||
"isradiobutton": false,
|
||||
"istext": true,
|
||||
"mappingname": "City Text Box",
|
||||
"object": "11 0 R",
|
||||
"pageposfrom1": 1,
|
||||
"parent": null,
|
||||
"partialname": "City Text Box",
|
||||
"quadding": 0,
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"alternativename": "Use selection or write country name",
|
||||
"annotation": {
|
||||
"annotationflags": 4,
|
||||
"appearancestate": "",
|
||||
"object": "12 0 R"
|
||||
},
|
||||
"choices": [
|
||||
"Austria",
|
||||
"Belgium",
|
||||
"Britain",
|
||||
"Bulgaria",
|
||||
"Croatia",
|
||||
"Cyprus",
|
||||
"Czech-Republic",
|
||||
"Denmark",
|
||||
"Estonia",
|
||||
"Finland",
|
||||
"France",
|
||||
"Germany",
|
||||
"Greece",
|
||||
"Hungary",
|
||||
"Ireland",
|
||||
"Italy",
|
||||
"Latvia",
|
||||
"Lithuania",
|
||||
"Luxembourg",
|
||||
"Malta",
|
||||
"Netherlands",
|
||||
"Poland",
|
||||
"Portugal",
|
||||
"Romania",
|
||||
"Slovakia",
|
||||
"Slovenia",
|
||||
"Spain",
|
||||
"Sweden"
|
||||
],
|
||||
"defaultvalue": "",
|
||||
"fieldflags": 393216,
|
||||
"fieldtype": "/Ch",
|
||||
"fullname": "Country Combo Box",
|
||||
"ischeckbox": false,
|
||||
"ischoice": true,
|
||||
"isradiobutton": false,
|
||||
"istext": false,
|
||||
"mappingname": "Use selection or write country name",
|
||||
"object": "12 0 R",
|
||||
"pageposfrom1": 1,
|
||||
"parent": null,
|
||||
"partialname": "Country Combo Box",
|
||||
"quadding": 0,
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"alternativename": "Select from list",
|
||||
"annotation": {
|
||||
"annotationflags": 4,
|
||||
"appearancestate": "",
|
||||
"object": "13 0 R"
|
||||
},
|
||||
"choices": [
|
||||
"Man",
|
||||
"Woman"
|
||||
],
|
||||
"defaultvalue": "Man",
|
||||
"fieldflags": 131072,
|
||||
"fieldtype": "/Ch",
|
||||
"fullname": "Gender List Box",
|
||||
"ischeckbox": false,
|
||||
"ischoice": true,
|
||||
"isradiobutton": false,
|
||||
"istext": false,
|
||||
"mappingname": "Select from list",
|
||||
"object": "13 0 R",
|
||||
"pageposfrom1": 1,
|
||||
"parent": null,
|
||||
"partialname": "Gender List Box",
|
||||
"quadding": 0,
|
||||
"value": "Man"
|
||||
},
|
||||
{
|
||||
"alternativename": "Value from 40 to 250 cm",
|
||||
"annotation": {
|
||||
"annotationflags": 4,
|
||||
"appearancestate": "",
|
||||
"object": "14 0 R"
|
||||
},
|
||||
"choices": [],
|
||||
"defaultvalue": "150",
|
||||
"fieldflags": 0,
|
||||
"fieldtype": "/Tx",
|
||||
"fullname": "Height Formatted Field",
|
||||
"ischeckbox": false,
|
||||
"ischoice": false,
|
||||
"isradiobutton": false,
|
||||
"istext": true,
|
||||
"mappingname": "Value from 40 to 250 cm",
|
||||
"object": "14 0 R",
|
||||
"pageposfrom1": 1,
|
||||
"parent": null,
|
||||
"partialname": "Height Formatted Field",
|
||||
"quadding": 0,
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"alternativename": "Car driving license",
|
||||
"annotation": {
|
||||
"annotationflags": 4,
|
||||
"appearancestate": "/Yes",
|
||||
"object": "15 0 R"
|
||||
},
|
||||
"choices": [],
|
||||
"defaultvalue": "/Off",
|
||||
"fieldflags": 0,
|
||||
"fieldtype": "/Btn",
|
||||
"fullname": "Driving License Check Box",
|
||||
"ischeckbox": true,
|
||||
"ischoice": false,
|
||||
"isradiobutton": false,
|
||||
"istext": false,
|
||||
"mappingname": "Car driving license",
|
||||
"object": "15 0 R",
|
||||
"pageposfrom1": 1,
|
||||
"parent": null,
|
||||
"partialname": "Driving License Check Box",
|
||||
"quadding": 0,
|
||||
"value": "/Yes"
|
||||
},
|
||||
{
|
||||
"alternativename": "Language 1 Check Box",
|
||||
"annotation": {
|
||||
"annotationflags": 4,
|
||||
"appearancestate": "/Off",
|
||||
"object": "16 0 R"
|
||||
},
|
||||
"choices": [],
|
||||
"defaultvalue": "/Off",
|
||||
"fieldflags": 0,
|
||||
"fieldtype": "/Btn",
|
||||
"fullname": "Language 1 Check Box",
|
||||
"ischeckbox": true,
|
||||
"ischoice": false,
|
||||
"isradiobutton": false,
|
||||
"istext": false,
|
||||
"mappingname": "Language 1 Check Box",
|
||||
"object": "16 0 R",
|
||||
"pageposfrom1": 1,
|
||||
"parent": null,
|
||||
"partialname": "Language 1 Check Box",
|
||||
"quadding": 0,
|
||||
"value": "/Off"
|
||||
},
|
||||
{
|
||||
"alternativename": "Language 2 Check Box",
|
||||
"annotation": {
|
||||
"annotationflags": 4,
|
||||
"appearancestate": "/Yes",
|
||||
"object": "17 0 R"
|
||||
},
|
||||
"choices": [],
|
||||
"defaultvalue": "/Yes",
|
||||
"fieldflags": 0,
|
||||
"fieldtype": "/Btn",
|
||||
"fullname": "Language 2 Check Box",
|
||||
"ischeckbox": true,
|
||||
"ischoice": false,
|
||||
"isradiobutton": false,
|
||||
"istext": false,
|
||||
"mappingname": "Language 2 Check Box",
|
||||
"object": "17 0 R",
|
||||
"pageposfrom1": 1,
|
||||
"parent": null,
|
||||
"partialname": "Language 2 Check Box",
|
||||
"quadding": 0,
|
||||
"value": "/Yes"
|
||||
},
|
||||
{
|
||||
"alternativename": "Language 3 Check Box",
|
||||
"annotation": {
|
||||
"annotationflags": 4,
|
||||
"appearancestate": "/Off",
|
||||
"object": "18 0 R"
|
||||
},
|
||||
"choices": [],
|
||||
"defaultvalue": "/Off",
|
||||
"fieldflags": 0,
|
||||
"fieldtype": "/Btn",
|
||||
"fullname": "Language 3 Check Box",
|
||||
"ischeckbox": true,
|
||||
"ischoice": false,
|
||||
"isradiobutton": false,
|
||||
"istext": false,
|
||||
"mappingname": "Language 3 Check Box",
|
||||
"object": "18 0 R",
|
||||
"pageposfrom1": 1,
|
||||
"parent": null,
|
||||
"partialname": "Language 3 Check Box",
|
||||
"quadding": 0,
|
||||
"value": "/Off"
|
||||
},
|
||||
{
|
||||
"alternativename": "Language 4 Check Box",
|
||||
"annotation": {
|
||||
"annotationflags": 4,
|
||||
"appearancestate": "/Off",
|
||||
"object": "19 0 R"
|
||||
},
|
||||
"choices": [],
|
||||
"defaultvalue": "/Off",
|
||||
"fieldflags": 0,
|
||||
"fieldtype": "/Btn",
|
||||
"fullname": "Language 4 Check Box",
|
||||
"ischeckbox": true,
|
||||
"ischoice": false,
|
||||
"isradiobutton": false,
|
||||
"istext": false,
|
||||
"mappingname": "Language 4 Check Box",
|
||||
"object": "19 0 R",
|
||||
"pageposfrom1": 1,
|
||||
"parent": null,
|
||||
"partialname": "Language 4 Check Box",
|
||||
"quadding": 0,
|
||||
"value": "/Off"
|
||||
},
|
||||
{
|
||||
"alternativename": "Language 5 Check Box",
|
||||
"annotation": {
|
||||
"annotationflags": 4,
|
||||
"appearancestate": "/Off",
|
||||
"object": "20 0 R"
|
||||
},
|
||||
"choices": [],
|
||||
"defaultvalue": "/Off",
|
||||
"fieldflags": 0,
|
||||
"fieldtype": "/Btn",
|
||||
"fullname": "Language 5 Check Box",
|
||||
"ischeckbox": true,
|
||||
"ischoice": false,
|
||||
"isradiobutton": false,
|
||||
"istext": false,
|
||||
"mappingname": "Language 5 Check Box",
|
||||
"object": "20 0 R",
|
||||
"pageposfrom1": 1,
|
||||
"parent": null,
|
||||
"partialname": "Language 5 Check Box",
|
||||
"quadding": 0,
|
||||
"value": "/Off"
|
||||
},
|
||||
{
|
||||
"alternativename": "Select from colour spectrum",
|
||||
"annotation": {
|
||||
"annotationflags": 4,
|
||||
"appearancestate": "",
|
||||
"object": "21 0 R"
|
||||
},
|
||||
"choices": [
|
||||
"Black",
|
||||
"Brown",
|
||||
"Red",
|
||||
"Orange",
|
||||
"Yellow",
|
||||
"Green",
|
||||
"Blue",
|
||||
"Violet",
|
||||
"Grey",
|
||||
"White"
|
||||
],
|
||||
"defaultvalue": "Red",
|
||||
"fieldflags": 131072,
|
||||
"fieldtype": "/Ch",
|
||||
"fullname": "Favourite Colour List Box",
|
||||
"ischeckbox": false,
|
||||
"ischoice": true,
|
||||
"isradiobutton": false,
|
||||
"istext": false,
|
||||
"mappingname": "Select from colour spectrum",
|
||||
"object": "21 0 R",
|
||||
"pageposfrom1": 1,
|
||||
"parent": null,
|
||||
"partialname": "Favourite Colour List Box",
|
||||
"quadding": 0,
|
||||
"value": "Blue"
|
||||
}
|
||||
],
|
||||
"hasacroform": true,
|
||||
"needappearances": true
|
||||
},
|
||||
"parameters": {
|
||||
"decodelevel": "generalized"
|
||||
},
|
||||
"version": 1
|
||||
}
|
@ -1,4 +1,9 @@
|
||||
{
|
||||
"acroform": {
|
||||
"fields": [],
|
||||
"hasacroform": false,
|
||||
"needappearances": false
|
||||
},
|
||||
"objects": {
|
||||
"1 0 R": {
|
||||
"/Names": {
|
||||
|
@ -1,4 +1,9 @@
|
||||
{
|
||||
"acroform": {
|
||||
"fields": [],
|
||||
"hasacroform": false,
|
||||
"needappearances": false
|
||||
},
|
||||
"objects": {
|
||||
"1 0 R": {
|
||||
"/Dests": "107 0 R",
|
||||
|
@ -1,4 +1,9 @@
|
||||
{
|
||||
"acroform": {
|
||||
"fields": [],
|
||||
"hasacroform": false,
|
||||
"needappearances": false
|
||||
},
|
||||
"objects": {
|
||||
"1 0 R": {
|
||||
"/Outlines": "95 0 R",
|
||||
|
@ -1,4 +1,9 @@
|
||||
{
|
||||
"acroform": {
|
||||
"fields": [],
|
||||
"hasacroform": false,
|
||||
"needappearances": false
|
||||
},
|
||||
"objects": {
|
||||
"1 0 R": {
|
||||
"/PageLabels": "2 0 R",
|
||||
|
Loading…
x
Reference in New Issue
Block a user