diff options
Diffstat (limited to 'libqpdf')
-rw-r--r-- | libqpdf/QPDFJob.cc | 33 |
1 files changed, 23 insertions, 10 deletions
diff --git a/libqpdf/QPDFJob.cc b/libqpdf/QPDFJob.cc index 606a612a..5631df49 100644 --- a/libqpdf/QPDFJob.cc +++ b/libqpdf/QPDFJob.cc @@ -323,6 +323,7 @@ QPDFJob::Members::Members() : decrypt(false), split_pages(0), progress(false), + progress_handler(nullptr), suppress_warnings(false), warnings_exit_zero(false), copy_encryption(false), @@ -464,6 +465,11 @@ QPDFJob::setOutputStreams(std::ostream* out, std::ostream* err) } void +QPDFJob::registerProgressReporter(std::function<void(int)> handler) { + this->m->progress_handler = handler; +} + +void QPDFJob::doIfVerbose( std::function<void(Pipeline&, std::string const& prefix)> fn) { @@ -3146,16 +3152,23 @@ QPDFJob::setWriterOptions(QPDF& pdf, QPDFWriter& w) w.forcePDFVersion(version, extension_level); } if (m->progress) { - char const* outfilename = this->m->outfilename - ? this->m->outfilename.get() - : "standard output"; - w.registerProgressReporter( - std::shared_ptr<QPDFWriter::ProgressReporter>( - // line-break - new ProgressReporter( - *this->m->log->getInfo(), - this->m->message_prefix, - outfilename))); + if (this->m->progress_handler) { + w.registerProgressReporter( + std::shared_ptr<QPDFWriter::ProgressReporter>( + new QPDFWriter::FunctionProgressReporter( + this->m->progress_handler))); + } else { + char const* outfilename = this->m->outfilename + ? this->m->outfilename.get() + : "standard output"; + w.registerProgressReporter( + std::shared_ptr<QPDFWriter::ProgressReporter>( + // line-break + new ProgressReporter( + *this->m->log->getInfo(), + this->m->message_prefix, + outfilename))); + } } } |