summaryrefslogtreecommitdiff
path: root/glib
diff options
context:
space:
mode:
authorKristian Høgsberg <krh@redhat.com>2005-06-13 16:09:33 +0000
committerKristian Høgsberg <krh@redhat.com>2005-06-13 16:09:33 +0000
commit23e8ed5cbf4d7d999a8a1dcf714aaddaf339ceff (patch)
tree25dc6bf71fc0b8e89238dcbc9408c75b6bfe83e9 /glib
parentfbb86d2983a28ad2c46b8c5d475a2df1f0f0e4b9 (diff)
2005-06-13 Kristian Høgsberg <krh@redhat.com>
* glib/poppler-document.cc: * glib/poppler-document.h: * glib/poppler-private.h: * glib/poppler.h: * glib/test-poppler-glib.c: * poppler/Makefile.am: Patch from Marco to extract font info from document.
Diffstat (limited to 'glib')
-rw-r--r--glib/poppler-document.cc131
-rw-r--r--glib/poppler-document.h13
-rw-r--r--glib/poppler-private.h7
-rw-r--r--glib/poppler.h2
-rw-r--r--glib/test-poppler-glib.c14
5 files changed, 167 insertions, 0 deletions
diff --git a/glib/poppler-document.cc b/glib/poppler-document.cc
index 3f63e69f..4251745d 100644
--- a/glib/poppler-document.cc
+++ b/glib/poppler-document.cc
@@ -26,6 +26,7 @@
#include <GfxState.h>
#include <SplashOutputDev.h>
#include <Stream.h>
+#include <FontInfo.h>
#include "poppler.h"
#include "poppler-private.h"
@@ -745,6 +746,136 @@ poppler_index_iter_free (PopplerIndexIter *iter)
}
+struct _PopplerFontsIter
+{
+ GooList *items;
+ int index;
+};
+
+GType
+poppler_fonts_iter_get_type (void)
+{
+ static GType our_type = 0;
+
+ if (our_type == 0)
+ our_type = g_boxed_type_register_static ("PopplerFontsIter",
+ (GBoxedCopyFunc) poppler_fonts_iter_copy,
+ (GBoxedFreeFunc) poppler_fonts_iter_free);
+
+ return our_type;
+}
+
+const char *
+poppler_fonts_iter_get_name (PopplerFontsIter *iter)
+{
+ FontInfo *info;
+
+ info = (FontInfo *)iter->items->get (iter->index);
+
+ return info->getName()->getCString();
+}
+
+gboolean
+poppler_fonts_iter_next (PopplerFontsIter *iter)
+{
+ g_return_val_if_fail (iter != NULL, FALSE);
+
+ iter->index++;
+ if (iter->index >= iter->items->getLength())
+ return FALSE;
+
+ return TRUE;
+}
+
+PopplerFontsIter *
+poppler_fonts_iter_copy (PopplerFontsIter *iter)
+{
+ PopplerFontsIter *new_iter;
+
+ g_return_val_if_fail (iter != NULL, NULL);
+
+ new_iter = g_new0 (PopplerFontsIter, 1);
+ *new_iter = *iter;
+
+ new_iter->items = new GooList ();
+ for (int i = 0; i < iter->items->getLength(); i++) {
+ FontInfo *info = (FontInfo *)iter->items->get(i);
+ new_iter->items->append (new FontInfo (*info));
+ }
+
+ return new_iter;
+}
+
+void
+poppler_fonts_iter_free (PopplerFontsIter *iter)
+{
+ if (iter == NULL)
+ return;
+
+ deleteGooList (iter->items, FontInfo);
+
+ g_free (iter);
+}
+
+static PopplerFontsIter *
+poppler_fonts_iter_new (GooList *items)
+{
+ PopplerFontsIter *iter;
+
+ iter = g_new0 (PopplerFontsIter, 1);
+ iter->items = items;
+ iter->index = 0;
+
+ return iter;
+}
+
+PopplerFontInfo *
+poppler_font_info_new (PopplerDocument *document)
+{
+ PopplerFontInfo *font_info;
+
+ g_return_val_if_fail (POPPLER_IS_DOCUMENT (document), NULL);
+
+ font_info = g_new0 (PopplerFontInfo, 1);
+ font_info->document = (PopplerDocument *) g_object_ref (document);
+ font_info->scanner = new FontInfoScanner(document->doc);
+
+ return font_info;
+}
+
+gboolean
+poppler_font_info_scan (PopplerFontInfo *font_info,
+ int n_pages,
+ PopplerFontsIter **iter)
+{
+ GooList *items;
+
+ g_return_val_if_fail (iter != NULL, FALSE);
+
+ items = font_info->scanner->scan(n_pages);
+
+ if (items == NULL) {
+ *iter = NULL;
+ } else if (items->getLength() == 0) {
+ *iter = NULL;
+ delete items;
+ } else {
+ *iter = poppler_fonts_iter_new(items);
+ }
+
+ return (items != NULL);
+}
+
+void
+poppler_font_info_free (PopplerFontInfo *font_info)
+{
+ g_return_if_fail (font_info != NULL);
+
+ delete font_info->scanner;
+
+ g_object_unref (font_info->document);
+}
+
/**
* poppler_ps_file_new:
* @document: a #PopplerDocument
diff --git a/glib/poppler-document.h b/glib/poppler-document.h
index 18fdf27c..e657cfdd 100644
--- a/glib/poppler-document.h
+++ b/glib/poppler-document.h
@@ -103,6 +103,19 @@ PopplerIndexIter *poppler_index_iter_get_child (PopplerIndexIter *parent);
PopplerAction *poppler_index_iter_get_action (PopplerIndexIter *iter);
gboolean poppler_index_iter_next (PopplerIndexIter *iter);
+/* Interface for getting the Fonts of a poppler_document */
+PopplerFontInfo *poppler_font_info_new (PopplerDocument *document);
+gboolean poppler_font_info_scan (PopplerFontInfo *font_info,
+ int n_pages,
+ PopplerFontsIter **iter);
+void poppler_font_info_free (PopplerFontInfo *font_info);
+
+GType poppler_fonts_iter_get_type (void) G_GNUC_CONST;
+PopplerFontsIter *poppler_fonts_iter_copy (PopplerFontsIter *iter);
+void poppler_fonts_iter_free (PopplerFontsIter *iter);
+const char *poppler_fonts_iter_get_name (PopplerFontsIter *iter);
+gboolean poppler_fonts_iter_next (PopplerFontsIter *iter);
+
/* Export to ps */
PopplerPSFile *poppler_ps_file_new (PopplerDocument *document,
const char *filename,
diff --git a/glib/poppler-private.h b/glib/poppler-private.h
index 654f9019..b4c3e36f 100644
--- a/glib/poppler-private.h
+++ b/glib/poppler-private.h
@@ -5,6 +5,7 @@
#include <PDFDoc.h>
#include <PSOutputDev.h>
#include <Link.h>
+#include <FontInfo.h>
#if defined (HAVE_CAIRO)
#include <CairoOutputDevImage.h>
@@ -30,6 +31,12 @@ struct _PopplerPSFile
PSOutputDev *out;
};
+struct _PopplerFontInfo
+{
+ PopplerDocument *document;
+ FontInfoScanner *scanner;
+};
+
struct _PopplerPage
{
GObject parent_instance;
diff --git a/glib/poppler.h b/glib/poppler.h
index 37afe9a0..d5c17eae 100644
--- a/glib/poppler.h
+++ b/glib/poppler.h
@@ -45,9 +45,11 @@ typedef enum
typedef struct _PopplerDocument PopplerDocument;
typedef struct _PopplerIndexIter PopplerIndexIter;
+typedef struct _PopplerFontsIter PopplerFontsIter;
typedef struct _PopplerRectangle PopplerRectangle;
typedef struct _PopplerLinkMapping PopplerLinkMapping;
typedef struct _PopplerPage PopplerPage;
+typedef struct _PopplerFontInfo PopplerFontInfo;
typedef struct _PopplerPSFile PopplerPSFile;
typedef union _PopplerAction PopplerAction;
diff --git a/glib/test-poppler-glib.c b/glib/test-poppler-glib.c
index 591b5ed6..a56e14e6 100644
--- a/glib/test-poppler-glib.c
+++ b/glib/test-poppler-glib.c
@@ -15,6 +15,8 @@ print_document_info (PopplerDocument *document)
PopplerPageLayout layout;
PopplerPageMode mode;
PopplerViewerPreferences view_prefs;
+ PopplerFontInfo *font_info;
+ PopplerFontsIter *fonts_iter;
GEnumValue *enum_value;
g_object_get (document,
@@ -53,6 +55,18 @@ print_document_info (PopplerDocument *document)
g_print ("\tcreation date:\t%d\n", creation_date);
g_print ("\tmodified date:\t%d\n", mod_date);
+ g_print ("\tfonts:\n");
+ font_info = poppler_font_info_new (document);
+ while (poppler_font_info_scan (font_info, 20, &fonts_iter)) {
+ if (fonts_iter) {
+ do {
+ g_print ("\t\t\t%s\n", poppler_fonts_iter_get_name (fonts_iter));
+ } while (poppler_fonts_iter_next (fonts_iter));
+ poppler_fonts_iter_free (fonts_iter);
+ }
+ }
+ poppler_font_info_free (font_info);
+
/* FIXME: print out the view prefs when we support it */
g_free (title);