mirror of
https://github.com/qpdf/qpdf.git
synced 2024-12-22 10:58:58 +00:00
Add --overlay and --underlay to qpdf CLI (fixes #207)
This commit is contained in:
parent
c2ae35540e
commit
426434c772
@ -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
|
||||
|
||||
|
@ -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 “from” 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>
|
||||
|
346
qpdf/qpdf.cc
346
qpdf/qpdf.cc
@ -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)
|
||||
{
|
||||
|
@ -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
|
||||
|
@ -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();
|
||||
# ----------
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
48
qpdf/qtest/qpdf/uo-1.out
Normal 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
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
50
qpdf/qtest/qpdf/uo-2.out
Normal 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
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
50
qpdf/qtest/qpdf/uo-3.out
Normal 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
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
26
qpdf/qtest/qpdf/uo-4.out
Normal 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
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
23
qpdf/qtest/qpdf/uo-5.out
Normal 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
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
10
qpdf/qtest/qpdf/uo-6.out
Normal 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
357
qpdf/qtest/qpdf/uo-6.pdf
Normal 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
34
qpdf/qtest/qpdf/uo-7.out
Normal 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
2078
qpdf/qtest/qpdf/uo-7.pdf
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user