diff options
author | Marek Kasik <mkasik@redhat.com> | 2019-06-12 19:01:29 +0200 |
---|---|---|
committer | Marek Kasik <mkasik@redhat.com> | 2019-08-21 09:42:40 +0000 |
commit | 18afdb2eef77b39df78bdbf6c9b03f861779e433 (patch) | |
tree | 6842e64449de5d814e6a7045586d833522df83c2 | |
parent | 40ec62ce12b18f13d84d14a102b8b7c8abafedab (diff) |
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
-rw-r--r-- | glib/poppler-document.cc | 44 | ||||
-rw-r--r-- | glib/poppler-document.h | 3 | ||||
-rw-r--r-- | glib/reference/poppler-sections.txt | 1 |
3 files changed, 48 insertions, 0 deletions
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 @@ -1776,6 +1776,50 @@ poppler_page_range_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<std::pair<int, int>> 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 |