[poppler] glib/test-poppler-glib.cc

Carlos Garcia Campos carlosgc at kemper.freedesktop.org
Mon Apr 20 01:38:08 PDT 2009


 glib/test-poppler-glib.cc |   68 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 68 insertions(+)

New commits:
commit cb61b555f2c4db8685dec5491ca86570c962aab6
Author: Carlos Garcia Campos <carlosgc at gnome.org>
Date:   Sat Apr 18 18:30:04 2009 +0200

    Extend test-poppler-glib to show more page annotations and actions
    
    Based on path by Thomas Viehmann <tv at beamnet.de>

diff --git a/glib/test-poppler-glib.cc b/glib/test-poppler-glib.cc
index 1ff7010..e64000e 100644
--- a/glib/test-poppler-glib.cc
+++ b/glib/test-poppler-glib.cc
@@ -364,6 +364,21 @@ form_field_print (PopplerFormField *field)
   printf ("\n");
 }
 
+static void
+annot_print (PopplerAnnot *annot)
+{
+  GEnumValue *enum_value;
+  gchar *text;
+  
+  enum_value = g_enum_get_value ((GEnumClass *) g_type_class_ref (POPPLER_TYPE_ANNOT_TYPE),
+				 poppler_annot_get_annot_type (annot));
+  g_print ("\t\tType: %s\n", enum_value->value_name);
+  text = poppler_annot_get_contents (annot);
+  g_print ("\t\tContents: %s\n", text);
+  g_free (text);
+  printf ("\n");
+}
+
 int main (int argc, char *argv[])
 {
   PopplerDocument *document;
@@ -382,6 +397,8 @@ int main (int argc, char *argv[])
   PopplerRectangle area;
   gint num_images;
   gint num_forms;
+  gint num_links;
+  gint num_annots;
   gint form_id = 0;
   PopplerLayersIter *layers_iter;
 
@@ -453,6 +470,37 @@ int main (int argc, char *argv[])
 
   g_object_unref (G_OBJECT (pixbuf));
 
+  list = poppler_page_get_link_mapping (page);
+  num_links = g_list_length (list);
+  if (num_links > 0)
+    printf ("\tFound %d links at positions:\n", num_links);
+  else
+    printf ("\tNo links found\n");
+  
+  for (l = list; l != NULL; l = l->next)
+    {
+      PopplerLinkMapping *mapping = (PopplerLinkMapping *)l->data;
+      
+      printf ("\t\t(%f, %f) - (%f, %f)\n",
+	      mapping->area.x1,
+	      mapping->area.y1,
+	      mapping->area.x2,
+	      mapping->area.y2);
+      enum_value = g_enum_get_value ((GEnumClass *) g_type_class_ref (POPPLER_TYPE_ACTION_TYPE),
+				     mapping->action->type);
+      g_print ("\t\t\tAction: %s (%d)\n", enum_value->value_name, mapping->action->type);
+      switch (mapping->action->type)
+        {
+	  case POPPLER_ACTION_GOTO_DEST:
+	    printf("\t\t\tDest title: %s\n", mapping->action->goto_dest.title);
+	    printf("\t\t\tNamed dest: %s\n", mapping->action->goto_dest.dest->named_dest);
+	    break;
+	  default:
+	    printf("\t\t\tDetails unimplemented for this action type\n");
+	}
+    }
+  poppler_page_free_link_mapping (list); 
+  
   area.x1 = 0;
   area.y1 = 0;
   area.x2 = width;
@@ -538,7 +586,27 @@ int main (int argc, char *argv[])
       printf ("\tForm field for id %d\n", form_id);
       form_field_print (field);
       g_object_unref (field);
+    }  
+
+  list = poppler_page_get_annot_mapping (page);
+  num_annots = g_list_length (list);
+  if (num_annots > 0)
+    printf ("\tFound %d annotations at positions:\n", num_annots);
+  else
+    printf ("\tNo annotations found\n");
+  for (l = list; l != NULL; l = l->next)
+    {
+      PopplerAnnotMapping *mapping = (PopplerAnnotMapping *)l->data;
+	    
+      printf ("\t\t(%f, %f) - (%f, %f)\n",
+	      mapping->area.x1,
+	      mapping->area.y1,
+	      mapping->area.x2,
+	      mapping->area.y2);
+
+      annot_print (mapping->annot);
     }
+  poppler_page_free_annot_mapping (list);
   
   if (poppler_document_has_attachments (document))
     {


More information about the poppler mailing list