mirror of
https://github.com/qpdf/qpdf.git
synced 2024-06-04 03:10:52 +00:00
In qdf mode, don't write extra XRef streams (fixes #386)
fix-qdf assumes there is exactly one XRef stream and that it is at the end of the file.
This commit is contained in:
parent
bbc2f8ffae
commit
57c01ef81f
|
@ -1,5 +1,12 @@
|
||||||
2020-01-26 Jay Berkenbilt <ejb@ql.org>
|
2020-01-26 Jay Berkenbilt <ejb@ql.org>
|
||||||
|
|
||||||
|
* Bug fix: in qdf mode, do not write out any XRef streams that may
|
||||||
|
have appeared in the original file. These are usually
|
||||||
|
unreferenced, but with --preserve-unreferenced, they could be
|
||||||
|
written out, which breaks fix-qdf's assumption that there is at
|
||||||
|
most one XRef stream and that it appears at the end of the file.
|
||||||
|
Fixes #386.
|
||||||
|
|
||||||
* Bug fix: when externalizing inline images, a colorspace value
|
* Bug fix: when externalizing inline images, a colorspace value
|
||||||
that was a lookup key in the page's /Resource -> /ColorSpace
|
that was a lookup key in the page's /Resource -> /ColorSpace
|
||||||
dictionary was not properly handled. Fixes #392.
|
dictionary was not properly handled. Fixes #392.
|
||||||
|
|
|
@ -1241,6 +1241,21 @@ QPDFWriter::enqueueObject(QPDFObjectHandle object)
|
||||||
" another file.");
|
" another file.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this->m->qdf_mode &&
|
||||||
|
object.isStream() && object.getDict().getKey("/Type").isName() &&
|
||||||
|
(object.getDict().getKey("/Type").getName() == "/XRef"))
|
||||||
|
{
|
||||||
|
// As a special case, do not output any extraneous XRef
|
||||||
|
// streams in QDF mode. Doing so will confuse fix-qdf,
|
||||||
|
// which expects to see only one XRef stream at the end of
|
||||||
|
// the file. This case can occur when creating a QDF from
|
||||||
|
// a file with object streams when preserving unreferenced
|
||||||
|
// objects since the old cross reference streams are not
|
||||||
|
// actually referenced by object number.
|
||||||
|
QTC::TC("qpdf", "QPDFWriter ignore XRef in qdf mode");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
QPDFObjGen og = object.getObjGen();
|
QPDFObjGen og = object.getObjGen();
|
||||||
|
|
||||||
if (this->m->obj_renumber.count(og) == 0)
|
if (this->m->obj_renumber.count(og) == 0)
|
||||||
|
|
|
@ -448,3 +448,4 @@ QPDFWriter stream in ostream 0
|
||||||
QPDFObjectHandle duplicate dict key 0
|
QPDFObjectHandle duplicate dict key 0
|
||||||
QPDFWriter no encryption sig contents 0
|
QPDFWriter no encryption sig contents 0
|
||||||
QPDFPageObjectHelper colorspace lookup 0
|
QPDFPageObjectHelper colorspace lookup 0
|
||||||
|
QPDFWriter ignore XRef in qdf mode 0
|
||||||
|
|
|
@ -2779,7 +2779,7 @@ for (my $n = 16; $n <= 19; ++$n)
|
||||||
show_ntests();
|
show_ntests();
|
||||||
# ----------
|
# ----------
|
||||||
$td->notify("--- Specific File Tests ---");
|
$td->notify("--- Specific File Tests ---");
|
||||||
$n_tests += 4;
|
$n_tests += 7;
|
||||||
|
|
||||||
# Special PDF files that caused problems at some point
|
# Special PDF files that caused problems at some point
|
||||||
|
|
||||||
|
@ -2800,6 +2800,16 @@ $td->runtest("compress objstm and xref",
|
||||||
$td->runtest("check output",
|
$td->runtest("check output",
|
||||||
{$td->FILE => "a.pdf"},
|
{$td->FILE => "a.pdf"},
|
||||||
{$td->FILE => "compress-objstm-xref.pdf"});
|
{$td->FILE => "compress-objstm-xref.pdf"});
|
||||||
|
$td->runtest("qdf + preserved-unreferenced + xref streams",
|
||||||
|
{$td->COMMAND => "qpdf --qdf --preserve-unreferenced" .
|
||||||
|
" --static-id compress-objstm-xref.pdf a.pdf"},
|
||||||
|
{$td->STRING => "", $td->EXIT_STATUS => 0});
|
||||||
|
$td->runtest("check output",
|
||||||
|
{$td->FILE => "a.pdf"},
|
||||||
|
{$td->FILE => "compress-objstm-xref-qdf.pdf"});
|
||||||
|
$td->runtest("check fix-qdf idempotency",
|
||||||
|
{$td->COMMAND => "fix-qdf a.pdf"},
|
||||||
|
{$td->FILE => "a.pdf", $td->EXIT_STATUS => 0});
|
||||||
|
|
||||||
show_ntests();
|
show_ntests();
|
||||||
# ----------
|
# ----------
|
||||||
|
|
BIN
qpdf/qtest/qpdf/compress-objstm-xref-qdf.pdf
Normal file
BIN
qpdf/qtest/qpdf/compress-objstm-xref-qdf.pdf
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user