aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2017-07-29 01:18:57 +0200
committerJay Berkenbilt <ejb@ql.org>2017-07-29 01:19:11 +0200
commit3a1ff5ded9cf22e114991b5a49857b54f8e56b02 (patch)
tree3a3ef059215f619946c316fa6c94d31c6f6b076f /libqpdf
parenta94a729fee946947db7a056f02b326dfce681128 (diff)
downloadqpdf-3a1ff5ded9cf22e114991b5a49857b54f8e56b02.tar.zst
Add option to preserve unreferenced objects
Diffstat (limited to 'libqpdf')
-rw-r--r--libqpdf/QPDF.cc16
-rw-r--r--libqpdf/QPDFWriter.cc18
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"));