Commit bd197adf8c23b384bd245e51d2327a62fe68bada

Authored by m-holger
1 parent 2bd0657d

Refactor `QPDF::getAllPages` usage: replace with `Pages::all` across `QPDFWriter`.

libqpdf/QPDFWriter.cc
... ... @@ -2127,9 +2127,8 @@ void
2127 2127 QPDFWriter::Members::initializeSpecialStreams()
2128 2128 {
2129 2129 // Mark all page content streams in case we are filtering or normalizing.
2130   - std::vector<QPDFObjectHandle> pages = qpdf.getAllPages();
2131 2130 int num = 0;
2132   - for (auto& page: pages) {
  2131 + for (auto& page: pages.all()) {
2133 2132 page_object_to_seq[page.getObjGen()] = ++num;
2134 2133 QPDFObjectHandle contents = page.getKey("/Contents");
2135 2134 std::vector<QPDFObjGen> contents_objects;
... ... @@ -2381,7 +2380,7 @@ QPDFWriter::Members::doWriteSetup()
2381 2380 if (!obj.streams_empty) {
2382 2381 if (linearized) {
2383 2382 // Page dictionaries are not allowed to be compressed objects.
2384   - for (auto& page: qpdf.getAllPages()) {
  2383 + for (auto& page: qpdf.doc().pages().all()) {
2385 2384 if (obj[page].object_stream > 0) {
2386 2385 obj[page].object_stream = 0;
2387 2386 }
... ... @@ -2911,14 +2910,11 @@ QPDFWriter::Members::writeLinearized()
2911 2910 openObject(lindict_id);
2912 2911 write("<<");
2913 2912 if (pass == 2) {
2914   - std::vector<QPDFObjectHandle> const& pages = qpdf.getAllPages();
2915   - int first_page_object = obj[pages.at(0)].renumber;
2916   -
2917 2913 write(" /Linearized 1 /L ").write(file_size + hint_length);
2918 2914 // Implementation note 121 states that a space is mandatory after this open bracket.
2919 2915 write(" /H [ ").write(new_obj[hint_id].xref.getOffset()).write(" ");
2920 2916 write(hint_length);
2921   - write(" ] /O ").write(first_page_object);
  2917 + write(" ] /O ").write(obj[pages.all().at(0)].renumber);
2922 2918 write(" /E ").write(part6_end_offset + hint_length);
2923 2919 write(" /N ").write(pages.size());
2924 2920 write(" /T ").write(space_before_zero + hint_length);
... ... @@ -3137,17 +3133,15 @@ QPDFWriter::Members::enqueueObjectsPCLm()
3137 3133 std::string image_transform_content = "q /image Do Q\n";
3138 3134  
3139 3135 // enqueue all pages first
3140   - std::vector<QPDFObjectHandle> all = qpdf.getAllPages();
3141   - for (auto& page: all) {
  3136 + for (auto& page: pages.all()) {
3142 3137 // enqueue page
3143 3138 enqueueObject(page);
3144 3139  
3145 3140 // enqueue page contents stream
3146   - enqueueObject(page.getKey("/Contents"));
  3141 + enqueueObject(page["/Contents"]);
3147 3142  
3148 3143 // enqueue all the strips for each page
3149   - QPDFObjectHandle strips = page.getKey("/Resources").getKey("/XObject");
3150   - for (auto& image: strips.as_dictionary()) {
  3144 + for (auto& image: Dictionary(page["/Resources"]["/XObject"])) {
3151 3145 if (!image.second.null()) {
3152 3146 enqueueObject(image.second);
3153 3147 enqueueObject(QPDFObjectHandle::newStream(&qpdf, image_transform_content));
... ...
libqpdf/qpdf/QPDF_private.hh
... ... @@ -316,11 +316,7 @@ class QPDF::Doc
316 316 Common& operator=(Common&&) = delete;
317 317 ~Common() = default;
318 318  
319   - Common(QPDF& qpdf, QPDF::Members* m) :
320   - qpdf(qpdf),
321   - m(m)
322   - {
323   - }
  319 + inline Common(QPDF& qpdf, QPDF::Members* m);
324 320  
325 321 void stopOnError(std::string const& message);
326 322 void warn(QPDFExc const& e);
... ... @@ -355,6 +351,8 @@ class QPDF::Doc
355 351 protected:
356 352 QPDF& qpdf;
357 353 QPDF::Members* m;
  354 +
  355 + QPDF::Doc::Pages& pages;
358 356 };
359 357  
360 358 Doc() = delete;
... ... @@ -1001,6 +999,13 @@ class QPDF::Doc::Resolver
1001 999 }
1002 1000 };
1003 1001  
  1002 +inline QPDF::Doc::Common::Common(QPDF& qpdf, QPDF::Members* m) :
  1003 + qpdf(qpdf),
  1004 + m(m),
  1005 + pages(m->pages)
  1006 +{
  1007 +}
  1008 +
1004 1009 inline QPDF::Doc::Linearization&
1005 1010 QPDF::Doc::linearization()
1006 1011 {
... ...