aboutsummaryrefslogtreecommitdiffstats
path: root/qpdf
diff options
context:
space:
mode:
Diffstat (limited to 'qpdf')
-rw-r--r--qpdf/qpdf.cc10
-rw-r--r--qpdf/qpdf.testcov1
-rw-r--r--qpdf/qtest/qpdf.test18
-rw-r--r--qpdf/qtest/qpdf/unreferenced-dropped.pdfbin0 -> 799 bytes
-rw-r--r--qpdf/qtest/qpdf/unreferenced-objects.pdf105
-rw-r--r--qpdf/qtest/qpdf/unreferenced-preserved.pdfbin0 -> 927 bytes
6 files changed, 134 insertions, 0 deletions
diff --git a/qpdf/qpdf.cc b/qpdf/qpdf.cc
index 99cfd3a1..65a6de1e 100644
--- a/qpdf/qpdf.cc
+++ b/qpdf/qpdf.cc
@@ -203,6 +203,7 @@ familiar with the PDF file format or who are PDF developers.\n\
--object-streams=mode controls handing of object streams\n\
--ignore-xref-streams tells qpdf to ignore any cross-reference streams\n\
--precheck-streams precheck ability to decode streams\n\
+--preserve-unreferenced preserve unreferenced objects\n\
--qdf turns on \"QDF mode\" (below)\n\
--min-version=version sets the minimum PDF version of the output file\n\
--force-version=version forces this to be the PDF version of the output file\n\
@@ -1030,6 +1031,7 @@ int main(int argc, char* argv[])
bool ignore_xref_streams = false;
bool qdf_mode = false;
bool precheck_streams = false;
+ bool preserve_unreferenced_objects = false;
std::string min_version;
std::string force_version;
@@ -1219,6 +1221,10 @@ int main(int argc, char* argv[])
{
precheck_streams = true;
}
+ else if (strcmp(arg, "preserve-unreferenced") == 0)
+ {
+ preserve_unreferenced_objects = true;
+ }
else if (strcmp(arg, "min-version") == 0)
{
if (parameter == 0)
@@ -1714,6 +1720,10 @@ int main(int argc, char* argv[])
{
w.setPrecheckStreams(true);
}
+ if (preserve_unreferenced_objects)
+ {
+ w.setPreserveUnreferencedObjects(true);
+ }
if (normalize_set)
{
w.setContentNormalization(normalize);
diff --git a/qpdf/qpdf.testcov b/qpdf/qpdf.testcov
index bf227c7a..c64c63ee 100644
--- a/qpdf/qpdf.testcov
+++ b/qpdf/qpdf.testcov
@@ -280,3 +280,4 @@ QPDFObjectHandle found fake 1
QPDFObjectHandle no val for last key 0
QPDF resolve failure to null 0
QPDFWriter precheck stream 0
+QPDFWriter preserve unreferenced standard 0
diff --git a/qpdf/qtest/qpdf.test b/qpdf/qtest/qpdf.test
index b61882b9..45ed8c46 100644
--- a/qpdf/qtest/qpdf.test
+++ b/qpdf/qtest/qpdf.test
@@ -743,6 +743,24 @@ $td->runtest("check output",
{$td->FILE => "bad-data-precheck.pdf"});
show_ntests();
# ----------
+$td->notify("--- Preserve unreferenced objects ---");
+$n_tests += 4;
+
+$td->runtest("drop unused objects",
+ {$td->COMMAND => "qpdf --static-id unreferenced-objects.pdf a.pdf"},
+ {$td->STRING => "", $td->EXIT_STATUS => 0});
+$td->runtest("check output",
+ {$td->FILE => "a.pdf"},
+ {$td->FILE => "unreferenced-dropped.pdf"});
+$td->runtest("keep unused objects",
+ {$td->COMMAND => "qpdf --static-id --preserve-unreferenced" .
+ " unreferenced-objects.pdf a.pdf"},
+ {$td->STRING => "", $td->EXIT_STATUS => 0});
+$td->runtest("check output",
+ {$td->FILE => "a.pdf"},
+ {$td->FILE => "unreferenced-preserved.pdf"});
+show_ntests();
+# ----------
$td->notify("--- Copy Foreign Objects ---");
$n_tests += 7;
diff --git a/qpdf/qtest/qpdf/unreferenced-dropped.pdf b/qpdf/qtest/qpdf/unreferenced-dropped.pdf
new file mode 100644
index 00000000..071d8d7d
--- /dev/null
+++ b/qpdf/qtest/qpdf/unreferenced-dropped.pdf
Binary files differ
diff --git a/qpdf/qtest/qpdf/unreferenced-objects.pdf b/qpdf/qtest/qpdf/unreferenced-objects.pdf
new file mode 100644
index 00000000..a6ea90c8
--- /dev/null
+++ b/qpdf/qtest/qpdf/unreferenced-objects.pdf
@@ -0,0 +1,105 @@
+%PDF-1.3
+%¿÷¢þ
+%QDF-1.0
+
+2 0 obj
+<<
+ /Pages 1 0 R
+ /Type /Catalog
+>>
+endobj
+
+1 0 obj
+<<
+ /Count 1
+ /Kids [
+ 3 0 R
+ ]
+ /Type /Pages
+>>
+endobj
+
+%% Page 1
+3 0 obj
+<<
+ /Contents 4 0 R
+ /MediaBox [
+ 0
+ 0
+ 612
+ 792
+ ]
+ /Parent 1 0 R
+ /Resources <<
+ /Font <<
+ /F1 6 0 R
+ >>
+ /ProcSet 9 0 R
+ >>
+ /Type /Page
+>>
+endobj
+
+%% Contents for page 1
+4 0 obj
+<<
+ /Length 5 0 R
+>>
+stream
+BT
+ /F1 24 Tf
+ 72 720 Td
+ (Potato) Tj
+ET
+endstream
+endobj
+
+5 0 obj
+44
+endobj
+
+6 0 obj
+<<
+ /BaseFont /Helvetica
+ /Encoding /WinAnsiEncoding
+ /Name /F1
+ /Subtype /Type1
+ /Type /Font
+>>
+endobj
+
+7 0 obj
+[ 8 0 R ]
+endobj
+
+8 0 obj
+/Potato
+endobj
+
+9 0 obj
+[
+ /PDF
+ /Text
+]
+endobj
+
+xref
+0 10
+0000000000 65535 f
+0000000079 00000 n
+0000000025 00000 n
+0000000161 00000 n
+0000000376 00000 n
+0000000475 00000 n
+0000000494 00000 n
+0000000612 00000 n
+0000000638 00000 n
+0000000662 00000 n
+trailer <<
+ /Root 2 0 R
+ /Size 10
+ /ID [<5c2381b459937c988290150df782f1fd><5c2381b459937c988290150df782f1fd>]
+>>
+startxref
+697
+%%EOF
diff --git a/qpdf/qtest/qpdf/unreferenced-preserved.pdf b/qpdf/qtest/qpdf/unreferenced-preserved.pdf
new file mode 100644
index 00000000..b92fff5d
--- /dev/null
+++ b/qpdf/qtest/qpdf/unreferenced-preserved.pdf
Binary files differ