/* poppler-document.h: glib interface to poppler
 * Copyright (C) 2004, Red Hat, Inc.
 *
 * Copyright (C) 2016 Jakub Alba <jakubalba@gmail.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2, or (at your option)
 * any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
 */

#ifndef __POPPLER_DOCUMENT_H__
#define __POPPLER_DOCUMENT_H__

#include <glib-object.h>
#include <gio/gio.h>
#include "poppler.h"

G_BEGIN_DECLS

#define POPPLER_TYPE_DOCUMENT             (poppler_document_get_type ())
#define POPPLER_DOCUMENT(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), POPPLER_TYPE_DOCUMENT, PopplerDocument))
#define POPPLER_IS_DOCUMENT(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), POPPLER_TYPE_DOCUMENT))

/**
 * PopplerPageLayout:
 * @POPPLER_PAGE_LAYOUT_UNSET: no specific layout set
 * @POPPLER_PAGE_LAYOUT_SINGLE_PAGE: one page at a time
 * @POPPLER_PAGE_LAYOUT_ONE_COLUMN: pages in one column
 * @POPPLER_PAGE_LAYOUT_TWO_COLUMN_LEFT: pages in two columns with odd numbered pages on the left
 * @POPPLER_PAGE_LAYOUT_TWO_COLUMN_RIGHT: pages in two columns with odd numbered pages on the right
 * @POPPLER_PAGE_LAYOUT_TWO_PAGE_LEFT: two pages at a time with odd numbered pages on the left
 * @POPPLER_PAGE_LAYOUT_TWO_PAGE_RIGHT: two pages at a time with odd numbered pages on the right
 *
 * Page layout types
 */
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;

/**
 * PopplerPageMode:
 * @POPPLER_PAGE_MODE_UNSET: no specific mode set
 * @POPPLER_PAGE_MODE_NONE: neither document outline nor thumbnails visible
 * @POPPLER_PAGE_MODE_USE_OUTLINES: document outline visible
 * @POPPLER_PAGE_MODE_USE_THUMBS: thumbnails visible
 * @POPPLER_PAGE_MODE_FULL_SCREEN: full-screen mode
 * @POPPLER_PAGE_MODE_USE_OC: layers panel visible
 * @POPPLER_PAGE_MODE_USE_ATTACHMENTS: attachments panel visible
 *
 * Page modes
 */
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;

/**
 * PopplerFontType:
 * @POPPLER_FONT_TYPE_UNKNOWN: unknown font type
 * @POPPLER_FONT_TYPE_TYPE1: Type 1 font type
 * @POPPLER_FONT_TYPE_TYPE1C: Type 1 font type embedded in Compact Font Format (CFF) font program
 * @POPPLER_FONT_TYPE_TYPE1COT: Type 1 font type embedded in OpenType font program
 * @POPPLER_FONT_TYPE_TYPE3: A font type that is defined with PDF graphics operators
 * @POPPLER_FONT_TYPE_TRUETYPE: TrueType font type
 * @POPPLER_FONT_TYPE_TRUETYPEOT: TrueType font type embedded in OpenType font program
 * @POPPLER_FONT_TYPE_CID_TYPE0: CIDFont type based on Type 1 font technology
 * @POPPLER_FONT_TYPE_CID_TYPE0C: CIDFont type based on Type 1 font technology embedded in CFF font program
 * @POPPLER_FONT_TYPE_CID_TYPE0COT: CIDFont type based on Type 1 font technology embedded in OpenType font program
 * @POPPLER_FONT_TYPE_CID_TYPE2: CIDFont type based on TrueType font technology
 * @POPPLER_FONT_TYPE_CID_TYPE2OT: CIDFont type based on TrueType font technology embedded in OpenType font program
 *
 * Font types
 */
typedef enum
{
  POPPLER_FONT_TYPE_UNKNOWN,
  POPPLER_FONT_TYPE_TYPE1,
  POPPLER_FONT_TYPE_TYPE1C,
  POPPLER_FONT_TYPE_TYPE1COT,
  POPPLER_FONT_TYPE_TYPE3,
  POPPLER_FONT_TYPE_TRUETYPE,
  POPPLER_FONT_TYPE_TRUETYPEOT,
  POPPLER_FONT_TYPE_CID_TYPE0,
  POPPLER_FONT_TYPE_CID_TYPE0C,
  POPPLER_FONT_TYPE_CID_TYPE0COT,
  POPPLER_FONT_TYPE_CID_TYPE2,
  POPPLER_FONT_TYPE_CID_TYPE2OT
} PopplerFontType;

/**
 * PopplerViewerPreferences:
 * @POPPLER_VIEWER_PREFERENCES_UNSET: no preferences set
 * @POPPLER_VIEWER_PREFERENCES_HIDE_TOOLBAR: hider toolbars when document is active
 * @POPPLER_VIEWER_PREFERENCES_HIDE_MENUBAR: hide menu bar when document is active
 * @POPPLER_VIEWER_PREFERENCES_HIDE_WINDOWUI: hide UI elements in document's window
 * @POPPLER_VIEWER_PREFERENCES_FIT_WINDOW: resize document's window to fit the size of the first displayed page
 * @POPPLER_VIEWER_PREFERENCES_CENTER_WINDOW: position the document's window in the center of the screen
 * @POPPLER_VIEWER_PREFERENCES_DISPLAY_DOC_TITLE: display document title in window's title bar
 * @POPPLER_VIEWER_PREFERENCES_DIRECTION_RTL: the predominant reading order for text is right to left
 *
 * Viewer preferences
 */
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;

/**
 * PopplerPermissions:
 * @POPPLER_PERMISSIONS_OK_TO_PRINT: document can be printer
 * @POPPLER_PERMISSIONS_OK_TO_MODIFY: document contents can be modified
 * @POPPLER_PERMISSIONS_OK_TO_COPY: document can be copied
 * @POPPLER_PERMISSIONS_OK_TO_ADD_NOTES: annotations can added to the document
 * @POPPLER_PERMISSIONS_OK_TO_FILL_FORM: interactive form fields can be filled in
 * @POPPLER_PERMISSIONS_OK_TO_EXTRACT_CONTENTS: extract text and graphics
 * (in support of accessibility to users with disabilities or for other purposes). Since 0.18
 * @POPPLER_PERMISSIONS_OK_TO_ASSEMBLE: assemble the document (insert, rotate, or delete pages and create
 * bookmarks or thumbnail images). Since 0.18
 * @POPPLER_PERMISSIONS_OK_TO_PRINT_HIGH_RESOLUTION: document can be printer at high resolution. Since 0.18
 * @POPPLER_PERMISSIONS_FULL: document permits all operations
 *
 * Permissions
 */
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_OK_TO_FILL_FORM = 1 << 4,
  POPPLER_PERMISSIONS_OK_TO_EXTRACT_CONTENTS = 1 << 5,
  POPPLER_PERMISSIONS_OK_TO_ASSEMBLE = 1 << 6,
  POPPLER_PERMISSIONS_OK_TO_PRINT_HIGH_RESOLUTION = 1 << 7,
  POPPLER_PERMISSIONS_FULL = (POPPLER_PERMISSIONS_OK_TO_PRINT | POPPLER_PERMISSIONS_OK_TO_MODIFY | POPPLER_PERMISSIONS_OK_TO_COPY | POPPLER_PERMISSIONS_OK_TO_ADD_NOTES | POPPLER_PERMISSIONS_OK_TO_FILL_FORM | POPPLER_PERMISSIONS_OK_TO_EXTRACT_CONTENTS | POPPLER_PERMISSIONS_OK_TO_ASSEMBLE | POPPLER_PERMISSIONS_OK_TO_PRINT_HIGH_RESOLUTION)

} PopplerPermissions;

/**
 * PopplerPDFSubtype:
 * @POPPLER_PDF_SUBTYPE_UNSET: Null
 * @POPPLER_PDF_SUBTYPE_PDF_A: ISO 19005 - Document management -- Electronic document file format for long-term preservation (PDF/A)
 * @POPPLER_PDF_SUBTYPE_PDF_E: ISO 24517 - Document management -- Engineering document format using PDF (PDF/E)
 * @POPPLER_PDF_SUBTYPE_PDF_UA: ISO 14289 - Document management applications -- Electronic document file format enhancement for accessibility (PDF/UA)
 * @POPPLER_PDF_SUBTYPE_PDF_VT: ISO 16612 - Graphic technology -- Variable data exchange (PDF/VT)
 * @POPPLER_PDF_SUBTYPE_PDF_X: ISO 15930 - Graphic technology -- Prepress digital data exchange (PDF/X)
 * @POPPLER_PDF_SUBTYPE_NONE: Not compliant with the above standards
 *
 * PDF Subtype
 *
 * Since: 0.70
 */
typedef enum
{
  POPPLER_PDF_SUBTYPE_UNSET,
  POPPLER_PDF_SUBTYPE_PDF_A,
  POPPLER_PDF_SUBTYPE_PDF_E,
  POPPLER_PDF_SUBTYPE_PDF_UA,
  POPPLER_PDF_SUBTYPE_PDF_VT,
  POPPLER_PDF_SUBTYPE_PDF_X,
  POPPLER_PDF_SUBTYPE_NONE
} PopplerPDFSubtype;

/**
 * PopplerPDFPart:
 * @POPPLER_PDF_SUBTYPE_PART_UNSET: Null
 * @POPPLER_PDF_SUBTYPE_PART_1: 1
 * @POPPLER_PDF_SUBTYPE_PART_2: 2
 * @POPPLER_PDF_SUBTYPE_PART_3: 3
 * @POPPLER_PDF_SUBTYPE_PART_4: 4
 * @POPPLER_PDF_SUBTYPE_PART_5: 5
 * @POPPLER_PDF_SUBTYPE_PART_6: 6
 * @POPPLER_PDF_SUBTYPE_PART_7: 7
 * @POPPLER_PDF_SUBTYPE_PART_8: 8
 * @POPPLER_PDF_SUBTYPE_PART_NONE: No part available
 *
 * PDF Subtype Part
 *
 * Since: 0.70
 */
typedef enum
{
  POPPLER_PDF_SUBTYPE_PART_UNSET,
  POPPLER_PDF_SUBTYPE_PART_1,
  POPPLER_PDF_SUBTYPE_PART_2,
  POPPLER_PDF_SUBTYPE_PART_3,
  POPPLER_PDF_SUBTYPE_PART_4,
  POPPLER_PDF_SUBTYPE_PART_5,
  POPPLER_PDF_SUBTYPE_PART_6,
  POPPLER_PDF_SUBTYPE_PART_7,
  POPPLER_PDF_SUBTYPE_PART_8,
  POPPLER_PDF_SUBTYPE_PART_NONE
} PopplerPDFPart;

/**
 * PopplerPDFConformance:
 * @POPPLER_PDF_SUBTYPE_CONF_UNSET: Null
 * @POPPLER_PDF_SUBTYPE_CONF_A: Level A (accessible) conformance (PDF/A)
 * @POPPLER_PDF_SUBTYPE_CONF_B: Level B (basic) conformance (PDF/A)
 * @POPPLER_PDF_SUBTYPE_CONF_G: Level G (external graphical content) (PDF/X)
 * @POPPLER_PDF_SUBTYPE_CONF_N: Level N (external ICC Profile) (PDF/X)
 * @POPPLER_PDF_SUBTYPE_CONF_P: Level P (ICC Profile) (PDF/X)
 * @POPPLER_PDF_SUBTYPE_CONF_PG: Level PG (conjuction of P and G) (PDF/X)
 * @POPPLER_PDF_SUBTYPE_CONF_U: Level U (Unicode) conformance (PDF/A)
 * @POPPLER_PDF_SUBTYPE_CONF_NONE: No conformance level available
 *
 * PDF Subtype Conformance
 *
 * Since: 0.70
 */
typedef enum
{
  POPPLER_PDF_SUBTYPE_CONF_UNSET,
  POPPLER_PDF_SUBTYPE_CONF_A,
  POPPLER_PDF_SUBTYPE_CONF_B,
  POPPLER_PDF_SUBTYPE_CONF_G,
  POPPLER_PDF_SUBTYPE_CONF_N,
  POPPLER_PDF_SUBTYPE_CONF_P,
  POPPLER_PDF_SUBTYPE_CONF_PG,
  POPPLER_PDF_SUBTYPE_CONF_U,
  POPPLER_PDF_SUBTYPE_CONF_NONE
} PopplerPDFConformance;

POPPLER_PUBLIC
GType              poppler_document_get_type               (void) G_GNUC_CONST;
POPPLER_PUBLIC
PopplerDocument   *poppler_document_new_from_file          (const char      *uri,
							    const char      *password,
							    GError         **error);
POPPLER_PUBLIC
PopplerDocument   *poppler_document_new_from_data          (char            *data,
							    int              length,
							    const char      *password,
							    GError         **error);
POPPLER_PUBLIC
PopplerDocument   *poppler_document_new_from_stream        (GInputStream    *stream,
                                                            goffset          length,
                                                            const char      *password,
                                                            GCancellable    *cancellable,
                                                            GError         **error);
POPPLER_PUBLIC
PopplerDocument   *poppler_document_new_from_gfile         (GFile           *file,
                                                            const char      *password,
                                                            GCancellable    *cancellable,
                                                            GError         **error);
POPPLER_PUBLIC
gboolean           poppler_document_save                   (PopplerDocument *document,
							    const char      *uri,
							    GError         **error);
POPPLER_PUBLIC
gboolean           poppler_document_save_a_copy            (PopplerDocument *document,
							    const char      *uri,
							    GError         **error);
POPPLER_PUBLIC
gboolean           poppler_document_get_id                 (PopplerDocument *document,
							    gchar          **permanent_id,
							    gchar          **update_id);
POPPLER_PUBLIC
int                poppler_document_get_n_pages            (PopplerDocument *document);
POPPLER_PUBLIC
PopplerPage       *poppler_document_get_page               (PopplerDocument *document,
							    int              index);
POPPLER_PUBLIC
PopplerPage       *poppler_document_get_page_by_label      (PopplerDocument *document,
							    const char      *label);
POPPLER_PUBLIC
gchar             *poppler_document_get_pdf_version_string (PopplerDocument *document);
POPPLER_PUBLIC
void               poppler_document_get_pdf_version        (PopplerDocument *document,
							    guint           *major_version,
							    guint           *minor_version);
POPPLER_PUBLIC
gchar             *poppler_document_get_title              (PopplerDocument *document);
POPPLER_PUBLIC
void               poppler_document_set_title              (PopplerDocument *document,
							    const gchar     *title);
POPPLER_PUBLIC
gchar             *poppler_document_get_author             (PopplerDocument *document);
POPPLER_PUBLIC
void               poppler_document_set_author             (PopplerDocument *document,
							    const gchar     *author);
POPPLER_PUBLIC
gchar             *poppler_document_get_subject            (PopplerDocument *document);
POPPLER_PUBLIC
void               poppler_document_set_subject            (PopplerDocument *document,
							    const gchar     *subject);
POPPLER_PUBLIC
gchar             *poppler_document_get_keywords           (PopplerDocument *document);
POPPLER_PUBLIC
void               poppler_document_set_keywords           (PopplerDocument *document,
                                                            const gchar     *keywords);
POPPLER_PUBLIC
gchar             *poppler_document_get_creator            (PopplerDocument *document);
POPPLER_PUBLIC
void               poppler_document_set_creator            (PopplerDocument *document,
                                                            const gchar     *creator);
POPPLER_PUBLIC
gchar             *poppler_document_get_producer           (PopplerDocument *document);
POPPLER_PUBLIC
void               poppler_document_set_producer           (PopplerDocument *document,
                                                            const gchar     *producer);
POPPLER_PUBLIC
time_t             poppler_document_get_creation_date      (PopplerDocument *document);
POPPLER_PUBLIC
void               poppler_document_set_creation_date      (PopplerDocument *document,
                                                            time_t           creation_date);
POPPLER_PUBLIC
time_t             poppler_document_get_modification_date  (PopplerDocument *document);
POPPLER_PUBLIC
void               poppler_document_set_modification_date  (PopplerDocument *document,
                                                            time_t           modification_date);
POPPLER_PUBLIC
gboolean           poppler_document_is_linearized          (PopplerDocument *document);
POPPLER_PUBLIC
PopplerPageLayout  poppler_document_get_page_layout        (PopplerDocument *document);
POPPLER_PUBLIC
PopplerPageMode    poppler_document_get_page_mode          (PopplerDocument *document);
POPPLER_PUBLIC
PopplerPermissions poppler_document_get_permissions        (PopplerDocument *document);
POPPLER_PUBLIC
gchar             *poppler_document_get_pdf_subtype_string (PopplerDocument *document);
POPPLER_PUBLIC
PopplerPDFSubtype  poppler_document_get_pdf_subtype        (PopplerDocument *document);
POPPLER_PUBLIC
PopplerPDFPart     poppler_document_get_pdf_part           (PopplerDocument *document);
POPPLER_PUBLIC
PopplerPDFConformance poppler_document_get_pdf_conformance (PopplerDocument *document);
POPPLER_PUBLIC
gchar             *poppler_document_get_metadata           (PopplerDocument *document);

/* Attachments */
POPPLER_PUBLIC
guint              poppler_document_get_n_attachments      (PopplerDocument  *document);
POPPLER_PUBLIC
gboolean           poppler_document_has_attachments        (PopplerDocument  *document);
POPPLER_PUBLIC
GList             *poppler_document_get_attachments        (PopplerDocument  *document);

/* Links */
POPPLER_PUBLIC
PopplerDest       *poppler_document_find_dest              (PopplerDocument  *document,
							    const gchar      *link_name);

/* Form */
POPPLER_PUBLIC
PopplerFormField  *poppler_document_get_form_field         (PopplerDocument  *document,
							    gint              id);

/* Interface for getting the Index of a poppler_document */
#define POPPLER_TYPE_INDEX_ITER                 (poppler_index_iter_get_type ())
POPPLER_PUBLIC
GType             poppler_index_iter_get_type   (void) G_GNUC_CONST;
POPPLER_PUBLIC
PopplerIndexIter *poppler_index_iter_new        (PopplerDocument   *document);
POPPLER_PUBLIC
PopplerIndexIter *poppler_index_iter_copy       (PopplerIndexIter  *iter);
POPPLER_PUBLIC
void              poppler_index_iter_free       (PopplerIndexIter  *iter);

POPPLER_PUBLIC
PopplerIndexIter *poppler_index_iter_get_child  (PopplerIndexIter  *parent);
POPPLER_PUBLIC
gboolean	  poppler_index_iter_is_open    (PopplerIndexIter  *iter);
POPPLER_PUBLIC
PopplerAction    *poppler_index_iter_get_action (PopplerIndexIter  *iter);
POPPLER_PUBLIC
gboolean          poppler_index_iter_next       (PopplerIndexIter  *iter);

/* Interface for getting the Fonts of a poppler_document */
#define POPPLER_TYPE_FONT_INFO             (poppler_font_info_get_type ())
#define POPPLER_FONT_INFO(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), POPPLER_TYPE_FONT_INFO, PopplerFontInfo))
#define POPPLER_IS_FONT_INFO(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), POPPLER_TYPE_FONT_INFO))
POPPLER_PUBLIC
GType             poppler_font_info_get_type       (void) G_GNUC_CONST;
POPPLER_PUBLIC
PopplerFontInfo  *poppler_font_info_new            (PopplerDocument   *document);
POPPLER_PUBLIC
gboolean          poppler_font_info_scan           (PopplerFontInfo   *font_info,
						    int                n_pages,
						    PopplerFontsIter **iter);
POPPLER_PUBLIC
void             poppler_font_info_free            (PopplerFontInfo   *font_info);

#define POPPLER_TYPE_FONTS_ITER                    (poppler_fonts_iter_get_type ())
POPPLER_PUBLIC
GType             poppler_fonts_iter_get_type      (void) G_GNUC_CONST;
POPPLER_PUBLIC
PopplerFontsIter *poppler_fonts_iter_copy          (PopplerFontsIter  *iter);
POPPLER_PUBLIC
void              poppler_fonts_iter_free          (PopplerFontsIter  *iter);
POPPLER_PUBLIC
const char       *poppler_fonts_iter_get_name      (PopplerFontsIter  *iter);
POPPLER_PUBLIC
const char       *poppler_fonts_iter_get_full_name (PopplerFontsIter  *iter);
POPPLER_PUBLIC
const char       *poppler_fonts_iter_get_substitute_name (PopplerFontsIter *iter);
POPPLER_PUBLIC
const char       *poppler_fonts_iter_get_file_name (PopplerFontsIter  *iter);
POPPLER_PUBLIC
PopplerFontType   poppler_fonts_iter_get_font_type (PopplerFontsIter  *iter);
POPPLER_PUBLIC
const char       *poppler_fonts_iter_get_encoding  (PopplerFontsIter *iter);
POPPLER_PUBLIC
gboolean	  poppler_fonts_iter_is_embedded   (PopplerFontsIter  *iter);
POPPLER_PUBLIC
gboolean	  poppler_fonts_iter_is_subset     (PopplerFontsIter  *iter);
POPPLER_PUBLIC
gboolean          poppler_fonts_iter_next          (PopplerFontsIter  *iter);

/* Interface for getting the Layers of a poppler_document */
#define POPPLER_TYPE_LAYERS_ITER                   (poppler_layers_iter_get_type ())
POPPLER_PUBLIC
GType              poppler_layers_iter_get_type    (void) G_GNUC_CONST;
POPPLER_PUBLIC
PopplerLayersIter *poppler_layers_iter_new         (PopplerDocument   *document);
POPPLER_PUBLIC
PopplerLayersIter *poppler_layers_iter_copy        (PopplerLayersIter *iter);
POPPLER_PUBLIC
void               poppler_layers_iter_free        (PopplerLayersIter *iter);

POPPLER_PUBLIC
PopplerLayersIter *poppler_layers_iter_get_child   (PopplerLayersIter *parent);
POPPLER_PUBLIC
gchar             *poppler_layers_iter_get_title   (PopplerLayersIter *iter);
POPPLER_PUBLIC
PopplerLayer      *poppler_layers_iter_get_layer   (PopplerLayersIter *iter);
POPPLER_PUBLIC
gboolean           poppler_layers_iter_next        (PopplerLayersIter *iter);

/* Export to ps */
#define POPPLER_TYPE_PS_FILE             (poppler_ps_file_get_type ())
#define POPPLER_PS_FILE(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), POPPLER_TYPE_PS_FILE, PopplerPSFile))
#define POPPLER_IS_PS_FILE(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), POPPLER_TYPE_PS_FILE))
POPPLER_PUBLIC
GType          poppler_ps_file_get_type       (void) G_GNUC_CONST;
POPPLER_PUBLIC
PopplerPSFile *poppler_ps_file_new            (PopplerDocument *document,
                                               const char      *filename,
                                               int              first_page,
                                               int              n_pages);
POPPLER_PUBLIC
void           poppler_ps_file_set_paper_size (PopplerPSFile   *ps_file,
                                               double           width,
                                               double           height);
POPPLER_PUBLIC
void           poppler_ps_file_set_duplex     (PopplerPSFile   *ps_file,
                                               gboolean         duplex);
POPPLER_PUBLIC
void           poppler_ps_file_free           (PopplerPSFile   *ps_file);



G_END_DECLS

#endif /* __POPPLER_DOCUMENT_H__ */
