summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2019-04-21 01:13:49 +0200
committerJay Berkenbilt <ejb@ql.org>2019-04-21 03:00:43 +0200
commit2b011f9d817fa2cb2e8ed0b410f655e9e61cb6fa (patch)
tree017d9c21efc772e7396ef11cdf4862a43cb03caf
parente50d5201dfce53158ba811865e99654054f0c872 (diff)
downloadqpdf-2b011f9d817fa2cb2e8ed0b410f655e9e61cb6fa.tar.zst
Add --remove-page-labels option (fixes #317)
-rw-r--r--ChangeLog7
-rw-r--r--manual/qpdf-manual.xml11
-rw-r--r--qpdf/qpdf.cc15
-rw-r--r--qpdf/qtest/qpdf.test14
-rw-r--r--qpdf/qtest/qpdf/remove-labels.pdfbin0 -> 3349 bytes
5 files changed, 43 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 944d80b4..6ab197fc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
2019-04-20 Jay Berkenbilt <ejb@ql.org>
+ * Add parameter --remove-page-labels to remove page labels from
+ output. In qpdf 8.3.0, the behavior changed so that page labels
+ were preserved when merging and splitting files. Some users were
+ relying on the fact that if you ran qpdf --empty --pages ... all
+ page labels were dropped. This option makes it possible to get
+ that behavior if it is explicitly desired. Fixes #317.
+
* Add parameter --keep-files-open-threshold to override the
maximum number of files that qpdf will allow to be kept open at
once. Fixes #288.
diff --git a/manual/qpdf-manual.xml b/manual/qpdf-manual.xml
index 669fd42e..dac5f00d 100644
--- a/manual/qpdf-manual.xml
+++ b/manual/qpdf-manual.xml
@@ -1797,9 +1797,6 @@ outfile.pdf</option>
</para>
</listitem>
</varlistentry>
-
-
-
<varlistentry>
<term><option>--externalize-inline-images</option></term>
<listitem>
@@ -1835,6 +1832,14 @@ outfile.pdf</option>
</listitem>
</varlistentry>
<varlistentry>
+ <term><option>--remove-page-labels</option></term>
+ <listitem>
+ <para>
+ Remove page labels from the output file.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
<term><option>--qdf</option></term>
<listitem>
<para>
diff --git a/qpdf/qpdf.cc b/qpdf/qpdf.cc
index 3d80abac..495816c3 100644
--- a/qpdf/qpdf.cc
+++ b/qpdf/qpdf.cc
@@ -164,6 +164,7 @@ struct Options
optimize_images(false),
externalize_inline_images(false),
keep_inline_images(false),
+ remove_page_labels(false),
oi_min_width(128), // Default values for these
oi_min_height(128), // oi flags are in --help
oi_min_area(16384), // and in the manual.
@@ -261,6 +262,7 @@ struct Options
bool optimize_images;
bool externalize_inline_images;
bool keep_inline_images;
+ bool remove_page_labels;
size_t oi_min_width;
size_t oi_min_height;
size_t oi_min_area;
@@ -670,6 +672,7 @@ class ArgParser
void argOptimizeImages();
void argExternalizeInlineImages();
void argKeepInlineImages();
+ void argRemovePageLabels();
void argOiMinWidth(char* parameter);
void argOiMinHeight(char* parameter);
void argOiMinArea(char* parameter);
@@ -911,6 +914,7 @@ ArgParser::initOptionTable()
(*t)["externalize-inline-images"] =
oe_bare(&ArgParser::argExternalizeInlineImages);
(*t)["keep-inline-images"] = oe_bare(&ArgParser::argKeepInlineImages);
+ (*t)["remove-page-labels"] = oe_bare(&ArgParser::argRemovePageLabels);
(*t)["oi-min-width"] = oe_requiredParameter(
&ArgParser::argOiMinWidth, "minimum-width");
(*t)["oi-min-height"] = oe_requiredParameter(
@@ -1335,6 +1339,7 @@ ArgParser::argHelp()
<< "--ii-min-bytes=bytes specify minimum size of inline images to be\n"
<< " converted to regular images\n"
<< "--keep-inline-images exclude inline images from image optimization\n"
+ << "--remove-page-labels remove any page labels present in the output file\n"
<< "--qdf turns on \"QDF mode\" (below)\n"
<< "--linearize-pass1=file write intermediate pass of linearized file\n"
<< " for debugging\n"
@@ -2013,6 +2018,12 @@ ArgParser::argKeepInlineImages()
}
void
+ArgParser::argRemovePageLabels()
+{
+ o.remove_page_labels = true;
+}
+
+void
ArgParser::argOiMinWidth(char* parameter)
{
o.oi_min_width = QUtil::string_to_int(parameter);
@@ -4335,6 +4346,10 @@ static void handle_transformations(QPDF& pdf, Options& o)
(*iter).coalesceContentStreams();
}
}
+ if (o.remove_page_labels)
+ {
+ pdf.getRoot().removeKey("/PageLabels");
+ }
}
static void handle_page_specs(QPDF& pdf, Options& o)
diff --git a/qpdf/qtest/qpdf.test b/qpdf/qtest/qpdf.test
index d01ac3af..6ee0ecfe 100644
--- a/qpdf/qtest/qpdf.test
+++ b/qpdf/qtest/qpdf.test
@@ -1877,7 +1877,7 @@ foreach my $f (qw(page_api_2 direct-pages))
show_ntests();
# ----------
$td->notify("--- Merging and Splitting ---");
-$n_tests += 22;
+$n_tests += 24;
# Select pages from the same file multiple times including selecting
# twice from an encrypted file and specifying the password only the
@@ -1944,6 +1944,18 @@ $td->runtest("merge with multiple labels",
$td->runtest("check output",
{$td->FILE => "a.pdf"},
{$td->FILE => "merge-multiple-labels.pdf"});
+$td->runtest("remove labels",
+ {$td->COMMAND =>
+ "qpdf --empty a.pdf" .
+ " --remove-page-labels" .
+ " --pages 11-pages-with-labels.pdf 8-11" .
+ " minimal.pdf " .
+ " page-labels-and-outlines.pdf 17-19 --" .
+ " --static-id"},
+ {$td->STRING => "", $td->EXIT_STATUS => 0});
+$td->runtest("check output",
+ {$td->FILE => "a.pdf"},
+ {$td->FILE => "remove-labels.pdf"});
$td->runtest("split with shared resources",
{$td->COMMAND =>
diff --git a/qpdf/qtest/qpdf/remove-labels.pdf b/qpdf/qtest/qpdf/remove-labels.pdf
new file mode 100644
index 00000000..838f4cbb
--- /dev/null
+++ b/qpdf/qtest/qpdf/remove-labels.pdf
Binary files differ