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