diff --git a/glib/poppler-form-field.cc b/glib/poppler-form-field.cc index 4ed5b9e..3ba2673 100644 --- a/glib/poppler-form-field.cc +++ b/glib/poppler-form-field.cc @@ -214,6 +214,48 @@ poppler_form_field_button_set_state (PopplerFormField *field, static_cast(field->widget)->setState ((GBool)state); } +/** + * poppler_form_field_get_partial_name: + * @field: a #PopplerFormField + * + * Gets the partial name (PDF /T property) for @field. + * + * Return value: a new allocated string. It must be freed with g_free() when done. + **/ +gchar* +poppler_form_field_get_partial_name (PopplerFormField *field) +{ + GooString *tmp; + + g_return_val_if_fail (POPPLER_IS_FORM_FIELD (field), NULL); + + tmp = field->widget->getPartialName(); + + return tmp ? _poppler_goo_string_to_utf8 (tmp) : NULL; +} + +/** + * poppler_form_field_get_mapping_name: + * @field: a #PopplerFormField + * + * Gets the mapping name (PDF /TM property) for @field. + * + * Return value: a new allocated string. It must be freed with g_free() when done. + **/ +gchar* +poppler_form_field_get_mapping_name (PopplerFormField *field) +{ + GooString *tmp; + + g_return_val_if_fail (POPPLER_IS_FORM_FIELD (field), NULL); + + tmp = field->widget->getMappingName(); + + return tmp ? _poppler_goo_string_to_utf8 (tmp) : NULL; +} + + + /* Text Field */ /** * poppler_form_field_text_get_text_type: diff --git a/glib/poppler-form-field.h b/glib/poppler-form-field.h index b8727e9..0a53001 100644 --- a/glib/poppler-form-field.h +++ b/glib/poppler-form-field.h @@ -64,6 +64,8 @@ PopplerFormFieldType poppler_form_field_get_field_type (PopplerFormFie gint poppler_form_field_get_id (PopplerFormField *field); gdouble poppler_form_field_get_font_size (PopplerFormField *field); gboolean poppler_form_field_is_read_only (PopplerFormField *field); +gchar *poppler_form_field_get_partial_name (PopplerFormField *field); +gchar *poppler_form_field_get_mapping_name (PopplerFormField *field); /* Button Field */ PopplerFormButtonType poppler_form_field_button_get_button_type (PopplerFormField *field); diff --git a/poppler/Form.cc b/poppler/Form.cc index 4df8a7d..691643c 100644 --- a/poppler/Form.cc +++ b/poppler/Form.cc @@ -73,6 +73,20 @@ FormWidget::FormWidget(XRef *xrefA, Object *aobj, unsigned num, Ref aref, FormFi field = fieldA; Dict *dict = obj.getDict(); + if (dict->lookup("T", &obj1)->isString()) { + partialName = obj1.getString()->copy(); + } else { + partialName = NULL; + } + obj1.free(); + + if(dict->lookup("TM", &obj1)->isString()) { + mappingName = obj1.getString()->copy(); + } else { + mappingName = NULL; + } + obj1.free(); + if (!dict->lookup("Rect", &obj1)->isArray()) { error(-1, "Annotation rectangle is wrong type"); goto err2; @@ -122,6 +136,12 @@ FormWidget::FormWidget(XRef *xrefA, Object *aobj, unsigned num, Ref aref, FormFi FormWidget::~FormWidget() { + if (partialName) + delete partialName; + + if (mappingName) + delete mappingName; + obj.free (); } diff --git a/poppler/Form.h b/poppler/Form.h index 35d66af..254bafe 100644 --- a/poppler/Form.h +++ b/poppler/Form.h @@ -83,6 +83,9 @@ public: void setFontSize(double f) { fontSize = f; } double getFontSize () { return fontSize; } + GooString *getPartialName() const { return partialName; } + GooString *getMappingName() const { return mappingName; } + GBool isModified () { return modified; } bool isReadOnly() const; @@ -104,6 +107,9 @@ protected: XRef *xref; GBool defaultsLoaded; GBool modified; + GooString *partialName; // T field + GooString *mappingName; // TM field + //index of this field in the parent's child list unsigned childNum;