diff options
Diffstat (limited to 'qpdf')
-rw-r--r-- | qpdf/qpdf.cc | 10 | ||||
-rw-r--r-- | qpdf/qpdf.testcov | 1 | ||||
-rw-r--r-- | qpdf/qtest/qpdf.test | 18 | ||||
-rw-r--r-- | qpdf/qtest/qpdf/unreferenced-dropped.pdf | bin | 0 -> 799 bytes | |||
-rw-r--r-- | qpdf/qtest/qpdf/unreferenced-objects.pdf | 105 | ||||
-rw-r--r-- | qpdf/qtest/qpdf/unreferenced-preserved.pdf | bin | 0 -> 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 Binary files differnew file mode 100644 index 00000000..071d8d7d --- /dev/null +++ b/qpdf/qtest/qpdf/unreferenced-dropped.pdf 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 Binary files differnew file mode 100644 index 00000000..b92fff5d --- /dev/null +++ b/qpdf/qtest/qpdf/unreferenced-preserved.pdf |