diff options
author | Kristian Høgsberg <krh@redhat.com> | 2005-06-13 16:09:33 +0000 |
---|---|---|
committer | Kristian Høgsberg <krh@redhat.com> | 2005-06-13 16:09:33 +0000 |
commit | 23e8ed5cbf4d7d999a8a1dcf714aaddaf339ceff (patch) | |
tree | 25dc6bf71fc0b8e89238dcbc9408c75b6bfe83e9 /glib | |
parent | fbb86d2983a28ad2c46b8c5d475a2df1f0f0e4b9 (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.cc | 131 | ||||
-rw-r--r-- | glib/poppler-document.h | 13 | ||||
-rw-r--r-- | glib/poppler-private.h | 7 | ||||
-rw-r--r-- | glib/poppler.h | 2 | ||||
-rw-r--r-- | glib/test-poppler-glib.c | 14 |
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); |