Commit edef2cd330d0f4ca77f75e7192628a64bf67de3e

Authored by Jay Berkenbilt
1 parent f2409f4f

QPDFJob: make remaining members private

include/qpdf/QPDFJob.hh
@@ -284,9 +284,8 @@ class QPDFJob @@ -284,9 +284,8 @@ class QPDFJob
284 QPDF_DLL 284 QPDF_DLL
285 std::shared_ptr<Config> config(); 285 std::shared_ptr<Config> config();
286 286
287 - // QXXXQ set options -- implemented in QPDFJob_options.cc  
288 -  
289 - // QXXXQ these will not be in the final interface 287 + // Options for helping the qpdf CLI use the correct edit code and
  288 + // properly report warnings.
290 QPDF_DLL 289 QPDF_DLL
291 bool suppressWarnings(); 290 bool suppressWarnings();
292 QPDF_DLL 291 QPDF_DLL
@@ -295,7 +294,6 @@ class QPDFJob @@ -295,7 +294,6 @@ class QPDFJob
295 bool checkRequiresPassword(); 294 bool checkRequiresPassword();
296 QPDF_DLL 295 QPDF_DLL
297 bool checkIsEncrypted(); 296 bool checkIsEncrypted();
298 - // /QXXXQ  
299 297
300 // Execute the job 298 // Execute the job
301 QPDF_DLL 299 QPDF_DLL
@@ -320,17 +318,12 @@ class QPDFJob @@ -320,17 +318,12 @@ class QPDFJob
320 void doIfVerbose( 318 void doIfVerbose(
321 std::function<void(std::ostream&, std::string const& prefix)> fn); 319 std::function<void(std::ostream&, std::string const& prefix)> fn);
322 320
323 -  
324 - private:  
325 - public: // QXXXQ 321 + // Provide a string that is the help information ("schema" for the
  322 + // qpdf-specific JSON object) for version 1 of the JSON output.
326 QPDF_DLL 323 QPDF_DLL
327 - static JSON json_schema(std::set<std::string>* keys = 0);  
328 -  
329 - private: // QXXXQ  
330 - QPDF_DLL  
331 - static void parse_object_id(  
332 - std::string const& objspec, bool& trailer, int& obj, int& gen); 324 + static std::string json_out_schema_v1();
333 325
  326 + private:
334 struct RotationSpec 327 struct RotationSpec
335 { 328 {
336 RotationSpec(int angle = 0, bool relative = false) : 329 RotationSpec(int angle = 0, bool relative = false) :
@@ -345,7 +338,6 @@ class QPDFJob @@ -345,7 +338,6 @@ class QPDFJob
345 338
346 enum password_mode_e { pm_bytes, pm_hex_bytes, pm_unicode, pm_auto }; 339 enum password_mode_e { pm_bytes, pm_hex_bytes, pm_unicode, pm_auto };
347 340
348 - public: // QXXXQ begin public  
349 struct UnderOverlay 341 struct UnderOverlay
350 { 342 {
351 UnderOverlay(char const* which) : 343 UnderOverlay(char const* which) :
@@ -368,13 +360,10 @@ class QPDFJob @@ -368,13 +360,10 @@ class QPDFJob
368 std::vector<int> repeat_pagenos; 360 std::vector<int> repeat_pagenos;
369 }; 361 };
370 362
371 - size_t oi_min_width;  
372 - size_t oi_min_height;  
373 - size_t oi_min_area;  
374 - // QXXXQ END-PUBLIC  
375 -  
376 - private:  
377 // Helper functions 363 // Helper functions
  364 + static JSON json_schema(std::set<std::string>* keys = 0);
  365 + static void parse_object_id(
  366 + std::string const& objspec, bool& trailer, int& obj, int& gen);
378 void parseRotationParameter(std::string const&); 367 void parseRotationParameter(std::string const&);
379 std::vector<int> parseNumrange(char const* range, int max); 368 std::vector<int> parseNumrange(char const* range, int max);
380 369
@@ -397,17 +386,19 @@ class QPDFJob @@ -397,17 +386,19 @@ class QPDFJob
397 std::vector<std::shared_ptr<QPDF>>& page_heap); 386 std::vector<std::shared_ptr<QPDF>>& page_heap);
398 bool shouldRemoveUnreferencedResources(QPDF& pdf); 387 bool shouldRemoveUnreferencedResources(QPDF& pdf);
399 void handleRotations(QPDF& pdf); 388 void handleRotations(QPDF& pdf);
  389 + void getUOPagenos(UnderOverlay& uo,
  390 + std::map<int, std::vector<int> >& pagenos);
400 void handleUnderOverlay(QPDF& pdf); 391 void handleUnderOverlay(QPDF& pdf);
401 void doUnderOverlayForPage( 392 void doUnderOverlayForPage(
402 QPDF& pdf, 393 QPDF& pdf,
403 - QPDFJob::UnderOverlay& uo, 394 + UnderOverlay& uo,
404 std::map<int, std::vector<int> >& pagenos, 395 std::map<int, std::vector<int> >& pagenos,
405 size_t page_idx, 396 size_t page_idx,
406 std::map<int, QPDFObjectHandle>& fo, 397 std::map<int, QPDFObjectHandle>& fo,
407 std::vector<QPDFPageObjectHelper>& pages, 398 std::vector<QPDFPageObjectHelper>& pages,
408 QPDFPageObjectHelper& dest_page, 399 QPDFPageObjectHelper& dest_page,
409 bool before); 400 bool before);
410 - void validateUnderOverlay(QPDF& pdf, QPDFJob::UnderOverlay* uo); 401 + void validateUnderOverlay(QPDF& pdf, UnderOverlay* uo);
411 void handleTransformations(QPDF& pdf); 402 void handleTransformations(QPDF& pdf);
412 void addAttachments(QPDF& pdf); 403 void addAttachments(QPDF& pdf);
413 void copyAttachments(QPDF& pdf); 404 void copyAttachments(QPDF& pdf);
@@ -556,6 +547,9 @@ class QPDFJob @@ -556,6 +547,9 @@ class QPDFJob
556 bool externalize_inline_images; 547 bool externalize_inline_images;
557 bool keep_inline_images; 548 bool keep_inline_images;
558 bool remove_page_labels; 549 bool remove_page_labels;
  550 + size_t oi_min_width;
  551 + size_t oi_min_height;
  552 + size_t oi_min_area;
559 size_t ii_min_bytes; 553 size_t ii_min_bytes;
560 UnderOverlay underlay; 554 UnderOverlay underlay;
561 UnderOverlay overlay; 555 UnderOverlay overlay;
libqpdf/QPDFJob.cc
@@ -43,7 +43,11 @@ namespace @@ -43,7 +43,11 @@ namespace
43 class ImageOptimizer: public QPDFObjectHandle::StreamDataProvider 43 class ImageOptimizer: public QPDFObjectHandle::StreamDataProvider
44 { 44 {
45 public: 45 public:
46 - ImageOptimizer(QPDFJob& o, QPDFObjectHandle& image); 46 + ImageOptimizer(QPDFJob& o,
  47 + size_t oi_min_width,
  48 + size_t oi_min_height,
  49 + size_t oi_min_area,
  50 + QPDFObjectHandle& image);
47 virtual ~ImageOptimizer() 51 virtual ~ImageOptimizer()
48 { 52 {
49 } 53 }
@@ -55,6 +59,9 @@ namespace @@ -55,6 +59,9 @@ namespace
55 59
56 private: 60 private:
57 QPDFJob& o; 61 QPDFJob& o;
  62 + size_t oi_min_width;
  63 + size_t oi_min_height;
  64 + size_t oi_min_area;
58 QPDFObjectHandle image; 65 QPDFObjectHandle image;
59 }; 66 };
60 67
@@ -101,8 +108,15 @@ namespace @@ -101,8 +108,15 @@ namespace
101 }; 108 };
102 } 109 }
103 110
104 -ImageOptimizer::ImageOptimizer(QPDFJob& o, QPDFObjectHandle& image) : 111 +ImageOptimizer::ImageOptimizer(QPDFJob& o,
  112 + size_t oi_min_width,
  113 + size_t oi_min_height,
  114 + size_t oi_min_area,
  115 + QPDFObjectHandle& image) :
105 o(o), 116 o(o),
  117 + oi_min_width(oi_min_width),
  118 + oi_min_height(oi_min_height),
  119 + oi_min_area(oi_min_area),
106 image(image) 120 image(image)
107 { 121 {
108 } 122 }
@@ -194,9 +208,9 @@ ImageOptimizer::makePipeline(std::string const&amp; description, Pipeline* next) @@ -194,9 +208,9 @@ ImageOptimizer::makePipeline(std::string const&amp; description, Pipeline* next)
194 } 208 }
195 return result; 209 return result;
196 } 210 }
197 - if (((o.oi_min_width > 0) && (w <= o.oi_min_width)) ||  
198 - ((o.oi_min_height > 0) && (h <= o.oi_min_height)) ||  
199 - ((o.oi_min_area > 0) && ((w * h) <= o.oi_min_area))) 211 + if (((this->oi_min_width > 0) && (w <= this->oi_min_width)) ||
  212 + ((this->oi_min_height > 0) && (h <= this->oi_min_height)) ||
  213 + ((this->oi_min_area > 0) && ((w * h) <= this->oi_min_area)))
200 { 214 {
201 QTC::TC("qpdf", "qpdf image optimize too small"); 215 QTC::TC("qpdf", "qpdf image optimize too small");
202 if (! description.empty()) 216 if (! description.empty())
@@ -415,7 +429,10 @@ QPDFJob::Members::Members() : @@ -415,7 +429,10 @@ QPDFJob::Members::Members() :
415 externalize_inline_images(false), 429 externalize_inline_images(false),
416 keep_inline_images(false), 430 keep_inline_images(false),
417 remove_page_labels(false), 431 remove_page_labels(false),
418 - ii_min_bytes(1024), // QXXXQ comment with oi_* 432 + oi_min_width(128), // Default values for these
  433 + oi_min_height(128), // oi and ii flags are in --help
  434 + oi_min_area(16384), // and in the manual.
  435 + ii_min_bytes(1024), //
419 underlay("underlay"), 436 underlay("underlay"),
420 overlay("overlay"), 437 overlay("overlay"),
421 under_overlay(0), 438 under_overlay(0),
@@ -427,9 +444,6 @@ QPDFJob::Members::Members() : @@ -427,9 +444,6 @@ QPDFJob::Members::Members() :
427 } 444 }
428 445
429 QPDFJob::QPDFJob() : 446 QPDFJob::QPDFJob() :
430 - oi_min_width(128), // Default values for these  
431 - oi_min_height(128), // oi flags are in --help  
432 - oi_min_area(16384), // and in the manual.  
433 m(new Members()) 447 m(new Members())
434 { 448 {
435 } 449 }
@@ -1803,6 +1817,12 @@ QPDFJob::json_schema(std::set&lt;std::string&gt;* keys) @@ -1803,6 +1817,12 @@ QPDFJob::json_schema(std::set&lt;std::string&gt;* keys)
1803 return schema; 1817 return schema;
1804 } 1818 }
1805 1819
  1820 +std::string
  1821 +QPDFJob::json_out_schema_v1()
  1822 +{
  1823 + return json_schema().unparse();
  1824 +}
  1825 +
1806 void 1826 void
1807 QPDFJob::doJSON(QPDF& pdf) 1827 QPDFJob::doJSON(QPDF& pdf)
1808 { 1828 {
@@ -2240,8 +2260,9 @@ QPDFJob::doUnderOverlayForPage( @@ -2240,8 +2260,9 @@ QPDFJob::doUnderOverlayForPage(
2240 } 2260 }
2241 } 2261 }
2242 2262
2243 -static void get_uo_pagenos(QPDFJob::UnderOverlay& uo,  
2244 - std::map<int, std::vector<int> >& pagenos) 2263 +void
  2264 +QPDFJob::getUOPagenos(QPDFJob::UnderOverlay& uo,
  2265 + std::map<int, std::vector<int> >& pagenos)
2245 { 2266 {
2246 size_t idx = 0; 2267 size_t idx = 0;
2247 size_t from_size = uo.from_pagenos.size(); 2268 size_t from_size = uo.from_pagenos.size();
@@ -2272,9 +2293,9 @@ QPDFJob::handleUnderOverlay(QPDF&amp; pdf) @@ -2272,9 +2293,9 @@ QPDFJob::handleUnderOverlay(QPDF&amp; pdf)
2272 return; 2293 return;
2273 } 2294 }
2274 std::map<int, std::vector<int> > underlay_pagenos; 2295 std::map<int, std::vector<int> > underlay_pagenos;
2275 - get_uo_pagenos(m->underlay, underlay_pagenos); 2296 + getUOPagenos(m->underlay, underlay_pagenos);
2276 std::map<int, std::vector<int> > overlay_pagenos; 2297 std::map<int, std::vector<int> > overlay_pagenos;
2277 - get_uo_pagenos(m->overlay, overlay_pagenos); 2298 + getUOPagenos(m->overlay, overlay_pagenos);
2278 std::map<int, QPDFObjectHandle> underlay_fo; 2299 std::map<int, QPDFObjectHandle> underlay_fo;
2279 std::map<int, QPDFObjectHandle> overlay_fo; 2300 std::map<int, QPDFObjectHandle> overlay_fo;
2280 std::vector<QPDFPageObjectHelper> upages; 2301 std::vector<QPDFPageObjectHelper> upages;
@@ -2439,7 +2460,6 @@ QPDFJob::copyAttachments(QPDF&amp; pdf) @@ -2439,7 +2460,6 @@ QPDFJob::copyAttachments(QPDF&amp; pdf)
2439 void 2460 void
2440 QPDFJob::handleTransformations(QPDF& pdf) 2461 QPDFJob::handleTransformations(QPDF& pdf)
2441 { 2462 {
2442 - QPDFJob& o = *this; // QXXXQ  
2443 QPDFPageDocumentHelper dh(pdf); 2463 QPDFPageDocumentHelper dh(pdf);
2444 std::shared_ptr<QPDFAcroFormDocumentHelper> afdh; 2464 std::shared_ptr<QPDFAcroFormDocumentHelper> afdh;
2445 auto make_afdh = [&]() { 2465 auto make_afdh = [&]() {
@@ -2474,7 +2494,9 @@ QPDFJob::handleTransformations(QPDF&amp; pdf) @@ -2474,7 +2494,9 @@ QPDFJob::handleTransformations(QPDF&amp; pdf)
2474 { 2494 {
2475 std::string name = iter2.first; 2495 std::string name = iter2.first;
2476 QPDFObjectHandle& image = iter2.second; 2496 QPDFObjectHandle& image = iter2.second;
2477 - ImageOptimizer* io = new ImageOptimizer(o, image); 2497 + ImageOptimizer* io = new ImageOptimizer(
  2498 + *this, m->oi_min_width, m->oi_min_height,
  2499 + m->oi_min_area, image);
2478 PointerHolder<QPDFObjectHandle::StreamDataProvider> sdp(io); 2500 PointerHolder<QPDFObjectHandle::StreamDataProvider> sdp(io);
2479 if (io->evaluate("image " + name + " on page " + 2501 if (io->evaluate("image " + name + " on page " +
2480 QUtil::int_to_string(pageno))) 2502 QUtil::int_to_string(pageno)))
libqpdf/QPDFJob_argv.cc
@@ -181,7 +181,7 @@ ArgParser::argJsonHelp() @@ -181,7 +181,7 @@ ArgParser::argJsonHelp()
181 << std::endl 181 << std::endl
182 << "be null, and others will have values that apply to unencrypted files." 182 << "be null, and others will have values that apply to unencrypted files."
183 << std::endl 183 << std::endl
184 - << QPDFJob::json_schema().unparse() 184 + << QPDFJob::json_out_schema_v1()
185 << std::endl; 185 << std::endl;
186 } 186 }
187 187
libqpdf/QPDFJob_config.cc
@@ -338,21 +338,21 @@ QPDFJob::Config::normalizeContent(char const* parameter) @@ -338,21 +338,21 @@ QPDFJob::Config::normalizeContent(char const* parameter)
338 QPDFJob::Config& 338 QPDFJob::Config&
339 QPDFJob::Config::oiMinArea(char const* parameter) 339 QPDFJob::Config::oiMinArea(char const* parameter)
340 { 340 {
341 - o.oi_min_area = QUtil::string_to_uint(parameter); 341 + o.m->oi_min_area = QUtil::string_to_uint(parameter);
342 return *this; 342 return *this;
343 } 343 }
344 344
345 QPDFJob::Config& 345 QPDFJob::Config&
346 QPDFJob::Config::oiMinHeight(char const* parameter) 346 QPDFJob::Config::oiMinHeight(char const* parameter)
347 { 347 {
348 - o.oi_min_height = QUtil::string_to_uint(parameter); 348 + o.m->oi_min_height = QUtil::string_to_uint(parameter);
349 return *this; 349 return *this;
350 } 350 }
351 351
352 QPDFJob::Config& 352 QPDFJob::Config&
353 QPDFJob::Config::oiMinWidth(char const* parameter) 353 QPDFJob::Config::oiMinWidth(char const* parameter)
354 { 354 {
355 - o.oi_min_width = QUtil::string_to_uint(parameter); 355 + o.m->oi_min_width = QUtil::string_to_uint(parameter);
356 return *this; 356 return *this;
357 } 357 }
358 358