Commit 08379321645133ba74dad4ce130055c087130bab

Authored by Jay Berkenbilt
1 parent 893d38b8

Update documentation and test suite to lock in hard page copy

Issue #399 mentioned a use case for which qpdf has support, but the
fact that it is supported was not documented or in the test suite,
making it vulerable to accidental breakage.
manual/qpdf-manual.xml
@@ -1588,7 +1588,16 @@ outfile.pdf</option> @@ -1588,7 +1588,16 @@ outfile.pdf</option>
1588 Prior to version 8.4, it was not possible to specify the same page 1588 Prior to version 8.4, it was not possible to specify the same page
1589 from the same file directly more than once, and the workaround of 1589 from the same file directly more than once, and the workaround of
1590 specifying the same file in more than one way was required. 1590 specifying the same file in more than one way was required.
1591 - Version 8.4 removes this limitation. 1591 + Version 8.4 removes this limitation, but there is still a valid
  1592 + use case. When you specify the same page from the same file more
  1593 + than once, qpdf will share objects between the pages. If you are
  1594 + going to do further manipulation on the file and need the two
  1595 + instances of the same original page to be deep copies, then you
  1596 + can specify the file in two different ways. For example
  1597 + <command>qpdf in.pdf --pages . 1 ./in.pdf 1 -- out.pdf</command>
  1598 + would create a file with two copies of the first page of the
  1599 + input, and the two copies would share any objects in common. This
  1600 + includes fonts, images, and anything else the page references.
1592 </para> 1601 </para>
1593 </sect1> 1602 </sect1>
1594 <sect1 id="ref.overlay-underlay"> 1603 <sect1 id="ref.overlay-underlay">
qpdf/qtest/qpdf.test
@@ -2057,7 +2057,7 @@ foreach my $f (qw(page_api_2 direct-pages)) @@ -2057,7 +2057,7 @@ foreach my $f (qw(page_api_2 direct-pages))
2057 show_ntests(); 2057 show_ntests();
2058 # ---------- 2058 # ----------
2059 $td->notify("--- Merging and Splitting ---"); 2059 $td->notify("--- Merging and Splitting ---");
2060 -$n_tests += 24; 2060 +$n_tests += 26;
2061 2061
2062 # Select pages from the same file multiple times including selecting 2062 # Select pages from the same file multiple times including selecting
2063 # twice from an encrypted file and specifying the password only the 2063 # twice from an encrypted file and specifying the password only the
@@ -2200,6 +2200,19 @@ $td-&gt;runtest(&quot;check output&quot;, @@ -2200,6 +2200,19 @@ $td-&gt;runtest(&quot;check output&quot;,
2200 {$td->FILE => "a.pdf"}, 2200 {$td->FILE => "a.pdf"},
2201 {$td->FILE => "duplicate-pages.pdf"}); 2201 {$td->FILE => "duplicate-pages.pdf"});
2202 2202
  2203 +# See https://github.com/qpdf/qpdf/issues/399 -- we don't want to
  2204 +# break this, especially if we ever implement deduplication of
  2205 +# identical streams.
  2206 +$td->runtest("force full page duplication",
  2207 + {$td->COMMAND => "qpdf --static-id minimal.pdf" .
  2208 + " --pages . ./minimal.pdf -- a.pdf"},
  2209 + {$td->STRING => "", $td->EXIT_STATUS => 0},
  2210 + $td->NORMALIZE_NEWLINES);
  2211 +$td->runtest("check output",
  2212 + {$td->FILE => "a.pdf"},
  2213 + {$td->FILE => "deep-duplicate-pages.pdf"});
  2214 +
  2215 +
2203 show_ntests(); 2216 show_ntests();
2204 # ---------- 2217 # ----------
2205 $td->notify("--- Collating ---"); 2218 $td->notify("--- Collating ---");
qpdf/qtest/qpdf/deep-duplicate-pages.pdf 0 → 100644
No preview for this file type