2
1
mirror of https://github.com/qpdf/qpdf.git synced 2024-05-28 16:00:53 +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:
Jay Berkenbilt 2019-01-01 21:27:18 -05:00
parent 26393f5137
commit e3144ac417
17 changed files with 7594 additions and 5 deletions

View File

@ -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

View File

@ -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);

View File

@ -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");

View File

@ -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)

View File

@ -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

View File

@ -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)

File diff suppressed because it is too large Load Diff

View 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
}

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,9 @@
{
"acroform": {
"fields": [],
"hasacroform": false,
"needappearances": false
},
"objects": {
"1 0 R": {
"/Pages": "2 0 R",

View File

@ -1,4 +1,9 @@
{
"acroform": {
"fields": [],
"hasacroform": false,
"needappearances": false
},
"objects": {
"1 0 R": {
"/Pages": "2 0 R",

View File

@ -1,4 +1,9 @@
{
"acroform": {
"fields": [],
"hasacroform": false,
"needappearances": false
},
"objects": {
"1 0 R": {
"/Pages": "2 0 R",

View 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
}

View File

@ -1,4 +1,9 @@
{
"acroform": {
"fields": [],
"hasacroform": false,
"needappearances": false
},
"objects": {
"1 0 R": {
"/Names": {

View File

@ -1,4 +1,9 @@
{
"acroform": {
"fields": [],
"hasacroform": false,
"needappearances": false
},
"objects": {
"1 0 R": {
"/Dests": "107 0 R",

View File

@ -1,4 +1,9 @@
{
"acroform": {
"fields": [],
"hasacroform": false,
"needappearances": false
},
"objects": {
"1 0 R": {
"/Outlines": "95 0 R",

View File

@ -1,4 +1,9 @@
{
"acroform": {
"fields": [],
"hasacroform": false,
"needappearances": false
},
"objects": {
"1 0 R": {
"/PageLabels": "2 0 R",