2
1
mirror of https://github.com/qpdf/qpdf.git synced 2024-05-29 16:30:53 +00:00

QPDFJob: make remaining members private

This commit is contained in:
Jay Berkenbilt 2022-01-26 16:40:14 -05:00
parent f2409f4fca
commit edef2cd330
4 changed files with 57 additions and 41 deletions

View File

@ -284,9 +284,8 @@ class QPDFJob
QPDF_DLL QPDF_DLL
std::shared_ptr<Config> config(); std::shared_ptr<Config> config();
// QXXXQ set options -- implemented in QPDFJob_options.cc // Options for helping the qpdf CLI use the correct edit code and
// properly report warnings.
// QXXXQ these will not be in the final interface
QPDF_DLL QPDF_DLL
bool suppressWarnings(); bool suppressWarnings();
QPDF_DLL QPDF_DLL
@ -295,7 +294,6 @@ class QPDFJob
bool checkRequiresPassword(); bool checkRequiresPassword();
QPDF_DLL QPDF_DLL
bool checkIsEncrypted(); bool checkIsEncrypted();
// /QXXXQ
// Execute the job // Execute the job
QPDF_DLL QPDF_DLL
@ -320,17 +318,12 @@ class QPDFJob
void doIfVerbose( void doIfVerbose(
std::function<void(std::ostream&, std::string const& prefix)> fn); std::function<void(std::ostream&, std::string const& prefix)> fn);
// Provide a string that is the help information ("schema" for the
// qpdf-specific JSON object) for version 1 of the JSON output.
QPDF_DLL
static std::string json_out_schema_v1();
private: private:
public: // QXXXQ
QPDF_DLL
static JSON json_schema(std::set<std::string>* keys = 0);
private: // QXXXQ
QPDF_DLL
static void parse_object_id(
std::string const& objspec, bool& trailer, int& obj, int& gen);
struct RotationSpec struct RotationSpec
{ {
RotationSpec(int angle = 0, bool relative = false) : RotationSpec(int angle = 0, bool relative = false) :
@ -345,7 +338,6 @@ class QPDFJob
enum password_mode_e { pm_bytes, pm_hex_bytes, pm_unicode, pm_auto }; enum password_mode_e { pm_bytes, pm_hex_bytes, pm_unicode, pm_auto };
public: // QXXXQ begin public
struct UnderOverlay struct UnderOverlay
{ {
UnderOverlay(char const* which) : UnderOverlay(char const* which) :
@ -368,13 +360,10 @@ class QPDFJob
std::vector<int> repeat_pagenos; std::vector<int> repeat_pagenos;
}; };
size_t oi_min_width;
size_t oi_min_height;
size_t oi_min_area;
// QXXXQ END-PUBLIC
private:
// Helper functions // Helper functions
static JSON json_schema(std::set<std::string>* keys = 0);
static void parse_object_id(
std::string const& objspec, bool& trailer, int& obj, int& gen);
void parseRotationParameter(std::string const&); void parseRotationParameter(std::string const&);
std::vector<int> parseNumrange(char const* range, int max); std::vector<int> parseNumrange(char const* range, int max);
@ -397,17 +386,19 @@ class QPDFJob
std::vector<std::shared_ptr<QPDF>>& page_heap); std::vector<std::shared_ptr<QPDF>>& page_heap);
bool shouldRemoveUnreferencedResources(QPDF& pdf); bool shouldRemoveUnreferencedResources(QPDF& pdf);
void handleRotations(QPDF& pdf); void handleRotations(QPDF& pdf);
void getUOPagenos(UnderOverlay& uo,
std::map<int, std::vector<int> >& pagenos);
void handleUnderOverlay(QPDF& pdf); void handleUnderOverlay(QPDF& pdf);
void doUnderOverlayForPage( void doUnderOverlayForPage(
QPDF& pdf, QPDF& pdf,
QPDFJob::UnderOverlay& uo, UnderOverlay& uo,
std::map<int, std::vector<int> >& pagenos, std::map<int, std::vector<int> >& pagenos,
size_t page_idx, size_t page_idx,
std::map<int, QPDFObjectHandle>& fo, std::map<int, QPDFObjectHandle>& fo,
std::vector<QPDFPageObjectHelper>& pages, std::vector<QPDFPageObjectHelper>& pages,
QPDFPageObjectHelper& dest_page, QPDFPageObjectHelper& dest_page,
bool before); bool before);
void validateUnderOverlay(QPDF& pdf, QPDFJob::UnderOverlay* uo); void validateUnderOverlay(QPDF& pdf, UnderOverlay* uo);
void handleTransformations(QPDF& pdf); void handleTransformations(QPDF& pdf);
void addAttachments(QPDF& pdf); void addAttachments(QPDF& pdf);
void copyAttachments(QPDF& pdf); void copyAttachments(QPDF& pdf);
@ -556,6 +547,9 @@ class QPDFJob
bool externalize_inline_images; bool externalize_inline_images;
bool keep_inline_images; bool keep_inline_images;
bool remove_page_labels; bool remove_page_labels;
size_t oi_min_width;
size_t oi_min_height;
size_t oi_min_area;
size_t ii_min_bytes; size_t ii_min_bytes;
UnderOverlay underlay; UnderOverlay underlay;
UnderOverlay overlay; UnderOverlay overlay;

View File

@ -43,7 +43,11 @@ namespace
class ImageOptimizer: public QPDFObjectHandle::StreamDataProvider class ImageOptimizer: public QPDFObjectHandle::StreamDataProvider
{ {
public: public:
ImageOptimizer(QPDFJob& o, QPDFObjectHandle& image); ImageOptimizer(QPDFJob& o,
size_t oi_min_width,
size_t oi_min_height,
size_t oi_min_area,
QPDFObjectHandle& image);
virtual ~ImageOptimizer() virtual ~ImageOptimizer()
{ {
} }
@ -55,6 +59,9 @@ namespace
private: private:
QPDFJob& o; QPDFJob& o;
size_t oi_min_width;
size_t oi_min_height;
size_t oi_min_area;
QPDFObjectHandle image; QPDFObjectHandle image;
}; };
@ -101,8 +108,15 @@ namespace
}; };
} }
ImageOptimizer::ImageOptimizer(QPDFJob& o, QPDFObjectHandle& image) : ImageOptimizer::ImageOptimizer(QPDFJob& o,
size_t oi_min_width,
size_t oi_min_height,
size_t oi_min_area,
QPDFObjectHandle& image) :
o(o), o(o),
oi_min_width(oi_min_width),
oi_min_height(oi_min_height),
oi_min_area(oi_min_area),
image(image) image(image)
{ {
} }
@ -194,9 +208,9 @@ ImageOptimizer::makePipeline(std::string const& description, Pipeline* next)
} }
return result; return result;
} }
if (((o.oi_min_width > 0) && (w <= o.oi_min_width)) || if (((this->oi_min_width > 0) && (w <= this->oi_min_width)) ||
((o.oi_min_height > 0) && (h <= o.oi_min_height)) || ((this->oi_min_height > 0) && (h <= this->oi_min_height)) ||
((o.oi_min_area > 0) && ((w * h) <= o.oi_min_area))) ((this->oi_min_area > 0) && ((w * h) <= this->oi_min_area)))
{ {
QTC::TC("qpdf", "qpdf image optimize too small"); QTC::TC("qpdf", "qpdf image optimize too small");
if (! description.empty()) if (! description.empty())
@ -415,7 +429,10 @@ QPDFJob::Members::Members() :
externalize_inline_images(false), externalize_inline_images(false),
keep_inline_images(false), keep_inline_images(false),
remove_page_labels(false), remove_page_labels(false),
ii_min_bytes(1024), // QXXXQ comment with oi_* oi_min_width(128), // Default values for these
oi_min_height(128), // oi and ii flags are in --help
oi_min_area(16384), // and in the manual.
ii_min_bytes(1024), //
underlay("underlay"), underlay("underlay"),
overlay("overlay"), overlay("overlay"),
under_overlay(0), under_overlay(0),
@ -427,9 +444,6 @@ QPDFJob::Members::Members() :
} }
QPDFJob::QPDFJob() : QPDFJob::QPDFJob() :
oi_min_width(128), // Default values for these
oi_min_height(128), // oi flags are in --help
oi_min_area(16384), // and in the manual.
m(new Members()) m(new Members())
{ {
} }
@ -1803,6 +1817,12 @@ QPDFJob::json_schema(std::set<std::string>* keys)
return schema; return schema;
} }
std::string
QPDFJob::json_out_schema_v1()
{
return json_schema().unparse();
}
void void
QPDFJob::doJSON(QPDF& pdf) QPDFJob::doJSON(QPDF& pdf)
{ {
@ -2240,8 +2260,9 @@ QPDFJob::doUnderOverlayForPage(
} }
} }
static void get_uo_pagenos(QPDFJob::UnderOverlay& uo, void
std::map<int, std::vector<int> >& pagenos) QPDFJob::getUOPagenos(QPDFJob::UnderOverlay& uo,
std::map<int, std::vector<int> >& pagenos)
{ {
size_t idx = 0; size_t idx = 0;
size_t from_size = uo.from_pagenos.size(); size_t from_size = uo.from_pagenos.size();
@ -2272,9 +2293,9 @@ QPDFJob::handleUnderOverlay(QPDF& pdf)
return; return;
} }
std::map<int, std::vector<int> > underlay_pagenos; std::map<int, std::vector<int> > underlay_pagenos;
get_uo_pagenos(m->underlay, underlay_pagenos); getUOPagenos(m->underlay, underlay_pagenos);
std::map<int, std::vector<int> > overlay_pagenos; std::map<int, std::vector<int> > overlay_pagenos;
get_uo_pagenos(m->overlay, overlay_pagenos); getUOPagenos(m->overlay, overlay_pagenos);
std::map<int, QPDFObjectHandle> underlay_fo; std::map<int, QPDFObjectHandle> underlay_fo;
std::map<int, QPDFObjectHandle> overlay_fo; std::map<int, QPDFObjectHandle> overlay_fo;
std::vector<QPDFPageObjectHelper> upages; std::vector<QPDFPageObjectHelper> upages;
@ -2439,7 +2460,6 @@ QPDFJob::copyAttachments(QPDF& pdf)
void void
QPDFJob::handleTransformations(QPDF& pdf) QPDFJob::handleTransformations(QPDF& pdf)
{ {
QPDFJob& o = *this; // QXXXQ
QPDFPageDocumentHelper dh(pdf); QPDFPageDocumentHelper dh(pdf);
std::shared_ptr<QPDFAcroFormDocumentHelper> afdh; std::shared_ptr<QPDFAcroFormDocumentHelper> afdh;
auto make_afdh = [&]() { auto make_afdh = [&]() {
@ -2474,7 +2494,9 @@ QPDFJob::handleTransformations(QPDF& pdf)
{ {
std::string name = iter2.first; std::string name = iter2.first;
QPDFObjectHandle& image = iter2.second; QPDFObjectHandle& image = iter2.second;
ImageOptimizer* io = new ImageOptimizer(o, image); ImageOptimizer* io = new ImageOptimizer(
*this, m->oi_min_width, m->oi_min_height,
m->oi_min_area, image);
PointerHolder<QPDFObjectHandle::StreamDataProvider> sdp(io); PointerHolder<QPDFObjectHandle::StreamDataProvider> sdp(io);
if (io->evaluate("image " + name + " on page " + if (io->evaluate("image " + name + " on page " +
QUtil::int_to_string(pageno))) QUtil::int_to_string(pageno)))

View File

@ -181,7 +181,7 @@ ArgParser::argJsonHelp()
<< std::endl << std::endl
<< "be null, and others will have values that apply to unencrypted files." << "be null, and others will have values that apply to unencrypted files."
<< std::endl << std::endl
<< QPDFJob::json_schema().unparse() << QPDFJob::json_out_schema_v1()
<< std::endl; << std::endl;
} }

View File

@ -338,21 +338,21 @@ QPDFJob::Config::normalizeContent(char const* parameter)
QPDFJob::Config& QPDFJob::Config&
QPDFJob::Config::oiMinArea(char const* parameter) QPDFJob::Config::oiMinArea(char const* parameter)
{ {
o.oi_min_area = QUtil::string_to_uint(parameter); o.m->oi_min_area = QUtil::string_to_uint(parameter);
return *this; return *this;
} }
QPDFJob::Config& QPDFJob::Config&
QPDFJob::Config::oiMinHeight(char const* parameter) QPDFJob::Config::oiMinHeight(char const* parameter)
{ {
o.oi_min_height = QUtil::string_to_uint(parameter); o.m->oi_min_height = QUtil::string_to_uint(parameter);
return *this; return *this;
} }
QPDFJob::Config& QPDFJob::Config&
QPDFJob::Config::oiMinWidth(char const* parameter) QPDFJob::Config::oiMinWidth(char const* parameter)
{ {
o.oi_min_width = QUtil::string_to_uint(parameter); o.m->oi_min_width = QUtil::string_to_uint(parameter);
return *this; return *this;
} }