diff options
Diffstat (limited to 'libqpdf')
-rw-r--r-- | libqpdf/QPDF.cc | 16 | ||||
-rw-r--r-- | libqpdf/QPDFWriter.cc | 18 |
2 files changed, 34 insertions, 0 deletions
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<QPDFObjectHandle> +QPDF::getAllObjects() +{ + std::vector<QPDFObjectHandle> result; + for (std::map<QPDFObjGen, QPDFXRefEntry>::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; @@ -184,6 +185,12 @@ QPDFWriter::setPrecheckStreams(bool val) } void +QPDFWriter::setPreserveUnreferencedObjects(bool val) +{ + this->preserve_unreferenced_objects = val; +} + +void QPDFWriter::setMinimumPDFVersion(std::string const& version) { setMinimumPDFVersion(version, 0); @@ -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<QPDFObjectHandle> all = this->pdf.getAllObjects(); + for (std::vector<QPDFObjectHandle>::iterator iter = all.begin(); + iter != all.end(); ++iter) + { + enqueueObject(*iter); + } + } + // Put root first on queue. QPDFObjectHandle trailer = getTrimmedTrailer(); enqueueObject(trailer.getKey("/Root")); |