Add --overlay and --underlay to qpdf CLI (fixes #207)

This commit is contained in:
Jay Berkenbilt 2019-01-26 18:45:34 -05:00
parent c2ae35540e
commit 426434c772
24 changed files with 14081 additions and 483 deletions

View File

@ -1,5 +1,7 @@
2019-01-26 Jay Berkenbilt <ejb@ql.org>
* Add --overlay and --underlay options. Fixes #207.
* Create examples/pdf-overlay-page.cc to demonstrate use of
page/form XObject interaction

View File

@ -757,6 +757,26 @@ make
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>--overlay options --</option></term>
<listitem>
<para>
Overlay pages from another file onto the output pages. See
<xref linkend="ref.overlay-underlay"/> for details on
overlay/underlay.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>--underlay options --</option></term>
<listitem>
<para>
Overlay pages from another file onto the output pages. See
<xref linkend="ref.overlay-underlay"/> for details on
overlay/underlay.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
<para>
@ -1234,6 +1254,94 @@ outfile.pdf</option>
Version 8.4 removes this limitation.
</para>
</sect1>
<sect1 id="ref.overlay-underlay">
<title>Overlay and Underlay Options</title>
<para>
Starting with qpdf 8.4, it is possible to overlay or underlay
pages from other files onto the output generated by qpdf. Specify
overlay or underlay as follows:
<programlisting>{ <option>--overlay</option> | <option>--underlay</option> } <replaceable>file</replaceable> [ <option>options</option> ] <option>--</option>
</programlisting>
Overlay and underlay options are processed late, so they can be
combined with other like merging and will apply to the final
output. The <option>--overlay</option> and
<option>--underlay</option> options work the same way, except
underlay pages are drawn underneath the page to which they are
applied, possibly obscured by the origial page, and overlay files
are drawn on top of the page to which they are applied, possibly
obscuring the page. You can combine overlay and underlay.
</para>
<para>
The default behavior of overlay and underlay is that pages are
taken from the overlay/underlay file in sequence and applied to
corresponding pages in the output until there are no more output
pages. If the overlay or underlay file runs out of pages,
remaining output pages are left alone. This behavior can be
modified by options, which are provided between the
<option>--overlay</option> or <option>--underlay</option> flag and
the <option>--</option> option. The following options are
supported:
<itemizedlist>
<listitem>
<para>
<option>--password=password</option>: supply a password if the
overlay/underlay file is encrypted.
</para>
</listitem>
<listitem>
<para>
<option>--to=page-range</option>: a range of pages in the same
form at described in <xref linkend="ref.page-selection"/>
indicates which pages in the output should have the
overlay/underlay applied. If not specified, overlay/underlay
are applied to all pages.
</para>
</listitem>
<listitem>
<para>
<option>--from=[page-range]</option>: a range of pages that
specifies which pages in the overlay/underlay file will be used
for overlay or underlay. If not specified, all pages will be
used. This can be explicitly specified to be empty if
<option>--repeat</option> is used.
</para>
</listitem>
<listitem>
<para>
<option>--repeat=page-range</option>: an optional range of
pages that specifies which pages in the overlay/underlay file
will be repeated after the &ldquo;from&rdquo; pages are used
up. If you want to repeat a range of pages starting at the
beginning, you can explicitly use <option>--from=</option>.
</para>
</listitem>
</itemizedlist>
</para>
<para>
Here are some examples.
<itemizedlist>
<listitem>
<para>
<command>--overlay o.pdf --to=1-5 --from=1-3
--repeat=4 --</command>: overlay the first three pages from file
<filename>o.pdf</filename> onto the first three pages of the
output, then overlay page 4 from <filename>o.pdf</filename>
onto pages 4 and 5 of the output. Leave remaining output pages
untouched.
</para>
</listitem>
<listitem>
<para>
<command>--underlay footer.pdf --from= --repeat=1,2 --</command>:
Underlay page 1 of <filename>footer.pdf</filename> on all odd
output pages, and underlay page 2 of
<filename>footer.pdf</filename> on all even output pages.
</para>
</listitem>
</itemizedlist>
</para>
</sect1>
<sect1 id="ref.advanced-parsing">
<title>Advanced Parsing Options</title>
<para>
@ -4222,6 +4330,14 @@ print "\n";
</itemizedlist>
</para>
</listitem>
<listitem>
<para>
Add options <option>--overlay</option> and
<option>--underlay</option> for overlaying or underlaying
pages of other files onto output pages. See <xref
linkend="ref.overlay-underlay"/> for details.
</para>
</listitem>
<listitem>
<para>
When opening an encrypted file with a password, if the
@ -4372,6 +4488,55 @@ print "\n";
<filename>QPDF.hh</filename> for details.
</para>
</listitem>
<listitem>
<para>
Add method
<function>QPDFPageObjectHelper::getAttribute</function> for
retrieving an attribute from the page dictionary taking
inheritence into consideration, and optionally making a copy
if your intention is to modify the attribute.
</para>
</listitem>
<listitem>
<para>
Fix long-standing limitation of
<function>QPDFPageObjectHelper::getPageImages</function> so
that it now properly reports images from inherited resources
dictionaries, eliminating the need to call
<function>QPDFPageDocumentHelper::pushInheritedAttributesToPage</function>
in this case.
</para>
</listitem>
<listitem>
<para>
Add method
<function>QPDFObjectHandle::getUniqueResourceName</function>
for finding an unused name in a resource dictionary.
</para>
</listitem>
<listitem>
<para>
Add method
<function>QPDFPageObjectHelper::getFormXObjectForPage</function>
for generating a form XObject equivalent to a page. The
resulting object can be used in the same file or copied to
another file with <function>copyForeignObject</function>.
This can be useful for implementing underlay, overlay, n-up,
thumbnails, or any other functionality requiring replication
of pages in other contexts.
</para>
</listitem>
<listitem>
<para>
Add method
<function>QPDFPageObjectHelper::placeFormXObject</function>
for generating content stream text that places a given form
XObject on a page, centered and fit within a specified
rectangle. This method takes care of computing the proper
transformation matrix and may optionally compensate for
rotation or scaling of the destination page.
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>

View File

@ -60,6 +60,30 @@ struct RotationSpec
enum password_mode_e { pm_bytes, pm_hex_bytes, pm_unicode, pm_auto };
struct UnderOverlay
{
UnderOverlay(char const* which) :
which(which),
filename(0),
password(0),
to_nr("1-z"),
from_nr("1-z"),
repeat_nr("")
{
}
std::string which;
char const* filename;
char const* password;
char const* to_nr;
char const* from_nr;
char const* repeat_nr;
PointerHolder<QPDF> pdf;
std::vector<int> to_pagenos;
std::vector<int> from_pagenos;
std::vector<int> repeat_pagenos;
};
struct Options
{
Options() :
@ -140,6 +164,9 @@ struct Options
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.
underlay("underlay"),
overlay("overlay"),
under_overlay(0),
require_outfile(true),
infilename(0),
outfilename(0)
@ -230,6 +257,9 @@ struct Options
size_t oi_min_width;
size_t oi_min_height;
size_t oi_min_area;
UnderOverlay underlay;
UnderOverlay overlay;
UnderOverlay* under_overlay;
std::vector<PageSpec> page_specs;
std::map<std::string, RotationSpec> rotations;
bool require_outfile;
@ -583,6 +613,8 @@ class ArgParser
void argCopyEncryption(char* parameter);
void argEncryptionFilePassword(char* parameter);
void argPages();
void argUnderlay();
void argOverlay();
void argRotate(char* parameter);
void argCollate();
void argStreamData(char* parameter);
@ -647,6 +679,12 @@ class ArgParser
void arg128ForceV4();
void arg256ForceR5();
void argEndEncrypt();
void argUOpositional(char* arg);
void argUOto(char* parameter);
void argUOfrom(char* parameter);
void argUOrepeat(char* parameter);
void argUOpassword(char* parameter);
void argEndUnderOverlay();
void usage(std::string const& message);
void checkCompletion();
@ -660,6 +698,7 @@ class ArgParser
void addChoicesToCompletions(std::string const&, std::string const&);
void handleCompletion();
std::vector<PageSpec> parsePagesOptions();
void parseUnderOverlayOptions(UnderOverlay*);
void parseRotationParameter(std::string const&);
std::vector<int> parseNumrange(char const* range, int max,
bool throw_error = false);
@ -681,6 +720,7 @@ class ArgParser
std::map<std::string, OptionEntry> encrypt40_option_table;
std::map<std::string, OptionEntry> encrypt128_option_table;
std::map<std::string, OptionEntry> encrypt256_option_table;
std::map<std::string, OptionEntry> under_overlay_option_table;
std::vector<PointerHolder<char> > new_argv;
std::vector<PointerHolder<char> > bash_argv;
PointerHolder<char*> argv_ph;
@ -762,7 +802,8 @@ ArgParser::initOptionTable()
t = &this->main_option_table;
char const* yn[] = {"y", "n", 0};
(*t)[""] = oe_positional(&ArgParser::argPositional);
(*t)["password"] = oe_requiredParameter(&ArgParser::argPassword, "pass");
(*t)["password"] = oe_requiredParameter(
&ArgParser::argPassword, "password");
(*t)["empty"] = oe_bare(&ArgParser::argEmpty);
(*t)["linearize"] = oe_bare(&ArgParser::argLinearize);
(*t)["encrypt"] = oe_bare(&ArgParser::argEncrypt);
@ -859,6 +900,8 @@ ArgParser::initOptionTable()
&ArgParser::argOiMinHeight, "minimum-height");
(*t)["oi-min-area"] = oe_requiredParameter(
&ArgParser::argOiMinArea, "minimum-area");
(*t)["overlay"] = oe_bare(&ArgParser::argOverlay);
(*t)["underlay"] = oe_bare(&ArgParser::argUnderlay);
t = &this->encrypt40_option_table;
(*t)["--"] = oe_bare(&ArgParser::argEndEncrypt);
@ -893,6 +936,18 @@ ArgParser::initOptionTable()
t = &this->encrypt256_option_table;
(*t)["force-R5"] = oe_bare(&ArgParser::arg256ForceR5);
t = &this->under_overlay_option_table;
(*t)[""] = oe_positional(&ArgParser::argUOpositional);
(*t)["to"] = oe_requiredParameter(
&ArgParser::argUOto, "page-range");
(*t)["from"] = oe_requiredParameter(
&ArgParser::argUOfrom, "page-range");
(*t)["repeat"] = oe_requiredParameter(
&ArgParser::argUOrepeat, "page-range");
(*t)["password"] = oe_requiredParameter(
&ArgParser::argUOpassword, "password");
(*t)["--"] = oe_bare(&ArgParser::argEndUnderOverlay);
}
void
@ -1011,6 +1066,8 @@ ArgParser::argHelp()
<< " rotate each specified page 90, 180, or 270 degrees;\n"
<< " rotate all pages if no page range is given\n"
<< "--split-pages=[n] write each output page to a separate file\n"
<< "--overlay options -- overlay pages from another file\n"
<< "--underlay options -- underlay pages from another file\n"
<< "\n"
<< "Note that you can use the @filename or @- syntax for any argument at any\n"
<< "point in the command. This provides a good way to specify a password without\n"
@ -1129,6 +1186,7 @@ ArgParser::argHelp()
<< "\n"
<< "This is a complex topic. See the manual for a complete discussion.\n"
<< "\n"
<< "\n"
<< "Page Selection Options\n"
<< "----------------------\n"
<< "\n"
@ -1181,6 +1239,35 @@ ArgParser::argHelp()
<< "See the manual for examples and a discussion of additional subtleties.\n"
<< "\n"
<< "\n"
<< "Overlay and Underlay Options\n"
<< "-------------------------------\n"
<< "\n"
<< "These options allow pages from another file to be overlaid or underlaid\n"
<< "on the primary output. Overlaid pages are drawn on top of the destination\n"
<< "page and may obsecure the page. Underlaid pages are drawn below the\n"
<< "destination page.\n"
<< "\n"
<< "{--overlay | --underlay } file\n"
" [ --password=password ]\n"
" [ --to=page-range ]\n"
" [ --from=[page-range] ]\n"
" [ --repeat=page-range ]\n"
" --\n"
<< "\n"
<< "For overlay and underlay, a file and optional password are specified, along\n"
<< "with a series of optional page ranges. The default behavior is that each\n"
<< "page of the overlay or underlay file is imposed on the corresponding page\n"
<< "of the primary output until it runs out of pages, and any extra pages are\n"
<< "ignored. The page range options all take page ranges in the same form as\n"
<< "the --pages option. They have the following meanings:\n"
<< "\n"
<< " --to: the pages in the primary output to which overlay/underlay is\n"
<< " applied\n"
<< " --from: the pages from the overlay/underlay file that are used\n"
<< " --repeat: pages from the overlay/underlay that are repeated after\n"
<< " any \"from\" pages have been exhausted\n"
<< "\n"
<< "\n"
<< "Advanced Parsing Options\n"
<< "-------------------------------\n"
<< "\n"
@ -1528,6 +1615,18 @@ ArgParser::argPages()
}
}
void
ArgParser::argUnderlay()
{
parseUnderOverlayOptions(&o.underlay);
}
void
ArgParser::argOverlay()
{
parseUnderOverlayOptions(&o.overlay);
}
void
ArgParser::argRotate(char* parameter)
{
@ -2042,6 +2141,63 @@ ArgParser::argEndEncrypt()
this->option_table = &(this->main_option_table);
}
void
ArgParser::argUOpositional(char* arg)
{
if (o.under_overlay->filename)
{
usage(o.under_overlay->which + " file already specified");
}
else
{
o.under_overlay->filename = arg;
}
}
void
ArgParser::argUOto(char* parameter)
{
parseNumrange(parameter, 0);
o.under_overlay->to_nr = parameter;
}
void
ArgParser::argUOfrom(char* parameter)
{
if (strlen(parameter))
{
parseNumrange(parameter, 0);
}
o.under_overlay->from_nr = parameter;
}
void
ArgParser::argUOrepeat(char* parameter)
{
if (strlen(parameter))
{
parseNumrange(parameter, 0);
}
o.under_overlay->repeat_nr = parameter;
}
void
ArgParser::argUOpassword(char* parameter)
{
o.under_overlay->password = parameter;
}
void
ArgParser::argEndUnderOverlay()
{
this->option_table = &(this->main_option_table);
if (0 == o.under_overlay->filename)
{
usage(o.under_overlay->which + " file not specified");
}
o.under_overlay = 0;
}
void
ArgParser::handleArgFileArguments()
{
@ -2398,6 +2554,13 @@ ArgParser::parsePagesOptions()
return result;
}
void
ArgParser::parseUnderOverlayOptions(UnderOverlay* uo)
{
o.under_overlay = uo;
this->option_table = &(this->under_overlay_option_table);
}
QPDFPageData::QPDFPageData(std::string const& filename,
QPDF* qpdf,
char const* range) :
@ -3853,6 +4016,184 @@ static PointerHolder<QPDF> process_input_source(
return do_process(&QPDF::processInputSource, is, password, o, false);
}
static void validate_under_overlay(QPDF& pdf, UnderOverlay* uo, Options& o)
{
if (0 == uo->filename)
{
return;
}
QPDFPageDocumentHelper main_pdh(pdf);
int main_npages = static_cast<int>(main_pdh.getAllPages().size());
uo->pdf = process_file(uo->filename, uo->password, o);
QPDFPageDocumentHelper uo_pdh(*(uo->pdf));
int uo_npages = static_cast<int>(uo_pdh.getAllPages().size());
try
{
uo->to_pagenos = QUtil::parse_numrange(uo->to_nr, main_npages);
}
catch (std::runtime_error& e)
{
usageExit("parsing numeric range for " + uo->which +
" \"to\" pages: " + e.what());
}
try
{
if (0 == strlen(uo->from_nr))
{
QTC::TC("qpdf", "qpdf from_nr from repeat_nr");
uo->from_nr = uo->repeat_nr;
}
uo->from_pagenos = QUtil::parse_numrange(uo->from_nr, uo_npages);
if (strlen(uo->repeat_nr))
{
uo->repeat_pagenos =
QUtil::parse_numrange(uo->repeat_nr, uo_npages);
}
}
catch (std::runtime_error& e)
{
usageExit("parsing numeric range for " + uo->which + " file " +
uo->filename + ": " + e.what());
}
}
static void get_uo_pagenos(UnderOverlay& uo,
std::map<int, std::vector<int> >& pagenos)
{
size_t idx = 0;
size_t from_size = uo.from_pagenos.size();
size_t repeat_size = uo.repeat_pagenos.size();
for (std::vector<int>::iterator iter = uo.to_pagenos.begin();
iter != uo.to_pagenos.end(); ++iter, ++idx)
{
if (idx < from_size)
{
pagenos[*iter].push_back(uo.from_pagenos.at(idx));
}
else if (repeat_size)
{
pagenos[*iter].push_back(
uo.repeat_pagenos.at((idx - from_size) % repeat_size));
}
}
}
static void do_under_overlay_for_page(
QPDF& pdf,
Options& o,
UnderOverlay& uo,
std::map<int, std::vector<int> >& pagenos,
size_t page_idx,
std::map<int, QPDFObjectHandle>& fo,
std::vector<QPDFPageObjectHelper>& pages,
QPDFPageObjectHelper& dest_page,
bool before)
{
int pageno = 1 + page_idx;
if (! pagenos.count(pageno))
{
return;
}
std::string content;
int min_suffix = 1;
QPDFObjectHandle resources = dest_page.getAttribute("/Resources", true);
for (std::vector<int>::iterator iter = pagenos[pageno].begin();
iter != pagenos[pageno].end(); ++iter)
{
int from_pageno = *iter;
if (o.verbose)
{
std::cout << " " << uo.which << " " << from_pageno << std::endl;
}
if (0 == fo.count(from_pageno))
{
fo[from_pageno] =
pdf.copyForeignObject(
pages.at(from_pageno - 1).getFormXObjectForPage());
}
// If the same page is overlaid or underlaid multiple times,
// we'll generate multiple names for it, but that's harmless
// and also a pretty goofy case that's not worth coding
// around.
std::string name = resources.getUniqueResourceName("/Fx", min_suffix);
std::string new_content = dest_page.placeFormXObject(
fo[from_pageno], name,
dest_page.getTrimBox().getArrayAsRectangle());
if (! new_content.empty())
{
resources.mergeResources(
QPDFObjectHandle::parse("<< /XObject << >> >>"));
resources.getKey("/XObject").replaceKey(name, fo[from_pageno]);
++min_suffix;
content += new_content;
}
}
if (! content.empty())
{
if (before)
{
dest_page.addPageContents(
QPDFObjectHandle::newStream(&pdf, content), true);
}
else
{
dest_page.addPageContents(
QPDFObjectHandle::newStream(&pdf, "q\n"), true);
dest_page.addPageContents(
QPDFObjectHandle::newStream(&pdf, "\nQ\n" + content), false);
}
}
}
static void handle_under_overlay(QPDF& pdf, Options& o)
{
validate_under_overlay(pdf, &o.underlay, o);
validate_under_overlay(pdf, &o.overlay, o);
if ((0 == o.underlay.pdf.getPointer()) &&
(0 == o.overlay.pdf.getPointer()))
{
return;
}
std::map<int, std::vector<int> > underlay_pagenos;
get_uo_pagenos(o.underlay, underlay_pagenos);
std::map<int, std::vector<int> > overlay_pagenos;
get_uo_pagenos(o.overlay, overlay_pagenos);
std::map<int, QPDFObjectHandle> underlay_fo;
std::map<int, QPDFObjectHandle> overlay_fo;
std::vector<QPDFPageObjectHelper> upages;
if (o.underlay.pdf.getPointer())
{
upages = QPDFPageDocumentHelper(*(o.underlay.pdf)).getAllPages();
}
std::vector<QPDFPageObjectHelper> opages;
if (o.overlay.pdf.getPointer())
{
opages = QPDFPageDocumentHelper(*(o.overlay.pdf)).getAllPages();
}
QPDFPageDocumentHelper main_pdh(pdf);
std::vector<QPDFPageObjectHelper> main_pages = main_pdh.getAllPages();
size_t main_npages = main_pages.size();
if (o.verbose)
{
std::cout << whoami << ": processing underlay/overlay" << std::endl;
}
for (size_t i = 0; i < main_npages; ++i)
{
if (o.verbose)
{
std::cout << " page " << 1+i << std::endl;
}
do_under_overlay_for_page(pdf, o, o.underlay, underlay_pagenos, i,
underlay_fo, upages, main_pages.at(i),
true);
do_under_overlay_for_page(pdf, o, o.overlay, overlay_pagenos, i,
overlay_fo, opages, main_pages.at(i),
false);
}
}
static void handle_transformations(QPDF& pdf, Options& o)
{
QPDFPageDocumentHelper dh(pdf);
@ -4636,7 +4977,6 @@ int realmain(int argc, char* argv[])
PointerHolder<QPDF> pdf_ph =
process_file(o.infilename, o.password, o);
QPDF& pdf = *pdf_ph;
handle_transformations(pdf, o);
if (! o.page_specs.empty())
{
handle_page_specs(pdf, o);
@ -4645,6 +4985,8 @@ int realmain(int argc, char* argv[])
{
handle_rotations(pdf, o);
}
handle_under_overlay(pdf, o);
handle_transformations(pdf, o);
if (o.outfilename == 0)
{

View File

@ -427,3 +427,4 @@ QPDFFormFieldObjectHelper replaced BMC at EOF 0
QPDFFormFieldObjectHelper fallback Tf 0
QPDFPageObjectHelper non-trivial inheritance 0
QPDFPageObjectHelper copy shared attribute 0
qpdf from_nr from repeat_nr 0

View File

@ -150,7 +150,7 @@ foreach my $c (@completion_tests)
show_ntests();
# ----------
$td->notify("--- Argument Parsing ---");
$n_tests += 4;
$n_tests += 6;
$td->runtest("required argument",
{$td->COMMAND => "qpdf --password minimal.pdf"},
@ -172,6 +172,16 @@ $td->runtest("\@file exists and file doesn't",
{$td->COMMAND => "qpdf --check \@file.pdf"},
{$td->FILE => "check-at-file.out", $td->EXIT_STATUS => 0},
$td->NORMALIZE_NEWLINES);
$td->runtest("missing underlay filename",
{$td->COMMAND => "qpdf --underlay --"},
{$td->REGEXP => ".*underlay file not specified.*",
$td->EXIT_STATUS => 2},
$td->NORMALIZE_NEWLINES);
$td->runtest("extra overlay filename",
{$td->COMMAND => "qpdf --overlay x x --"},
{$td->REGEXP => ".*overlay file already specified.*",
$td->EXIT_STATUS => 2},
$td->NORMALIZE_NEWLINES);
show_ntests();
# ----------
@ -345,6 +355,34 @@ foreach (my $i = 56; $i <= 59; ++$i)
{$td->FILE => "fx-overlay-$i.pdf"});
}
my @uo_cases = (
'--underlay fxo-green.pdf --repeat=z --to=1-14 --' .
' --overlay fxo-blue.pdf --', # 1
'--overlay fxo-green.pdf --from= --repeat=r2,r1 --' .
' --underlay fxo-blue.pdf --from=z-1 --', # 2
'--overlay fxo-green.pdf --from= --repeat=r2,r1 --' .
' --underlay fxo-blue.pdf --from=z-1 -- --coalesce-contents', # 3
'--overlay fxo-green.pdf --', # 4
'--underlay fxo-green.pdf --to=3-7 --', # 5
'--overlay fxo-blue.pdf --to=1,1,1,1 --from=1-4 --' .
' --pages . 1 --', #6
'--overlay 20-pages.pdf --password=user --', #7
);
$n_tests += 2 * scalar(@uo_cases);
for (my $i = 1; $i <= scalar(@uo_cases); ++$i)
{
my $args = $uo_cases[$i-1];
my $outbase = "uo-$i";
$td->runtest("overlay/underlay $i",
{$td->COMMAND =>
"qpdf --static-id --qdf --no-original-object-ids" .
" --verbose fxo-red.pdf a.pdf $args"},
{$td->FILE => "$outbase.out", $td->EXIT_STATUS => 0},
$td->NORMALIZE_NEWLINES);
$td->runtest("compare files",
{$td->FILE => "a.pdf"},
{$td->FILE => "$outbase.pdf"});
}
show_ntests();
# ----------

View File

@ -826,7 +826,7 @@ stream
BT
/F1 24 Tf
72 690 Td
(Page 3 - blue, 180) Tj
(Page 3 - blue, 180, trim-to-crop=10) Tj
ET
5 w
0 0 612 792 re s
@ -836,7 +836,7 @@ endstream
endobj
46 0 obj
133
150
endobj
%% Contents for page 4
@ -923,7 +923,7 @@ stream
BT
/F1 24 Tf
72 690 Td
(Page 4 - blue, 270) Tj
(Page 4 - blue, 270, crop=10, trim=20) Tj
ET
5 w
0 0 612 792 re s
@ -934,7 +934,7 @@ endstream
endobj
54 0 obj
152
170
endobj
%% Contents for page 5
@ -2156,118 +2156,118 @@ xref
0000008164 00000 n
0000008287 00000 n
0000008335 00000 n
0000008683 00000 n
0000008755 00000 n
0000008814 00000 n
0000008884 00000 n
0000009049 00000 n
0000009121 00000 n
0000009244 00000 n
0000009292 00000 n
0000009659 00000 n
0000009731 00000 n
0000009790 00000 n
0000009860 00000 n
0000010029 00000 n
0000010101 00000 n
0000010224 00000 n
0000010272 00000 n
0000010594 00000 n
0000010666 00000 n
0000010725 00000 n
0000010795 00000 n
0000010975 00000 n
0000011047 00000 n
0000011170 00000 n
0000011218 00000 n
0000011544 00000 n
0000011616 00000 n
0000011675 00000 n
0000011745 00000 n
0000011914 00000 n
0000011986 00000 n
0000012109 00000 n
0000012157 00000 n
0000012484 00000 n
0000012556 00000 n
0000012615 00000 n
0000012685 00000 n
0000012854 00000 n
0000012926 00000 n
0000013049 00000 n
0000013097 00000 n
0000013424 00000 n
0000013496 00000 n
0000013555 00000 n
0000013625 00000 n
0000013795 00000 n
0000013867 00000 n
0000013990 00000 n
0000014038 00000 n
0000014360 00000 n
0000014433 00000 n
0000014492 00000 n
0000014563 00000 n
0000014746 00000 n
0000014819 00000 n
0000014943 00000 n
0000014992 00000 n
0000015321 00000 n
0000015395 00000 n
0000015456 00000 n
0000015528 00000 n
0000015701 00000 n
0000015775 00000 n
0000015900 00000 n
0000015949 00000 n
0000016279 00000 n
0000016353 00000 n
0000016414 00000 n
0000016486 00000 n
0000016659 00000 n
0000016733 00000 n
0000016858 00000 n
0000016907 00000 n
0000017237 00000 n
0000017311 00000 n
0000017372 00000 n
0000017444 00000 n
0000017617 00000 n
0000017691 00000 n
0000017816 00000 n
0000017865 00000 n
0000018190 00000 n
0000018264 00000 n
0000018325 00000 n
0000018397 00000 n
0000018582 00000 n
0000018656 00000 n
0000018781 00000 n
0000018830 00000 n
0000019170 00000 n
0000019245 00000 n
0000019306 00000 n
0000019378 00000 n
0000019551 00000 n
0000019626 00000 n
0000019751 00000 n
0000019800 00000 n
0000020130 00000 n
0000020205 00000 n
0000020266 00000 n
0000020338 00000 n
0000020511 00000 n
0000020586 00000 n
0000020711 00000 n
0000020761 00000 n
0000021091 00000 n
0000021141 00000 n
0000021289 00000 n
0000008700 00000 n
0000008772 00000 n
0000008831 00000 n
0000008901 00000 n
0000009066 00000 n
0000009138 00000 n
0000009261 00000 n
0000009309 00000 n
0000009694 00000 n
0000009766 00000 n
0000009825 00000 n
0000009895 00000 n
0000010064 00000 n
0000010136 00000 n
0000010259 00000 n
0000010307 00000 n
0000010629 00000 n
0000010701 00000 n
0000010760 00000 n
0000010830 00000 n
0000011010 00000 n
0000011082 00000 n
0000011205 00000 n
0000011253 00000 n
0000011579 00000 n
0000011651 00000 n
0000011710 00000 n
0000011780 00000 n
0000011949 00000 n
0000012021 00000 n
0000012144 00000 n
0000012192 00000 n
0000012519 00000 n
0000012591 00000 n
0000012650 00000 n
0000012720 00000 n
0000012889 00000 n
0000012961 00000 n
0000013084 00000 n
0000013132 00000 n
0000013459 00000 n
0000013531 00000 n
0000013590 00000 n
0000013660 00000 n
0000013830 00000 n
0000013902 00000 n
0000014025 00000 n
0000014073 00000 n
0000014395 00000 n
0000014468 00000 n
0000014527 00000 n
0000014598 00000 n
0000014781 00000 n
0000014854 00000 n
0000014978 00000 n
0000015027 00000 n
0000015356 00000 n
0000015430 00000 n
0000015491 00000 n
0000015563 00000 n
0000015736 00000 n
0000015810 00000 n
0000015935 00000 n
0000015984 00000 n
0000016314 00000 n
0000016388 00000 n
0000016449 00000 n
0000016521 00000 n
0000016694 00000 n
0000016768 00000 n
0000016893 00000 n
0000016942 00000 n
0000017272 00000 n
0000017346 00000 n
0000017407 00000 n
0000017479 00000 n
0000017652 00000 n
0000017726 00000 n
0000017851 00000 n
0000017900 00000 n
0000018225 00000 n
0000018299 00000 n
0000018360 00000 n
0000018432 00000 n
0000018617 00000 n
0000018691 00000 n
0000018816 00000 n
0000018865 00000 n
0000019205 00000 n
0000019280 00000 n
0000019341 00000 n
0000019413 00000 n
0000019586 00000 n
0000019661 00000 n
0000019786 00000 n
0000019835 00000 n
0000020165 00000 n
0000020240 00000 n
0000020301 00000 n
0000020373 00000 n
0000020546 00000 n
0000020621 00000 n
0000020746 00000 n
0000020796 00000 n
0000021126 00000 n
0000021176 00000 n
0000021324 00000 n
trailer <<
/Root 1 0 R
/Size 153
/ID [<4866f3ccc81fb28dc4a27f0f976ce937><31415926535897932384626433832795>]
>>
startxref
21326
21361
%%EOF

View File

@ -842,7 +842,7 @@ stream
BT
/F1 24 Tf
72 690 Td
(Page 3 - blue, 180) Tj
(Page 3 - blue, 180, trim-to-crop=10) Tj
ET
5 w
0 0 612 792 re s
@ -852,7 +852,7 @@ endstream
endobj
46 0 obj
133
150
endobj
%% Contents for page 4
@ -947,7 +947,7 @@ stream
BT
/F1 24 Tf
72 690 Td
(Page 4 - blue, 270) Tj
(Page 4 - blue, 270, crop=10, trim=20) Tj
ET
5 w
0 0 612 792 re s
@ -958,7 +958,7 @@ endstream
endobj
54 0 obj
152
170
endobj
%% Contents for page 5
@ -2252,118 +2252,118 @@ xref
0000008263 00000 n
0000008388 00000 n
0000008436 00000 n
0000008884 00000 n
0000008956 00000 n
0000009015 00000 n
0000009085 00000 n
0000009250 00000 n
0000009322 00000 n
0000009448 00000 n
0000009496 00000 n
0000009960 00000 n
0000010032 00000 n
0000010091 00000 n
0000010161 00000 n
0000010330 00000 n
0000010402 00000 n
0000010525 00000 n
0000010573 00000 n
0000010895 00000 n
0000010967 00000 n
0000011026 00000 n
0000011096 00000 n
0000011276 00000 n
0000011348 00000 n
0000011473 00000 n
0000011521 00000 n
0000011944 00000 n
0000012016 00000 n
0000012075 00000 n
0000012145 00000 n
0000012314 00000 n
0000012386 00000 n
0000012509 00000 n
0000012557 00000 n
0000012984 00000 n
0000013056 00000 n
0000013115 00000 n
0000013185 00000 n
0000013354 00000 n
0000013426 00000 n
0000013551 00000 n
0000013599 00000 n
0000014023 00000 n
0000014095 00000 n
0000014154 00000 n
0000014224 00000 n
0000014394 00000 n
0000014466 00000 n
0000014589 00000 n
0000014637 00000 n
0000014959 00000 n
0000015032 00000 n
0000015091 00000 n
0000015162 00000 n
0000015345 00000 n
0000015418 00000 n
0000015544 00000 n
0000015593 00000 n
0000016019 00000 n
0000016093 00000 n
0000016154 00000 n
0000016226 00000 n
0000016399 00000 n
0000016473 00000 n
0000016598 00000 n
0000016647 00000 n
0000017077 00000 n
0000017151 00000 n
0000017212 00000 n
0000017284 00000 n
0000017457 00000 n
0000017531 00000 n
0000017658 00000 n
0000017707 00000 n
0000018134 00000 n
0000018208 00000 n
0000018269 00000 n
0000018341 00000 n
0000018514 00000 n
0000018588 00000 n
0000018713 00000 n
0000018762 00000 n
0000019087 00000 n
0000019161 00000 n
0000019222 00000 n
0000019294 00000 n
0000019479 00000 n
0000019553 00000 n
0000019680 00000 n
0000019729 00000 n
0000020166 00000 n
0000020241 00000 n
0000020302 00000 n
0000020374 00000 n
0000020547 00000 n
0000020622 00000 n
0000020747 00000 n
0000020796 00000 n
0000021226 00000 n
0000021301 00000 n
0000021362 00000 n
0000021434 00000 n
0000021607 00000 n
0000021682 00000 n
0000021809 00000 n
0000021859 00000 n
0000022286 00000 n
0000022336 00000 n
0000022484 00000 n
0000008901 00000 n
0000008973 00000 n
0000009032 00000 n
0000009102 00000 n
0000009267 00000 n
0000009339 00000 n
0000009465 00000 n
0000009513 00000 n
0000009995 00000 n
0000010067 00000 n
0000010126 00000 n
0000010196 00000 n
0000010365 00000 n
0000010437 00000 n
0000010560 00000 n
0000010608 00000 n
0000010930 00000 n
0000011002 00000 n
0000011061 00000 n
0000011131 00000 n
0000011311 00000 n
0000011383 00000 n
0000011508 00000 n
0000011556 00000 n
0000011979 00000 n
0000012051 00000 n
0000012110 00000 n
0000012180 00000 n
0000012349 00000 n
0000012421 00000 n
0000012544 00000 n
0000012592 00000 n
0000013019 00000 n
0000013091 00000 n
0000013150 00000 n
0000013220 00000 n
0000013389 00000 n
0000013461 00000 n
0000013586 00000 n
0000013634 00000 n
0000014058 00000 n
0000014130 00000 n
0000014189 00000 n
0000014259 00000 n
0000014429 00000 n
0000014501 00000 n
0000014624 00000 n
0000014672 00000 n
0000014994 00000 n
0000015067 00000 n
0000015126 00000 n
0000015197 00000 n
0000015380 00000 n
0000015453 00000 n
0000015579 00000 n
0000015628 00000 n
0000016054 00000 n
0000016128 00000 n
0000016189 00000 n
0000016261 00000 n
0000016434 00000 n
0000016508 00000 n
0000016633 00000 n
0000016682 00000 n
0000017112 00000 n
0000017186 00000 n
0000017247 00000 n
0000017319 00000 n
0000017492 00000 n
0000017566 00000 n
0000017693 00000 n
0000017742 00000 n
0000018169 00000 n
0000018243 00000 n
0000018304 00000 n
0000018376 00000 n
0000018549 00000 n
0000018623 00000 n
0000018748 00000 n
0000018797 00000 n
0000019122 00000 n
0000019196 00000 n
0000019257 00000 n
0000019329 00000 n
0000019514 00000 n
0000019588 00000 n
0000019715 00000 n
0000019764 00000 n
0000020201 00000 n
0000020276 00000 n
0000020337 00000 n
0000020409 00000 n
0000020582 00000 n
0000020657 00000 n
0000020782 00000 n
0000020831 00000 n
0000021261 00000 n
0000021336 00000 n
0000021397 00000 n
0000021469 00000 n
0000021642 00000 n
0000021717 00000 n
0000021844 00000 n
0000021894 00000 n
0000022321 00000 n
0000022371 00000 n
0000022519 00000 n
trailer <<
/Root 1 0 R
/Size 153
/ID [<4866f3ccc81fb28dc4a27f0f976ce937><31415926535897932384626433832795>]
>>
startxref
22521
22556
%%EOF

View File

@ -826,7 +826,7 @@ stream
BT
/F1 24 Tf
72 690 Td
(Page 3 - blue, 180) Tj
(Page 3 - blue, 180, trim-to-crop=10) Tj
ET
5 w
0 0 612 792 re s
@ -836,7 +836,7 @@ endstream
endobj
46 0 obj
133
150
endobj
%% Contents for page 4
@ -923,7 +923,7 @@ stream
BT
/F1 24 Tf
72 690 Td
(Page 4 - blue, 270) Tj
(Page 4 - blue, 270, crop=10, trim=20) Tj
ET
5 w
0 0 612 792 re s
@ -934,7 +934,7 @@ endstream
endobj
54 0 obj
152
170
endobj
%% Contents for page 5
@ -2156,118 +2156,118 @@ xref
0000008168 00000 n
0000008291 00000 n
0000008339 00000 n
0000008687 00000 n
0000008759 00000 n
0000008818 00000 n
0000008888 00000 n
0000009053 00000 n
0000009125 00000 n
0000009248 00000 n
0000009296 00000 n
0000009663 00000 n
0000009735 00000 n
0000009794 00000 n
0000009864 00000 n
0000010033 00000 n
0000010105 00000 n
0000010233 00000 n
0000010281 00000 n
0000010603 00000 n
0000010675 00000 n
0000010734 00000 n
0000010804 00000 n
0000010984 00000 n
0000011056 00000 n
0000011184 00000 n
0000011232 00000 n
0000011558 00000 n
0000011630 00000 n
0000011689 00000 n
0000011759 00000 n
0000011928 00000 n
0000012000 00000 n
0000012128 00000 n
0000012176 00000 n
0000012503 00000 n
0000012575 00000 n
0000012634 00000 n
0000012704 00000 n
0000012873 00000 n
0000012945 00000 n
0000013073 00000 n
0000013121 00000 n
0000013448 00000 n
0000013520 00000 n
0000013579 00000 n
0000013649 00000 n
0000013819 00000 n
0000013891 00000 n
0000014020 00000 n
0000014068 00000 n
0000014390 00000 n
0000014463 00000 n
0000014522 00000 n
0000014593 00000 n
0000014776 00000 n
0000014849 00000 n
0000014979 00000 n
0000015028 00000 n
0000015357 00000 n
0000015431 00000 n
0000015492 00000 n
0000015564 00000 n
0000015737 00000 n
0000015811 00000 n
0000015942 00000 n
0000015991 00000 n
0000016321 00000 n
0000016395 00000 n
0000016456 00000 n
0000016528 00000 n
0000016701 00000 n
0000016775 00000 n
0000016906 00000 n
0000016955 00000 n
0000017285 00000 n
0000017359 00000 n
0000017420 00000 n
0000017492 00000 n
0000017665 00000 n
0000017739 00000 n
0000017867 00000 n
0000017916 00000 n
0000018241 00000 n
0000018315 00000 n
0000018376 00000 n
0000018448 00000 n
0000018633 00000 n
0000018707 00000 n
0000018835 00000 n
0000018884 00000 n
0000019224 00000 n
0000019299 00000 n
0000019360 00000 n
0000019432 00000 n
0000019605 00000 n
0000019680 00000 n
0000019808 00000 n
0000019857 00000 n
0000020187 00000 n
0000020262 00000 n
0000020323 00000 n
0000020395 00000 n
0000020568 00000 n
0000020643 00000 n
0000020771 00000 n
0000020821 00000 n
0000021151 00000 n
0000021201 00000 n
0000021349 00000 n
0000008704 00000 n
0000008776 00000 n
0000008835 00000 n
0000008905 00000 n
0000009070 00000 n
0000009142 00000 n
0000009265 00000 n
0000009313 00000 n
0000009698 00000 n
0000009770 00000 n
0000009829 00000 n
0000009899 00000 n
0000010068 00000 n
0000010140 00000 n
0000010268 00000 n
0000010316 00000 n
0000010638 00000 n
0000010710 00000 n
0000010769 00000 n
0000010839 00000 n
0000011019 00000 n
0000011091 00000 n
0000011219 00000 n
0000011267 00000 n
0000011593 00000 n
0000011665 00000 n
0000011724 00000 n
0000011794 00000 n
0000011963 00000 n
0000012035 00000 n
0000012163 00000 n
0000012211 00000 n
0000012538 00000 n
0000012610 00000 n
0000012669 00000 n
0000012739 00000 n
0000012908 00000 n
0000012980 00000 n
0000013108 00000 n
0000013156 00000 n
0000013483 00000 n
0000013555 00000 n
0000013614 00000 n
0000013684 00000 n
0000013854 00000 n
0000013926 00000 n
0000014055 00000 n
0000014103 00000 n
0000014425 00000 n
0000014498 00000 n
0000014557 00000 n
0000014628 00000 n
0000014811 00000 n
0000014884 00000 n
0000015014 00000 n
0000015063 00000 n
0000015392 00000 n
0000015466 00000 n
0000015527 00000 n
0000015599 00000 n
0000015772 00000 n
0000015846 00000 n
0000015977 00000 n
0000016026 00000 n
0000016356 00000 n
0000016430 00000 n
0000016491 00000 n
0000016563 00000 n
0000016736 00000 n
0000016810 00000 n
0000016941 00000 n
0000016990 00000 n
0000017320 00000 n
0000017394 00000 n
0000017455 00000 n
0000017527 00000 n
0000017700 00000 n
0000017774 00000 n
0000017902 00000 n
0000017951 00000 n
0000018276 00000 n
0000018350 00000 n
0000018411 00000 n
0000018483 00000 n
0000018668 00000 n
0000018742 00000 n
0000018870 00000 n
0000018919 00000 n
0000019259 00000 n
0000019334 00000 n
0000019395 00000 n
0000019467 00000 n
0000019640 00000 n
0000019715 00000 n
0000019843 00000 n
0000019892 00000 n
0000020222 00000 n
0000020297 00000 n
0000020358 00000 n
0000020430 00000 n
0000020603 00000 n
0000020678 00000 n
0000020806 00000 n
0000020856 00000 n
0000021186 00000 n
0000021236 00000 n
0000021384 00000 n
trailer <<
/Root 1 0 R
/Size 153
/ID [<4866f3ccc81fb28dc4a27f0f976ce937><31415926535897932384626433832795>]
>>
startxref
21386
21421
%%EOF

View File

@ -842,7 +842,7 @@ stream
BT
/F1 24 Tf
72 690 Td
(Page 3 - blue, 180) Tj
(Page 3 - blue, 180, trim-to-crop=10) Tj
ET
5 w
0 0 612 792 re s
@ -852,7 +852,7 @@ endstream
endobj
46 0 obj
133
150
endobj
%% Contents for page 4
@ -947,7 +947,7 @@ stream
BT
/F1 24 Tf
72 690 Td
(Page 4 - blue, 270) Tj
(Page 4 - blue, 270, crop=10, trim=20) Tj
ET
5 w
0 0 612 792 re s
@ -958,7 +958,7 @@ endstream
endobj
54 0 obj
152
170
endobj
%% Contents for page 5
@ -2252,118 +2252,118 @@ xref
0000008265 00000 n
0000008390 00000 n
0000008438 00000 n
0000008886 00000 n
0000008958 00000 n
0000009017 00000 n
0000009087 00000 n
0000009252 00000 n
0000009324 00000 n
0000009450 00000 n
0000009498 00000 n
0000009962 00000 n
0000010034 00000 n
0000010093 00000 n
0000010163 00000 n
0000010332 00000 n
0000010404 00000 n
0000010532 00000 n
0000010580 00000 n
0000010902 00000 n
0000010974 00000 n
0000011033 00000 n
0000011103 00000 n
0000011283 00000 n
0000011355 00000 n
0000011483 00000 n
0000011531 00000 n
0000011954 00000 n
0000012026 00000 n
0000012085 00000 n
0000012155 00000 n
0000012324 00000 n
0000012396 00000 n
0000012524 00000 n
0000012572 00000 n
0000012999 00000 n
0000013071 00000 n
0000013130 00000 n
0000013200 00000 n
0000013369 00000 n
0000013441 00000 n
0000013567 00000 n
0000013615 00000 n
0000014039 00000 n
0000014111 00000 n
0000014170 00000 n
0000014240 00000 n
0000014410 00000 n
0000014482 00000 n
0000014611 00000 n
0000014659 00000 n
0000014981 00000 n
0000015054 00000 n
0000015113 00000 n
0000015184 00000 n
0000015367 00000 n
0000015440 00000 n
0000015570 00000 n
0000015619 00000 n
0000016045 00000 n
0000016119 00000 n
0000016180 00000 n
0000016252 00000 n
0000016425 00000 n
0000016499 00000 n
0000016630 00000 n
0000016679 00000 n
0000017109 00000 n
0000017183 00000 n
0000017244 00000 n
0000017316 00000 n
0000017489 00000 n
0000017563 00000 n
0000017694 00000 n
0000017743 00000 n
0000018170 00000 n
0000018244 00000 n
0000018305 00000 n
0000018377 00000 n
0000018550 00000 n
0000018624 00000 n
0000018752 00000 n
0000018801 00000 n
0000019126 00000 n
0000019200 00000 n
0000019261 00000 n
0000019333 00000 n
0000019518 00000 n
0000019592 00000 n
0000019720 00000 n
0000019769 00000 n
0000020206 00000 n
0000020281 00000 n
0000020342 00000 n
0000020414 00000 n
0000020587 00000 n
0000020662 00000 n
0000020790 00000 n
0000020839 00000 n
0000021269 00000 n
0000021344 00000 n
0000021405 00000 n
0000021477 00000 n
0000021650 00000 n
0000021725 00000 n
0000021853 00000 n
0000021903 00000 n
0000022330 00000 n
0000022380 00000 n
0000022528 00000 n
0000008903 00000 n
0000008975 00000 n
0000009034 00000 n
0000009104 00000 n
0000009269 00000 n
0000009341 00000 n
0000009467 00000 n
0000009515 00000 n
0000009997 00000 n
0000010069 00000 n
0000010128 00000 n
0000010198 00000 n
0000010367 00000 n
0000010439 00000 n
0000010567 00000 n
0000010615 00000 n
0000010937 00000 n
0000011009 00000 n
0000011068 00000 n
0000011138 00000 n
0000011318 00000 n
0000011390 00000 n
0000011518 00000 n
0000011566 00000 n
0000011989 00000 n
0000012061 00000 n
0000012120 00000 n
0000012190 00000 n
0000012359 00000 n
0000012431 00000 n
0000012559 00000 n
0000012607 00000 n
0000013034 00000 n
0000013106 00000 n
0000013165 00000 n
0000013235 00000 n
0000013404 00000 n
0000013476 00000 n
0000013602 00000 n
0000013650 00000 n
0000014074 00000 n
0000014146 00000 n
0000014205 00000 n
0000014275 00000 n
0000014445 00000 n
0000014517 00000 n
0000014646 00000 n
0000014694 00000 n
0000015016 00000 n
0000015089 00000 n
0000015148 00000 n
0000015219 00000 n
0000015402 00000 n
0000015475 00000 n
0000015605 00000 n
0000015654 00000 n
0000016080 00000 n
0000016154 00000 n
0000016215 00000 n
0000016287 00000 n
0000016460 00000 n
0000016534 00000 n
0000016665 00000 n
0000016714 00000 n
0000017144 00000 n
0000017218 00000 n
0000017279 00000 n
0000017351 00000 n
0000017524 00000 n
0000017598 00000 n
0000017729 00000 n
0000017778 00000 n
0000018205 00000 n
0000018279 00000 n
0000018340 00000 n
0000018412 00000 n
0000018585 00000 n
0000018659 00000 n
0000018787 00000 n
0000018836 00000 n
0000019161 00000 n
0000019235 00000 n
0000019296 00000 n
0000019368 00000 n
0000019553 00000 n
0000019627 00000 n
0000019755 00000 n
0000019804 00000 n
0000020241 00000 n
0000020316 00000 n
0000020377 00000 n
0000020449 00000 n
0000020622 00000 n
0000020697 00000 n
0000020825 00000 n
0000020874 00000 n
0000021304 00000 n
0000021379 00000 n
0000021440 00000 n
0000021512 00000 n
0000021685 00000 n
0000021760 00000 n
0000021888 00000 n
0000021938 00000 n
0000022365 00000 n
0000022415 00000 n
0000022563 00000 n
trailer <<
/Root 1 0 R
/Size 153
/ID [<4866f3ccc81fb28dc4a27f0f976ce937><31415926535897932384626433832795>]
>>
startxref
22565
22600
%%EOF

View File

@ -475,7 +475,7 @@ stream
BT
/F1 24 Tf
72 690 Td
(Page 3 - blue, 180) Tj
(Page 3 - blue, 180, trim-to-crop=10) Tj
ET
5 w
0 0 612 792 re s
@ -485,7 +485,7 @@ endstream
endobj
26 0 obj
133
150
endobj
%% Contents for page 4
@ -499,7 +499,7 @@ stream
BT
/F1 24 Tf
72 690 Td
(Page 4 - blue, 270) Tj
(Page 4 - blue, 270, crop=10, trim=20) Tj
ET
5 w
0 0 612 792 re s
@ -510,7 +510,7 @@ endstream
endobj
28 0 obj
152
170
endobj
%% Contents for page 5
@ -817,38 +817,38 @@ xref
0000004316 00000 n
0000004486 00000 n
0000004530 00000 n
0000004720 00000 n
0000004764 00000 n
0000004973 00000 n
0000005017 00000 n
0000005183 00000 n
0000005227 00000 n
0000005397 00000 n
0000005441 00000 n
0000005612 00000 n
0000005656 00000 n
0000005827 00000 n
0000005871 00000 n
0000006037 00000 n
0000006082 00000 n
0000006253 00000 n
0000006298 00000 n
0000006470 00000 n
0000006515 00000 n
0000006687 00000 n
0000006732 00000 n
0000006899 00000 n
0000006944 00000 n
0000007126 00000 n
0000007171 00000 n
0000007343 00000 n
0000007388 00000 n
0000007560 00000 n
0000004737 00000 n
0000004781 00000 n
0000005008 00000 n
0000005052 00000 n
0000005218 00000 n
0000005262 00000 n
0000005432 00000 n
0000005476 00000 n
0000005647 00000 n
0000005691 00000 n
0000005862 00000 n
0000005906 00000 n
0000006072 00000 n
0000006117 00000 n
0000006288 00000 n
0000006333 00000 n
0000006505 00000 n
0000006550 00000 n
0000006722 00000 n
0000006767 00000 n
0000006934 00000 n
0000006979 00000 n
0000007161 00000 n
0000007206 00000 n
0000007378 00000 n
0000007423 00000 n
0000007595 00000 n
trailer <<
/Root 1 0 R
/Size 53
/ID [<4866f3ccc81fb28dc4a27f0f976ce937><ac1c8b0fc0fc7cde25973f6a4877193a>]
>>
startxref
7581
7616
%%EOF

48
qpdf/qtest/qpdf/uo-1.out Normal file
View File

@ -0,0 +1,48 @@
qpdf: processing underlay/overlay
page 1
underlay 1
overlay 1
page 2
underlay 2
overlay 2
page 3
underlay 3
overlay 3
page 4
underlay 4
overlay 4
page 5
underlay 5
overlay 5
page 6
underlay 6
overlay 6
page 7
underlay 7
overlay 7
page 8
underlay 8
overlay 8
page 9
underlay 8
overlay 9
page 10
underlay 8
overlay 10
page 11
underlay 8
overlay 11
page 12
underlay 8
overlay 12
page 13
underlay 8
overlay 13
page 14
underlay 8
overlay 14
page 15
overlay 15
page 16
overlay 16
qpdf: wrote file a.pdf

2947
qpdf/qtest/qpdf/uo-1.pdf Normal file

File diff suppressed because it is too large Load Diff

50
qpdf/qtest/qpdf/uo-2.out Normal file
View File

@ -0,0 +1,50 @@
qpdf: processing underlay/overlay
page 1
underlay 16
overlay 7
page 2
underlay 15
overlay 8
page 3
underlay 14
overlay 7
page 4
underlay 13
overlay 8
page 5
underlay 12
overlay 7
page 6
underlay 11
overlay 8
page 7
underlay 10
overlay 7
page 8
underlay 9
overlay 8
page 9
underlay 8
overlay 7
page 10
underlay 7
overlay 8
page 11
underlay 6
overlay 7
page 12
underlay 5
overlay 8
page 13
underlay 4
overlay 7
page 14
underlay 3
overlay 8
page 15
underlay 2
overlay 7
page 16
underlay 1
overlay 8
qpdf: wrote file a.pdf

2729
qpdf/qtest/qpdf/uo-2.pdf Normal file

File diff suppressed because it is too large Load Diff

50
qpdf/qtest/qpdf/uo-3.out Normal file
View File

@ -0,0 +1,50 @@
qpdf: processing underlay/overlay
page 1
underlay 16
overlay 7
page 2
underlay 15
overlay 8
page 3
underlay 14
overlay 7
page 4
underlay 13
overlay 8
page 5
underlay 12
overlay 7
page 6
underlay 11
overlay 8
page 7
underlay 10
overlay 7
page 8
underlay 9
overlay 8
page 9
underlay 8
overlay 7
page 10
underlay 7
overlay 8
page 11
underlay 6
overlay 7
page 12
underlay 5
overlay 8
page 13
underlay 4
overlay 7
page 14
underlay 3
overlay 8
page 15
underlay 2
overlay 7
page 16
underlay 1
overlay 8
qpdf: wrote file a.pdf

1913
qpdf/qtest/qpdf/uo-3.pdf Normal file

File diff suppressed because it is too large Load Diff

26
qpdf/qtest/qpdf/uo-4.out Normal file
View File

@ -0,0 +1,26 @@
qpdf: processing underlay/overlay
page 1
overlay 1
page 2
overlay 2
page 3
overlay 3
page 4
overlay 4
page 5
overlay 5
page 6
overlay 6
page 7
overlay 7
page 8
overlay 8
page 9
page 10
page 11
page 12
page 13
page 14
page 15
page 16
qpdf: wrote file a.pdf

1575
qpdf/qtest/qpdf/uo-4.pdf Normal file

File diff suppressed because it is too large Load Diff

23
qpdf/qtest/qpdf/uo-5.out Normal file
View File

@ -0,0 +1,23 @@
qpdf: processing underlay/overlay
page 1
page 2
page 3
underlay 1
page 4
underlay 2
page 5
underlay 3
page 6
underlay 4
page 7
underlay 5
page 8
page 9
page 10
page 11
page 12
page 13
page 14
page 15
page 16
qpdf: wrote file a.pdf

1210
qpdf/qtest/qpdf/uo-5.pdf Normal file

File diff suppressed because it is too large Load Diff

10
qpdf/qtest/qpdf/uo-6.out Normal file
View File

@ -0,0 +1,10 @@
qpdf: selecting --keep-open-files=y
qpdf: removing unreferenced pages from primary input
qpdf: adding pages from fxo-red.pdf
qpdf: processing underlay/overlay
page 1
overlay 1
overlay 2
overlay 3
overlay 4
qpdf: wrote file a.pdf

357
qpdf/qtest/qpdf/uo-6.pdf Normal file
View File

@ -0,0 +1,357 @@
%PDF-1.3
%¿÷¢þ
%QDF-1.0
1 0 obj
<<
/Pages 2 0 R
/Type /Catalog
>>
endobj
2 0 obj
<<
/Count 1
/Kids [
3 0 R
]
/Type /Pages
>>
endobj
%% Page 1
3 0 obj
<<
/Contents [
4 0 R
6 0 R
8 0 R
]
/MediaBox [
0
0
612
792
]
/Parent 2 0 R
/Resources <<
/Font <<
/F1 10 0 R
>>
/ProcSet 11 0 R
/XObject <<
/Fx1 12 0 R
/Fx2 14 0 R
/Fx3 16 0 R
/Fx4 18 0 R
>>
>>
/Type /Page
>>
endobj
%% Contents for page 1
4 0 obj
<<
/Length 5 0 R
>>
stream
q
endstream
endobj
5 0 obj
2
endobj
%% Contents for page 1
6 0 obj
<<
/Length 7 0 R
>>
stream
1 0 0 RG
1 0 0 rg
BT
/F1 24 Tf
72 720 Td
(Page 1 - red) Tj
ET
5 w
0 0 612 792 re s
271 371 60 60 re f
endstream
endobj
7 0 obj
108
endobj
%% Contents for page 1
8 0 obj
<<
/Length 9 0 R
>>
stream
Q
q
1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 cm
/Fx1 Do
Q
q
0.77273 0.00000 0.00000 0.77273 0.00000 159.54545 cm
/Fx2 Do
Q
q
1.00000 0.00000 0.00000 1.00000 20.00000 20.00000 cm
/Fx3 Do
Q
q
0.81383 0.00000 0.00000 0.81383 16.27660 146.96809 cm
/Fx4 Do
Q
endstream
endobj
9 0 obj
262
endobj
10 0 obj
<<
/BaseFont /Helvetica
/Encoding /WinAnsiEncoding
/Name /F1
/Subtype /Type1
/Type /Font
>>
endobj
11 0 obj
[
/PDF
/Text
]
endobj
12 0 obj
<<
/BBox [
0
0
612
792
]
/Resources <<
/Font <<
/F1 20 0 R
>>
/ProcSet 21 0 R
>>
/Subtype /Form
/Type /XObject
/Length 13 0 R
>>
stream
0 0 1 RG
0 0 1 rg
BT
/F1 24 Tf
72 690 Td
(Page 1 - blue) Tj
ET
5 w
0 0 612 792 re s
291 391 60 60 re f
endstream
endobj
13 0 obj
109
endobj
14 0 obj
<<
/BBox [
0
0
612
792
]
/Matrix [
0.000000
-1.000000
1.000000
0.000000
0.000000
612.000000
]
/Resources <<
/Font <<
/F1 20 0 R
>>
/ProcSet 21 0 R
>>
/Subtype /Form
/Type /XObject
/Length 15 0 R
>>
stream
0 0 1 RG
0 0 1 rg
BT
/F1 24 Tf
72 690 Td
(Page 2 - blue, 90) Tj
ET
5 w
0 0 612 792 re s
291 391 60 60 re f
endstream
endobj
15 0 obj
113
endobj
16 0 obj
<<
/BBox [
10
10
602
782
]
/Matrix [
-1.000000
0.000000
0.000000
-1.000000
592.000000
772.000000
]
/Resources <<
/Font <<
/F1 20 0 R
>>
/ProcSet 21 0 R
>>
/Subtype /Form
/Type /XObject
/Length 17 0 R
>>
stream
0 0 1 RG
0 0 1 rg
BT
/F1 24 Tf
72 690 Td
(Page 3 - blue, 180, trim-to-crop=10) Tj
ET
5 w
0 0 612 792 re s
10 10 592 772 re s
291 391 60 60 re f
endstream
endobj
17 0 obj
150
endobj
18 0 obj
<<
/BBox [
20
20
592
772
]
/Matrix [
0.000000
1.000000
-1.000000
0.000000
752.000000
0.000000
]
/Resources <<
/Font <<
/F1 20 0 R
>>
/ProcSet 21 0 R
>>
/Subtype /Form
/Type /XObject
/Length 19 0 R
>>
stream
0 0 1 RG
0 0 1 rg
BT
/F1 24 Tf
72 690 Td
(Page 4 - blue, 270, crop=10, trim=20) Tj
ET
5 w
0 0 612 792 re s
10 10 592 772 re s
20 20 572 752 re s
291 391 60 60 re f
endstream
endobj
19 0 obj
170
endobj
20 0 obj
<<
/BaseFont /Helvetica
/Encoding /WinAnsiEncoding
/Name /F1
/Subtype /Type1
/Type /Font
>>
endobj
21 0 obj
[
/PDF
/Text
]
endobj
xref
0 22
0000000000 65535 f
0000000025 00000 n
0000000079 00000 n
0000000161 00000 n
0000000503 00000 n
0000000560 00000 n
0000000601 00000 n
0000000764 00000 n
0000000807 00000 n
0000001124 00000 n
0000001144 00000 n
0000001263 00000 n
0000001299 00000 n
0000001619 00000 n
0000001640 00000 n
0000002061 00000 n
0000002082 00000 n
0000002545 00000 n
0000002566 00000 n
0000003046 00000 n
0000003067 00000 n
0000003186 00000 n
trailer <<
/Root 1 0 R
/Size 22
/ID [<4866f3ccc81fb28dc4a27f0f976ce937><31415926535897932384626433832795>]
>>
startxref
3222
%%EOF

34
qpdf/qtest/qpdf/uo-7.out Normal file
View File

@ -0,0 +1,34 @@
qpdf: processing underlay/overlay
page 1
overlay 1
page 2
overlay 2
page 3
overlay 3
page 4
overlay 4
page 5
overlay 5
page 6
overlay 6
page 7
overlay 7
page 8
overlay 8
page 9
overlay 9
page 10
overlay 10
page 11
overlay 11
page 12
overlay 12
page 13
overlay 13
page 14
overlay 14
page 15
overlay 15
page 16
overlay 16
qpdf: wrote file a.pdf

2078
qpdf/qtest/qpdf/uo-7.pdf Normal file

File diff suppressed because it is too large Load Diff