summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Kasik <mkasik@redhat.com>2019-06-12 19:01:29 +0200
committerMarek Kasik <mkasik@redhat.com>2019-08-21 09:42:40 +0000
commit18afdb2eef77b39df78bdbf6c9b03f861779e433 (patch)
tree6842e64449de5d814e6a7045586d833522df83c2
parent40ec62ce12b18f13d84d14a102b8b7c8abafedab (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.cc44
-rw-r--r--glib/poppler-document.h3
-rw-r--r--glib/reference/poppler-sections.txt1
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