aboutsummaryrefslogtreecommitdiffstats
path: root/qpdf
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2018-01-31 22:45:52 +0100
committerJay Berkenbilt <ejb@ql.org>2018-02-19 02:18:40 +0100
commitebd5ed63decb90e26ae9129164214f9d7d684621 (patch)
treea4d8960a1c9f270315f9c9c3fff884b0198d9087 /qpdf
parenta0fd8875aabb244d35e2ddf785f546c336ed9622 (diff)
downloadqpdf-ebd5ed63decb90e26ae9129164214f9d7d684621.tar.zst
Add option to save pass 1 of lineariziation
This is useful only for debugging the linearization code.
Diffstat (limited to 'qpdf')
-rw-r--r--qpdf/qpdf.cc16
-rw-r--r--qpdf/qtest/qpdf.test13
-rw-r--r--qpdf/qtest/qpdf/minimal-linearize-pass1.pdfbin0 -> 1274 bytes
-rw-r--r--qpdf/qtest/qpdf/minimal-linearized.pdfbin0 -> 1310 bytes
4 files changed, 28 insertions, 1 deletions
diff --git a/qpdf/qpdf.cc b/qpdf/qpdf.cc
index 183d6d19..1c56a345 100644
--- a/qpdf/qpdf.cc
+++ b/qpdf/qpdf.cc
@@ -153,6 +153,7 @@ struct Options
bool qdf_mode;
bool preserve_unreferenced_objects;
bool newline_before_endstream;
+ std::string linearize_pass1;
std::string min_version;
std::string force_version;
bool show_npages;
@@ -391,6 +392,8 @@ familiar with the PDF file format or who are PDF developers.\n\
--preserve-unreferenced preserve unreferenced objects\n\
--newline-before-endstream always put a newline before endstream\n\
--qdf turns on \"QDF mode\" (below)\n\
+--linearize-pass1=file write intermediate pass of linearized file\n\
+ for debugging\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\
\n\
@@ -1531,6 +1534,15 @@ static void parse_options(int argc, char* argv[], Options& o)
{
o.newline_before_endstream = true;
}
+ else if (strcmp(arg, "linearize-pass1") == 0)
+ {
+ if (parameter == 0)
+ {
+ usage("--linearize-pass1 be given as"
+ "--linearize-pass1=filename");
+ }
+ o.linearize_pass1 = parameter;
+ }
else if (strcmp(arg, "min-version") == 0)
{
if (parameter == 0)
@@ -2214,6 +2226,10 @@ static void set_writer_options(QPDF& pdf, Options& o, QPDFWriter& w)
{
w.setLinearization(true);
}
+ if (! o.linearize_pass1.empty())
+ {
+ w.setLinearizationPass1Filename(o.linearize_pass1);
+ }
if (o.object_stream_set)
{
w.setObjectStreamMode(o.object_stream_mode);
diff --git a/qpdf/qtest/qpdf.test b/qpdf/qtest/qpdf.test
index b4d926e2..f0dde70f 100644
--- a/qpdf/qtest/qpdf.test
+++ b/qpdf/qtest/qpdf.test
@@ -240,7 +240,7 @@ foreach my $d (@bug_tests)
show_ntests();
# ----------
$td->notify("--- Miscellaneous Tests ---");
-$n_tests += 93;
+$n_tests += 96;
$td->runtest("qpdf version",
{$td->COMMAND => "qpdf --version"},
@@ -252,6 +252,17 @@ $td->runtest("C API: qpdf version",
$td->EXIT_STATUS => 0},
$td->NORMALIZE_NEWLINES);
+$td->runtest("linearize pass 1 file",
+ {$td->COMMAND => "qpdf --linearize --static-id" .
+ " --linearize-pass1=b.pdf minimal.pdf a.pdf"},
+ {$td->STRING => "", $td->EXIT_STATUS => 0});
+$td->runtest("check output",
+ {$td->FILE => "a.pdf"},
+ {$td->FILE => "minimal-linearized.pdf"});
+$td->runtest("check pass1 file",
+ {$td->FILE => "b.pdf"},
+ {$td->FILE => "minimal-linearize-pass1.pdf"});
+
foreach (my $i = 1; $i <= 3; ++$i)
{
$td->runtest("misc tests",
diff --git a/qpdf/qtest/qpdf/minimal-linearize-pass1.pdf b/qpdf/qtest/qpdf/minimal-linearize-pass1.pdf
new file mode 100644
index 00000000..e851063a
--- /dev/null
+++ b/qpdf/qtest/qpdf/minimal-linearize-pass1.pdf
Binary files differ
diff --git a/qpdf/qtest/qpdf/minimal-linearized.pdf b/qpdf/qtest/qpdf/minimal-linearized.pdf
new file mode 100644
index 00000000..15f643d4
--- /dev/null
+++ b/qpdf/qtest/qpdf/minimal-linearized.pdf
Binary files differ