Read PrintPageRange viewer preference
Lookup for PrintPageRange viewer preference
in constructor of ViewerPreferences and make
it available via getPrintPageRange() method.
https://gitlab.freedesktop.org/poppler/poppler/issues/290
diff --git a/poppler/ViewerPreferences.cc b/poppler/ViewerPreferences.cc
index 60eb31c..0ab4523 100644
--- a/poppler/ViewerPreferences.cc
+++ b/poppler/ViewerPreferences.cc
@@ -108,6 +108,30 @@
if (numCopies < 2)
numCopies = 1;
}
+
+ obj = prefDict->lookup("PrintPageRange");
+ if (obj.isArray()) {
+ Array *range = obj.getArray();
+ int length = range->getLength();
+ int pageNumber1, pageNumber2;
+
+ if (length % 2 == 1)
+ length--;
+
+ for (int i = 0; i < length; i += 2) {
+ Object obj2 = range->get(i);
+ Object obj3 = range->get(i + 1);
+
+ if (obj2.isInt() && (pageNumber1 = obj2.getInt()) >= 1 &&
+ obj3.isInt() && (pageNumber2 = obj3.getInt()) >= 1 &&
+ pageNumber1 < pageNumber2) {
+ printPageRange.push_back(std::pair<int, int>(pageNumber1, pageNumber2));
+ } else {
+ printPageRange.clear();
+ break;
+ }
+ }
+ }
}
ViewerPreferences::~ViewerPreferences()
diff --git a/poppler/ViewerPreferences.h b/poppler/ViewerPreferences.h
index 79d63f9..28e9299 100644
--- a/poppler/ViewerPreferences.h
+++ b/poppler/ViewerPreferences.h
@@ -12,6 +12,8 @@
#ifndef VIEWERPREFERENCES_H
#define VIEWERPREFERENCES_H
+#include <vector>
+
class Dict;
//------------------------------------------------------------------------
@@ -57,6 +59,7 @@
Duplex getDuplex() const { return duplex; }
bool getPickTrayByPDFSize() const { return pickTrayByPDFSize; }
int getNumCopies() const { return numCopies; }
+ std::vector<std::pair<int, int> > getPrintPageRange() const { return printPageRange; }
private:
@@ -74,6 +77,7 @@
Duplex duplex;
bool pickTrayByPDFSize;
int numCopies;
+ std::vector<std::pair<int, int> > printPageRange;
};
#endif