[poppler] 4 commits - glib/demo glib/poppler-document.cc glib/poppler-form-field.cc glib/poppler-form-field.h glib/reference poppler/Form.cc poppler/Form.h
Carlos Garcia Campos
carlosgc at kemper.freedesktop.org
Wed Sep 22 04:02:13 PDT 2010
glib/demo/forms.c | 26 ++++++++++---
glib/poppler-document.cc | 4 +-
glib/poppler-form-field.cc | 68 ++++++++++++++++++++++++++++++++++++
glib/poppler-form-field.h | 3 +
glib/reference/poppler-sections.txt | 3 +
poppler/Form.cc | 64 +++++++++++++++++++++++++++++++++
poppler/Form.h | 8 ++++
7 files changed, 168 insertions(+), 8 deletions(-)
New commits:
commit 9554cbc3cb4fc0cd7ad2295f5d27a18e030c6aee
Author: Carlos Garcia Campos <carlosgc at gnome.org>
Date: Wed Sep 22 12:54:25 2010 +0200
[glib-demo] Show form field names in forms demo
diff --git a/glib/demo/forms.c b/glib/demo/forms.c
index e4b1fd8..7836b86 100644
--- a/glib/demo/forms.c
+++ b/glib/demo/forms.c
@@ -134,6 +134,7 @@ pgd_form_field_view_set_field (GtkWidget *field_view,
GtkWidget *alignment;
GtkWidget *table;
GEnumValue *enum_value;
+ gchar *text;
gint row = 0;
alignment = gtk_bin_get_child (GTK_BIN (field_view));
@@ -149,10 +150,26 @@ pgd_form_field_view_set_field (GtkWidget *field_view,
if (!field)
return;
- table = gtk_table_new (10, 2, FALSE);
+ table = gtk_table_new (13, 2, FALSE);
gtk_table_set_col_spacings (GTK_TABLE (table), 6);
gtk_table_set_row_spacings (GTK_TABLE (table), 6);
+ text = poppler_form_field_get_name (field);
+ if (text) {
+ pgd_table_add_property (GTK_TABLE (table), "<b>Name:</b>", text, &row);
+ g_free (text);
+ }
+ text = poppler_form_field_get_partial_name (field);
+ if (text) {
+ pgd_table_add_property (GTK_TABLE (table), "<b>Partial Name:</b>", text, &row);
+ g_free (text);
+ }
+ text = poppler_form_field_get_mapping_name (field);
+ if (text) {
+ pgd_table_add_property (GTK_TABLE (table), "<b>Mapping Name:</b>", text, &row);
+ g_free (text);
+ }
+
switch (poppler_form_field_get_field_type (field)) {
case POPPLER_FORM_FIELD_BUTTON:
enum_value = g_enum_get_value ((GEnumClass *) g_type_class_ref (POPPLER_TYPE_FORM_BUTTON_TYPE),
@@ -161,9 +178,7 @@ pgd_form_field_view_set_field (GtkWidget *field_view,
pgd_table_add_property (GTK_TABLE (table), "<b>Button State:</b>",
poppler_form_field_button_get_state (field) ? "Active" : "Inactive", &row);
break;
- case POPPLER_FORM_FIELD_TEXT: {
- gchar *text;
-
+ case POPPLER_FORM_FIELD_TEXT:
enum_value = g_enum_get_value ((GEnumClass *) g_type_class_ref (POPPLER_TYPE_FORM_TEXT_TYPE),
poppler_form_field_text_get_text_type (field));
pgd_table_add_property (GTK_TABLE (table), "<b>Text Type:</b>", enum_value->value_name, &row);
@@ -184,10 +199,9 @@ pgd_form_field_view_set_field (GtkWidget *field_view,
poppler_form_field_text_is_rich_text (field) ? "Yes" : "No", &row);
pgd_table_add_property (GTK_TABLE (table), "<b>Pasword type:</b>",
poppler_form_field_text_is_password (field) ? "Yes" : "No", &row);
- }
break;
case POPPLER_FORM_FIELD_CHOICE: {
- gchar *text, *item;
+ gchar *item;
gint selected;
enum_value = g_enum_get_value ((GEnumClass *) g_type_class_ref (POPPLER_TYPE_FORM_CHOICE_TYPE),
commit 257634b26b682628dba5ee5f94cb0bad030bcb4f
Author: Mark Riedesel <mark at klowner.com>
Date: Wed Sep 22 12:52:49 2010 +0200
[glib] Add methods to get mapping, partial an fully qualified form field names
See bug #28780.
diff --git a/glib/poppler-form-field.cc b/glib/poppler-form-field.cc
index 33c4b15..9d4ffbb 100644
--- a/glib/poppler-form-field.cc
+++ b/glib/poppler-form-field.cc
@@ -220,6 +220,74 @@ poppler_form_field_button_set_state (PopplerFormField *field,
static_cast<FormWidgetButton*>(field->widget)->setState ((GBool)state);
}
+/**
+ * poppler_form_field_get_partial_name:
+ * @field: a #PopplerFormField
+ *
+ * Gets the partial name of @field.
+ *
+ * Return value: a new allocated string. It must be freed with g_free() when done.
+ *
+ * Since: 0.16
+ **/
+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 of @field that is used when
+ * exporting interactive form field data from the document
+ *
+ * Return value: a new allocated string. It must be freed with g_free() when done.
+ *
+ * Since: 0.16
+ **/
+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;
+}
+
+/**
+ * poppler_form_field_get_name:
+ * @field: a #PopplerFormField
+ *
+ * Gets the fully qualified name of @field. It's constructed by concatenating
+ * the partial field names of the field and all of its ancestors.
+ *
+ * Return value: a new allocated string. It must be freed with g_free() when done.
+ *
+ * Since: 0.16
+ **/
+gchar*
+poppler_form_field_get_name (PopplerFormField *field)
+{
+ GooString *tmp;
+
+ g_return_val_if_fail (POPPLER_IS_FORM_FIELD (field), NULL);
+
+ tmp = field->widget->getFullyQualifiedName();
+
+ 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..8ae718e 100644
--- a/glib/poppler-form-field.h
+++ b/glib/poppler-form-field.h
@@ -64,6 +64,9 @@ 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);
+gchar *poppler_form_field_get_name (PopplerFormField *field);
/* Button Field */
PopplerFormButtonType poppler_form_field_button_get_button_type (PopplerFormField *field);
diff --git a/glib/reference/poppler-sections.txt b/glib/reference/poppler-sections.txt
index 96eaf75..5bc665d 100644
--- a/glib/reference/poppler-sections.txt
+++ b/glib/reference/poppler-sections.txt
@@ -272,6 +272,9 @@ poppler_form_field_get_field_type
poppler_form_field_get_id
poppler_form_field_is_read_only
poppler_form_field_get_font_size
+poppler_form_field_get_partial_name
+poppler_form_field_get_mapping_name
+poppler_form_field_get_name
poppler_form_field_button_get_button_type
poppler_form_field_button_get_state
poppler_form_field_button_set_state
commit 6db98abc59c154dcb18d69fc37e44ce804c3ccc9
Author: Mark Riedesel <mark at klowner.com>
Date: Wed Sep 22 12:41:16 2010 +0200
Add getLabel method to FormWidget
See bug #28780.
diff --git a/poppler/Form.cc b/poppler/Form.cc
index ae9c509..39b4b61 100644
--- a/poppler/Form.cc
+++ b/poppler/Form.cc
@@ -73,6 +73,21 @@ FormWidget::FormWidget(XRef *xrefA, Object *aobj, unsigned num, Ref aref, FormFi
type = formUndef;
field = fieldA;
Dict *dict = obj.getDict();
+ fullyQualifiedName = NULL;
+
+ 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");
@@ -123,6 +138,9 @@ FormWidget::FormWidget(XRef *xrefA, Object *aobj, unsigned num, Ref aref, FormFi
FormWidget::~FormWidget()
{
+ delete partialName;
+ delete mappingName;
+ delete fullyQualifiedName;
obj.free ();
}
@@ -164,6 +182,52 @@ void FormWidget::updateField (const char *key, Object *value)
xref->setModifiedObject(obj1, ref1);
}
+GooString* FormWidget::getFullyQualifiedName() {
+ Object obj1, obj2;
+ Object parent;
+ GooString *parent_name;
+ GooString *full_name;
+
+ if (fullyQualifiedName)
+ return fullyQualifiedName;
+
+ full_name = new GooString();
+
+ obj.copy(&obj1);
+ while (obj1.dictLookup("Parent", &parent)->isDict()) {
+ if (parent.dictLookup("T", &obj2)->isString()) {
+ parent_name = obj2.getString();
+
+ if (parent_name->hasUnicodeMarker()) {
+ parent_name->del(0, 2); // Remove the unicode BOM
+ full_name->insert(0, "\0.", 2); // 2-byte unicode period
+ } else {
+ full_name->insert(0, '.'); // 1-byte ascii period
+ }
+
+ full_name->insert(0, parent_name);
+ obj2.free();
+ }
+ obj1.free();
+ parent.copy(&obj1);
+ parent.free();
+ }
+ obj1.free();
+ parent.free();
+
+ if (partialName) {
+ full_name->append(partialName);
+ } else {
+ int len = full_name->getLength();
+ // Remove the last period
+ if (len > 0)
+ full_name->del(len - 1, 1);
+ }
+
+ fullyQualifiedName = full_name;
+ return fullyQualifiedName;
+}
+
FormWidgetButton::FormWidgetButton (XRef *xrefA, Object *aobj, unsigned num, Ref ref, FormField *p) :
FormWidget(xrefA, aobj, num, ref, p)
{
diff --git a/poppler/Form.h b/poppler/Form.h
index 35d66af..fea7c67 100644
--- a/poppler/Form.h
+++ b/poppler/Form.h
@@ -83,6 +83,10 @@ public:
void setFontSize(double f) { fontSize = f; }
double getFontSize () { return fontSize; }
+ GooString *getPartialName() const { return partialName; }
+ GooString *getMappingName() const { return mappingName; }
+ GooString *getFullyQualifiedName();
+
GBool isModified () { return modified; }
bool isReadOnly() const;
@@ -104,6 +108,10 @@ protected:
XRef *xref;
GBool defaultsLoaded;
GBool modified;
+ GooString *partialName; // T field
+ GooString *mappingName; // TM field
+ GooString *fullyQualifiedName;
+
//index of this field in the parent's child list
unsigned childNum;
commit bcdca66fd57439735e0b9aa182ab7cfce29e9ed0
Author: Carlos Garcia Campos <carlosgc at gnome.org>
Date: Tue Sep 21 11:49:37 2010 +0200
[glib] Fix minimum value of creation and modification date properties
It should be -1 which means there's no date specified
diff --git a/glib/poppler-document.cc b/glib/poppler-document.cc
index 873fddb..6dd60bf 100644
--- a/glib/poppler-document.cc
+++ b/glib/poppler-document.cc
@@ -1297,7 +1297,7 @@ poppler_document_class_init (PopplerDocumentClass *klass)
g_param_spec_int ("creation-date",
"Creation Date",
"The date and time the document was created",
- 0, G_MAXINT, -1,
+ -1, G_MAXINT, -1,
G_PARAM_READABLE));
/**
@@ -1310,7 +1310,7 @@ poppler_document_class_init (PopplerDocumentClass *klass)
g_param_spec_int ("mod-date",
"Modification Date",
"The date and time the document was modified",
- 0, G_MAXINT, -1,
+ -1, G_MAXINT, -1,
G_PARAM_READABLE));
/**
More information about the poppler
mailing list