From 18afdb2eef77b39df78bdbf6c9b03f861779e433 Mon Sep 17 00:00:00 2001 From: Marek Kasik Date: Wed, 12 Jun 2019 19:01:29 +0200 Subject: glib: Make PrintPageRange preference available in API Add poppler_document_get_print_page_ranges() so that applications which use poppler's glib frontend can access this preference. https://gitlab.freedesktop.org/poppler/poppler/issues/290 --- glib/poppler-document.cc | 44 +++++++++++++++++++++++++++++++++++++ glib/poppler-document.h | 3 +++ glib/reference/poppler-sections.txt | 1 + 3 files changed, 48 insertions(+) diff --git a/glib/poppler-document.cc b/glib/poppler-document.cc index 5c9e6a22..acd8157a 100644 --- a/glib/poppler-document.cc +++ b/glib/poppler-document.cc @@ -1775,6 +1775,50 @@ poppler_page_range_free (PopplerPageRange *range) g_slice_free (PopplerPageRange, range); } +/** + * poppler_document_get_print_page_ranges: + * @document: A #PopplerDocument + * @n_ranges: (out): return location for number of ranges + * + * Returns the suggested page ranges to print in the form of array + * of #PopplerPageRanges and number of ranges. + * + * Returns: (array length=n_ranges) (transfer full): an array + * of #PopplerPageRanges or NULL. Free the array when + * it is no longer needed. + * + * Since: 0.78 + **/ +PopplerPageRange * +poppler_document_get_print_page_ranges (PopplerDocument *document, + int *n_ranges) +{ + Catalog *catalog; + ViewerPreferences *preferences; + std::vector> ranges; + PopplerPageRange *result = nullptr; + + *n_ranges = 0; + g_return_val_if_fail (POPPLER_IS_DOCUMENT (document), NULL); + + catalog = document->doc->getCatalog (); + if (catalog && catalog->isOk ()) { + preferences = catalog->getViewerPreferences (); + if (preferences) { + ranges = preferences->getPrintPageRange (); + + *n_ranges = ranges.size (); + result = g_new (PopplerPageRange, ranges.size ()); + for (guint i = 0; i < ranges.size (); ++i) { + result[i].start_page = ranges[i].first; + result[i].end_page = ranges[i].second; + } + } + } + + return result; +} + /** * poppler_document_get_permissions: * @document: A #PopplerDocument diff --git a/glib/poppler-document.h b/glib/poppler-document.h index 98ceb75b..499991cd 100644 --- a/glib/poppler-document.h +++ b/glib/poppler-document.h @@ -398,6 +398,9 @@ POPPLER_PUBLIC PopplerPrintDuplex poppler_document_get_print_duplex (PopplerDocument *document); POPPLER_PUBLIC gint poppler_document_get_print_n_copies (PopplerDocument *document); +POPPLER_PUBLIC +PopplerPageRange *poppler_document_get_print_page_ranges (PopplerDocument *document, + int *n_ranges); /* Attachments */ POPPLER_PUBLIC diff --git a/glib/reference/poppler-sections.txt b/glib/reference/poppler-sections.txt index aff742dd..d94abf22 100644 --- a/glib/reference/poppler-sections.txt +++ b/glib/reference/poppler-sections.txt @@ -177,6 +177,7 @@ poppler_document_get_pdf_version_string poppler_document_get_permissions poppler_document_get_print_duplex poppler_document_get_print_n_copies +poppler_document_get_print_page_ranges poppler_document_get_print_scaling poppler_document_get_producer poppler_document_get_subject -- cgit v1.2.3