## PopplerDocument PopplerDocument — Information about a document |

## Synopsis

    enum        PopplerPageLayout;
    enum        PopplerPageMode;
    enum        PopplerFontType;
    enum        PopplerViewerPreferences;
    enum        PopplerPermissions;
    PopplerDocument* poppler_document_new_from_file
                                                (const char *uri,
                                                 const char *password,
                                                 GError **error);
    gboolean    poppler_document_save           (PopplerDocument *document,
                                                 const char *uri,
                                                 GError **error);
    int         poppler_document_get_n_pages    (PopplerDocument *document);
    PopplerPage* poppler_document_get_page      (PopplerDocument *document,
                                                 int index);
    PopplerPage* poppler_document_get_page_by_label
                                                (PopplerDocument *document,
                                                 const char *label);
    GType       poppler_index_iter_get_type     (void);
    PopplerIndexIter* poppler_index_iter_new    (PopplerDocument *document);
    PopplerIndexIter* poppler_index_iter_copy   (PopplerIndexIter *iter);
    void        poppler_index_iter_free         (PopplerIndexIter *iter);
    PopplerIndexIter* poppler_index_iter_get_child
                                                (PopplerIndexIter *parent);
    gboolean    poppler_index_iter_is_open      (PopplerIndexIter *iter);
    PopplerAction* poppler_index_iter_get_action
                                                (PopplerIndexIter *iter);
    gboolean    poppler_index_iter_next         (PopplerIndexIter *iter);
    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);
    PopplerFontsIter* poppler_fonts_iter_copy   (PopplerFontsIter *iter);
    void        poppler_fonts_iter_free         (PopplerFontsIter *iter);
    const char* poppler_fonts_iter_get_name     (PopplerFontsIter *iter);
    const char* poppler_fonts_iter_get_full_name
                                                (PopplerFontsIter *iter);
    PopplerFontType poppler_fonts_iter_get_font_type
                                                (PopplerFontsIter *iter);
    gboolean    poppler_fonts_iter_is_embedded  (PopplerFontsIter *iter);
    gboolean    poppler_fonts_iter_is_subset    (PopplerFontsIter *iter);
    gboolean    poppler_fonts_iter_next         (PopplerFontsIter *iter);
    PopplerPSFile* poppler_ps_file_new          (PopplerDocument *document,
                                                 const char *filename,
                                                 int first_page,
                                                 int n_pages);
    void        poppler_ps_file_set_paper_size  (PopplerPSFile *ps_file,
                                                 double width,
                                                 double height);
    void        poppler_ps_file_set_duplex      (PopplerPSFile *ps_file,
                                                 gboolean duplex);
    void        poppler_ps_file_free            (PopplerPSFile *ps_file);

## Description

The PopplerDocument is an object used to refer to a main document.

## Details

### enum PopplerPageLayout

    typedef enum
    {
      POPPLER_PAGE_LAYOUT_UNSET,
      POPPLER_PAGE_LAYOUT_SINGLE_PAGE,
      POPPLER_PAGE_LAYOUT_ONE_COLUMN,
      POPPLER_PAGE_LAYOUT_TWO_COLUMN_LEFT,
      POPPLER_PAGE_LAYOUT_TWO_COLUMN_RIGHT,
      POPPLER_PAGE_LAYOUT_TWO_PAGE_LEFT,
      POPPLER_PAGE_LAYOUT_TWO_PAGE_RIGHT,
    } PopplerPageLayout;

### enum PopplerPageMode

    typedef enum
    {
      POPPLER_PAGE_MODE_UNSET,
      POPPLER_PAGE_MODE_NONE,
      POPPLER_PAGE_MODE_USE_OUTLINES,
      POPPLER_PAGE_MODE_USE_THUMBS,
      POPPLER_PAGE_MODE_FULL_SCREEN,
      POPPLER_PAGE_MODE_USE_OC,
      POPPLER_PAGE_MODE_USE_ATTACHMENTS,
    } PopplerPageMode;

### enum PopplerFontType

    typedef enum
    {
      POPPLER_FONT_TYPE_UNKNOWN,
      POPPLER_FONT_TYPE_TYPE1,
      POPPLER_FONT_TYPE_TYPE1C,
      POPPLER_FONT_TYPE_TYPE3,
      POPPLER_FONT_TYPE_TRUETYPE,
      POPPLER_FONT_TYPE_CID_TYPE0,
      POPPLER_FONT_TYPE_CID_TYPE0C,
      POPPLER_FONT_TYPE_CID_TYPE2
    } PopplerFontType;

### enum PopplerViewerPreferences

    typedef enum /*< flags >*/
    {
      POPPLER_VIEWER_PREFERENCES_UNSET = 0,
      POPPLER_VIEWER_PREFERENCES_HIDE_TOOLBAR = 1 << 0,
      POPPLER_VIEWER_PREFERENCES_HIDE_MENUBAR = 1 << 1,
      POPPLER_VIEWER_PREFERENCES_HIDE_WINDOWUI = 1 << 2,
      POPPLER_VIEWER_PREFERENCES_FIT_WINDOW = 1 << 3,
      POPPLER_VIEWER_PREFERENCES_CENTER_WINDOW = 1 << 4,
      POPPLER_VIEWER_PREFERENCES_DISPLAY_DOC_TITLE = 1 << 5,
      POPPLER_VIEWER_PREFERENCES_DIRECTION_RTL = 1 << 6,
    } PopplerViewerPreferences;

### enum PopplerPermissions

    typedef enum /*< flags >*/
    {
      POPPLER_PERMISSIONS_OK_TO_PRINT = 1 << 0,
      POPPLER_PERMISSIONS_OK_TO_MODIFY = 1 << 1,
      POPPLER_PERMISSIONS_OK_TO_COPY = 1 << 2,
      POPPLER_PERMISSIONS_OK_TO_ADD_NOTES = 1 << 3,
      POPPLER_PERMISSIONS_FULL = (POPPLER_PERMISSIONS_OK_TO_PRINT | POPPLER_PERMISSIONS_OK_TO_MODIFY | POPPLER_PERMISSIONS_OK_TO_COPY | POPPLER_PERMISSIONS_OK_TO_ADD_NOTES),

    } PopplerPermissions;

### poppler_document_new_from_file ()

    PopplerDocument* poppler_document_new_from_file
                                                (const char *uri,
                                                 const char *password,
                                                 GError **error);

Creates a new PopplerDocument. If `NULL` is returned, then `error` will be set. Possible errors include those in the POPPLER_ERROR and G_FILE_ERROR domains.

`uri` : | uri of the file to load
`password` : | password to unlock the file with, or `NULL`
`error` : | Return location for an error, or `NULL`
Returns : | A newly created PopplerDocument, or `NULL`

### poppler_document_save ()

    gboolean    poppler_document_save           (PopplerDocument *document,
                                                 const char *uri,
                                                 GError **error);

Saves `document`. If `error` is set, `FALSE` will be returned. Possible errors include those in the G_FILE_ERROR domain.

`document` : | a PopplerDocument
`uri` : | uri of file to save
`error` : | return location for an error, or `NULL`
Returns : | `TRUE`, if the document was successfully saved

### poppler_document_get_n_pages ()

    int         poppler_document_get_n_pages    (PopplerDocument *document);

Returns the number of pages in a loaded document.

`document` : | A PopplerDocument
Returns : | Number of pages

### poppler_document_get_page ()

    PopplerPage* poppler_document_get_page      (PopplerDocument *document,
                                                 int index);

Returns the PopplerPage indexed at `index`. This object is owned by the caller.

PopplerPages are indexed starting at 0.

`document` : | A PopplerDocument
`index` : | a page index
Returns : | The PopplerPage at `index`

### poppler_document_get_page_by_label ()

    PopplerPage* poppler_document_get_page_by_label
                                                (PopplerDocument *document,
                                                 const char *label);

Returns the PopplerPage reference by `label`. This object is owned by the caller. `label` is a human-readable string representation of the page number, and can be document specific. Typically, it is a value such as "iii" or "3".

By default, "1" refers to the first page.

`document` : | A PopplerDocument
`label` : | a page label
Returns : | The PopplerPage referenced by `label`

### poppler_index_iter_get_type ()

    GType       poppler_index_iter_get_type     (void);

Returns : |

### poppler_index_iter_new ()

    PopplerIndexIter* poppler_index_iter_new    (PopplerDocument *document);

Returns the root PopplerIndexIter for `document`, or `NULL`. This must be freed with `poppler_index_iter_free()`.

Certain documents have an index associated with them. This index can be used to help the user navigate the document, and is similar to a table of contents. Each node in the index will contain a PopplerAction that can be displayed to the user — typically a POPPLER_ACTION_GOTO_DEST or a POPPLER_ACTION_URI.

Here is a simple example of some code that walks the full index:

    static void
    walk_index (PopplerIndexIter *iter)
    {
      do
        {
          /* Get the the action and do something with it */
          PopplerIndexIter *child = poppler_index_iter_get_child (iter);
          if (child)
            walk_index (child);
          poppler_index_iter_free (child);
        }
      while (poppler_index_iter_next (iter));
    }
    ...
    {
      iter = poppler_index_iter_new (document);
      walk_index (iter);
      poppler_index_iter_free (iter);
    }

`document` : | a PopplerDocument
Returns : | a new PopplerIndexIter

### poppler_index_iter_copy ()

    PopplerIndexIter* poppler_index_iter_copy   (PopplerIndexIter *iter);

Creates a new PopplerIndexIter as a copy of `iter`. This must be freed with `poppler_index_iter_free()`.

`iter` : | a PopplerIndexIter
Returns : | a new PopplerIndexIter

### poppler_index_iter_free ()

    void        poppler_index_iter_free         (PopplerIndexIter *iter);

Frees `iter`.

`iter` : | a PopplerIndexIter

### poppler_index_iter_get_child ()

    PopplerIndexIter* poppler_index_iter_get_child
                                                (PopplerIndexIter *parent);

Returns a newly created child of `parent`, or `NULL` if the iter has no child. See `poppler_index_iter_new()` for more information on this function.

`parent` : | a PopplerIndexIter
Returns : | a new PopplerIndexIter

### poppler_index_iter_is_open ()

    gboolean    poppler_index_iter_is_open      (PopplerIndexIter *iter);

Returns whether this node should be expanded by default to the user. The document can provide a hint as to how the document's index should be expanded initially.

`iter` : | a PopplerIndexIter
Returns : | `TRUE`, if the document wants `iter` to be expanded

### poppler_index_iter_get_action ()

    PopplerAction* poppler_index_iter_get_action
                                                (PopplerIndexIter *iter);

Returns the PopplerAction associated with `iter`. It must be freed with `poppler_action_free()`.

`iter` : | a PopplerIndexIter
Returns : | a new PopplerAction

### poppler_index_iter_next ()

    gboolean    poppler_index_iter_next         (PopplerIndexIter *iter);

Sets `iter` to point to the next action at the current level, if valid. See `poppler_index_iter_new()` for more information.

`iter` : | a PopplerIndexIter
Returns : | `TRUE`, if `iter` was set to the next action

### poppler_font_info_new ()

    PopplerFontInfo* poppler_font_info_new      (PopplerDocument *document);

`document` : |
Returns : |

### poppler_font_info_scan ()

    gboolean    poppler_font_info_scan          (PopplerFontInfo *font_info,
                                                 int n_pages,
                                                 PopplerFontsIter **iter);

`font_info` : |
`n_pages` : |
`iter` : |
Returns : |

### poppler_font_info_free ()

    void        poppler_font_info_free          (PopplerFontInfo *font_info);

`font_info` : |

### poppler_fonts_iter_get_type ()

    GType       poppler_fonts_iter_get_type     (void);

Returns : |

### poppler_fonts_iter_copy ()

    PopplerFontsIter* poppler_fonts_iter_copy   (PopplerFontsIter *iter);

`iter` : |
Returns : |

### poppler_fonts_iter_free ()

    void        poppler_fonts_iter_free         (PopplerFontsIter *iter);

`iter` : |

### poppler_fonts_iter_get_name ()

    const char* poppler_fonts_iter_get_name     (PopplerFontsIter *iter);

`iter` : |
Returns : |

### poppler_fonts_iter_get_full_name ()

    const char* poppler_fonts_iter_get_full_name
                                                (PopplerFontsIter *iter);

`iter` : |
Returns : |

### poppler_fonts_iter_get_font_type ()

    PopplerFontType poppler_fonts_iter_get_font_type
                                                (PopplerFontsIter *iter);

`iter` : |
Returns : |

### poppler_fonts_iter_is_embedded ()

    gboolean    poppler_fonts_iter_is_embedded  (PopplerFontsIter *iter);

`iter` : |
Returns : |

### poppler_fonts_iter_is_subset ()

    gboolean    poppler_fonts_iter_is_subset    (PopplerFontsIter *iter);

`iter` : |
Returns : |

### poppler_fonts_iter_next ()

    gboolean    poppler_fonts_iter_next         (PopplerFontsIter *iter);

`iter` : |
Returns : |

### poppler_ps_file_new ()

    PopplerPSFile* poppler_ps_file_new          (PopplerDocument *document,
                                                 const char *filename,
                                                 int first_page,
                                                 int n_pages);

Create a new postscript file to render to

`document` : | a PopplerDocument
`filename` : | the path of the output filename
`first_page` : | the first page to print
`n_pages` : | the number of pages to print
Returns : | a PopplerPSFile

### poppler_ps_file_set_paper_size ()

    void        poppler_ps_file_set_paper_size  (PopplerPSFile *ps_file,
                                                 double width,
                                                 double height);

Set the output paper size. These values will end up in the DocumentMedia, the BoundingBox DSC comments and other places in the generated PostScript.

`ps_file` : | a PopplerPSFile which was not yet printed to.
`width` : | the paper width in 1/72 inch
`height` : | the paper height in 1/72 inch

### poppler_ps_file_set_duplex ()

    void        poppler_ps_file_set_duplex      (PopplerPSFile *ps_file,
                                                 gboolean duplex);

Enable or disable Duplex printing.

`ps_file` : | a PopplerPSFile which was not yet printed to
`duplex` : | whether to force duplex printing (on printers which support this)

### poppler_ps_file_free ()

    void        poppler_ps_file_free            (PopplerPSFile *ps_file);

Frees `ps_file`

`ps_file` : | a PopplerPSFile