From 3a1ff5ded9cf22e114991b5a49857b54f8e56b02 Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Fri, 28 Jul 2017 19:18:57 -0400 Subject: Add option to preserve unreferenced objects --- libqpdf/QPDF.cc | 16 ++++++++++++++++ libqpdf/QPDFWriter.cc | 18 ++++++++++++++++++ 2 files changed, 34 insertions(+) (limited to 'libqpdf') diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc index 4d5bf67f..d82813d0 100644 --- a/libqpdf/QPDF.cc +++ b/libqpdf/QPDF.cc @@ -989,6 +989,22 @@ QPDF::showXRefTable() } } +std::vector +QPDF::getAllObjects() +{ + std::vector result; + for (std::map::iterator iter = + this->xref_table.begin(); + iter != this->xref_table.end(); ++iter) + { + + QPDFObjGen const& og = (*iter).first; + result.push_back(QPDFObjectHandle::Factory::newIndirect( + this, og.getObj(), og.getGen())); + } + return result; +} + void QPDF::setLastObjectDescription(std::string const& description, int objid, int generation) diff --git a/libqpdf/QPDFWriter.cc b/libqpdf/QPDFWriter.cc index 59e306fc..01309f43 100644 --- a/libqpdf/QPDFWriter.cc +++ b/libqpdf/QPDFWriter.cc @@ -58,6 +58,7 @@ QPDFWriter::init() stream_data_mode = qpdf_s_compress; qdf_mode = false; precheck_streams = false; + preserve_unreferenced_objects = false; static_id = false; suppress_original_object_ids = false; direct_stream_lengths = true; @@ -183,6 +184,12 @@ QPDFWriter::setPrecheckStreams(bool val) this->precheck_streams = val; } +void +QPDFWriter::setPreserveUnreferencedObjects(bool val) +{ + this->preserve_unreferenced_objects = val; +} + void QPDFWriter::setMinimumPDFVersion(std::string const& version) { @@ -3074,6 +3081,17 @@ QPDFWriter::writeStandard() writeHeader(); writeString(this->extra_header_text); + if (this->preserve_unreferenced_objects) + { + QTC::TC("qpdf", "QPDFWriter preserve unreferenced standard"); + std::vector all = this->pdf.getAllObjects(); + for (std::vector::iterator iter = all.begin(); + iter != all.end(); ++iter) + { + enqueueObject(*iter); + } + } + // Put root first on queue. QPDFObjectHandle trailer = getTrimmedTrailer(); enqueueObject(trailer.getKey("/Root")); -- cgit v1.2.3-70-g09d2