Commit 6ef9e31233723f2e73a4ed9bc3cd1fcaa6c69b5d

Authored by Jay Berkenbilt
1 parent f38df27a

Add QPDFPageLabelDocumentHelper

ChangeLog
1 1 2018-12-18 Jay Berkenbilt <ejb@ql.org>
2 2  
  3 + * Add QPDFPageLabelDocumentHelper class. This is a document helper
  4 + class that provides useful methods for dealing with page labels.
  5 + It abstracts the fact that they are stored as number trees and
  6 + deals with interpolating intermediate values that are not in the
  7 + tree. It also has helper functions used by the qpdf command line
  8 + tool to preserve page labels when merging and splitting files.
  9 +
3 10 * Add QPDFNumberTreeObjectHelper class. This class provides useful
4 11 methods for dealing with number trees, which are discussed in
5 12 section 7.9.7 of the PDF spec (ISO-32000). Page label dictionaries
... ...
include/qpdf/QPDFPageLabelDocumentHelper.hh 0 → 100644
  1 +// Copyright (c) 2005-2018 Jay Berkenbilt
  2 +//
  3 +// This file is part of qpdf.
  4 +//
  5 +// Licensed under the Apache License, Version 2.0 (the "License");
  6 +// you may not use this file except in compliance with the License.
  7 +// You may obtain a copy of the License at
  8 +//
  9 +// http://www.apache.org/licenses/LICENSE-2.0
  10 +//
  11 +// Unless required by applicable law or agreed to in writing, software
  12 +// distributed under the License is distributed on an "AS IS" BASIS,
  13 +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14 +// See the License for the specific language governing permissions and
  15 +// limitations under the License.
  16 +//
  17 +// Versions of qpdf prior to version 7 were released under the terms
  18 +// of version 2.0 of the Artistic License. At your option, you may
  19 +// continue to consider qpdf to be licensed under those terms. Please
  20 +// see the manual for additional information.
  21 +
  22 +#ifndef QPDFPAGELABELDOCUMENTHELPER_HH
  23 +#define QPDFPAGELABELDOCUMENTHELPER_HH
  24 +
  25 +#include <qpdf/QPDFDocumentHelper.hh>
  26 +
  27 +#include <qpdf/QPDF.hh>
  28 +#include <qpdf/QPDFNumberTreeObjectHelper.hh>
  29 +#include <vector>
  30 +
  31 +#include <qpdf/DLL.h>
  32 +
  33 +// Page labels are discussed in the PDF spec (ISO-32000) in section
  34 +// 12.4.2.
  35 +//
  36 +// Page labels are implemented as a number tree. Each key is a page
  37 +// index, numbered from 0. The values are dictionaries with the
  38 +// following keys, all optional:
  39 +//
  40 +// * /Type: if present, must be /PageLabel
  41 +// * /S: one of /D, /R, /r, /A, or /a for decimal, upper-case and
  42 +// lower-case Roman numeral, or upper-case and lower-case alphabetic
  43 +// * /P: if present, a fixed prefix string that is prepended to each
  44 +// page number
  45 +// * /St: the starting number, or 1 if not specified
  46 +
  47 +class QPDFPageLabelDocumentHelper: public QPDFDocumentHelper
  48 +{
  49 + public:
  50 + QPDF_DLL
  51 + QPDFPageLabelDocumentHelper(QPDF&);
  52 +
  53 + QPDF_DLL
  54 + bool hasPageLabels();
  55 +
  56 + // Return a page label dictionary representing the page label for
  57 + // the given page. The page does not need to appear explicitly in
  58 + // the page label dictionary. This method will adjust /St as
  59 + // needed to produce a label that is suitable for the page.
  60 + QPDF_DLL
  61 + QPDFObjectHandle getLabelForPage(long long page_idx);
  62 +
  63 + // Append to the incoming vector a list of objects suitable for
  64 + // inclusion in a /PageLabels dictionary's /Nums field. start_idx
  65 + // and end_idx are the indexes to the starting and ending pages
  66 + // (inclusive) in the original file, and new_start_idx is the
  67 + // index to the first page in the new file. For example, if pages
  68 + // 10 through 12 of one file are being copied to a new file as
  69 + // pages 6 through 8, you would call getLabelsForPageRange(10, 12,
  70 + // 6), which would return as many entries as are required to add
  71 + // to the new file's PageLabels. This method fabricates a suitable
  72 + // entry even if the original document has no page labels. This
  73 + // behavior facilitates using this function to incrementally build
  74 + // up a page labels tree when merging files.
  75 + QPDF_DLL
  76 + void
  77 + getLabelsForPageRange(long long start_idx, long long end_idx,
  78 + long long new_start_idx,
  79 + std::vector<QPDFObjectHandle>& new_labels);
  80 +
  81 + private:
  82 + class Members
  83 + {
  84 + friend class QPDFPageLabelDocumentHelper;
  85 +
  86 + public:
  87 + QPDF_DLL
  88 + ~Members();
  89 +
  90 + private:
  91 + Members();
  92 + Members(Members const&);
  93 +
  94 + PointerHolder<QPDFNumberTreeObjectHelper> labels;
  95 + };
  96 +
  97 + PointerHolder<Members> m;
  98 +};
  99 +
  100 +#endif // QPDFPAGELABELDOCUMENTHELPER_HH
... ...
libqpdf/QPDFPageLabelDocumentHelper.cc 0 → 100644
  1 +#include <qpdf/QPDFPageLabelDocumentHelper.hh>
  2 +#include <qpdf/QTC.hh>
  3 +
  4 +QPDFPageLabelDocumentHelper::Members::~Members()
  5 +{
  6 +}
  7 +
  8 +QPDFPageLabelDocumentHelper::Members::Members()
  9 +{
  10 +}
  11 +
  12 +QPDFPageLabelDocumentHelper::QPDFPageLabelDocumentHelper(QPDF& qpdf) :
  13 + QPDFDocumentHelper(qpdf),
  14 + m(new Members())
  15 +{
  16 + QPDFObjectHandle root = qpdf.getRoot();
  17 + if (root.hasKey("/PageLabels"))
  18 + {
  19 + this->m->labels = new QPDFNumberTreeObjectHelper(
  20 + root.getKey("/PageLabels"));
  21 + }
  22 +}
  23 +
  24 +bool
  25 +QPDFPageLabelDocumentHelper::hasPageLabels()
  26 +{
  27 + return 0 != this->m->labels.getPointer();
  28 +}
  29 +
  30 +QPDFObjectHandle
  31 +QPDFPageLabelDocumentHelper::getLabelForPage(long long page_idx)
  32 +{
  33 + QPDFObjectHandle result(QPDFObjectHandle::newNull());
  34 + if (! hasPageLabels())
  35 + {
  36 + return result;
  37 + }
  38 + QPDFNumberTreeObjectHelper::numtree_number offset = 0;
  39 + QPDFObjectHandle label;
  40 + if (! this->m->labels->findObjectAtOrBelow(page_idx, label, offset))
  41 + {
  42 + return result;
  43 + }
  44 + if (! label.isDictionary())
  45 + {
  46 + return result;
  47 + }
  48 + QPDFObjectHandle S = label.getKey("/S"); // type (D, R, r, A, a)
  49 + QPDFObjectHandle P = label.getKey("/P"); // prefix
  50 + QPDFObjectHandle St = label.getKey("/St"); // starting number
  51 + long long start = 1;
  52 + if (St.isInteger())
  53 + {
  54 + start = St.getIntValue();
  55 + }
  56 + start += offset;
  57 + result = QPDFObjectHandle::newDictionary();
  58 + result.replaceOrRemoveKey("/S", S);
  59 + result.replaceOrRemoveKey("/P", P);
  60 + result.replaceOrRemoveKey("/St", QPDFObjectHandle::newInteger(start));
  61 + return result;
  62 +}
  63 +
  64 +void
  65 +QPDFPageLabelDocumentHelper::getLabelsForPageRange(
  66 + long long start_idx, long long end_idx, long long new_start_idx,
  67 + std::vector<QPDFObjectHandle>& new_labels)
  68 +{
  69 + // Start off with a suitable label for the first page. For every
  70 + // remaining page, if that page has an explicit entry, copy it.
  71 + // Otherwise, let the subsequent page just sequence from the prior
  72 + // entry. If there is no entry for the first page, fabricate one
  73 + // that would match how the page would look in a new file in which
  74 + // it also didn't have an explicit label.
  75 + QPDFObjectHandle label = getLabelForPage(start_idx);
  76 + if (label.isNull())
  77 + {
  78 + label = QPDFObjectHandle::newDictionary();
  79 + label.replaceKey(
  80 + "/St", QPDFObjectHandle::newInteger(1 + new_start_idx));
  81 + }
  82 + // See if the new label is redundant based on the previous entry
  83 + // in the vector. If so, don't add it.
  84 + size_t size = new_labels.size();
  85 + bool skip_first = false;
  86 + if (size >= 2)
  87 + {
  88 + QPDFObjectHandle last = new_labels[size - 1];
  89 + QPDFObjectHandle last_idx = new_labels[size - 2];
  90 + if (last_idx.isInteger() && last.isDictionary() &&
  91 + (label.getKey("/S").unparse() == last.getKey("/S").unparse()) &&
  92 + (label.getKey("/P").unparse() == last.getKey("/P").unparse()) &&
  93 + label.getKey("/St").isInteger() &&
  94 + last.getKey("/St").isInteger())
  95 + {
  96 + long long int st_delta =
  97 + label.getKey("/St").getIntValue() -
  98 + last.getKey("/St").getIntValue();
  99 + long long int idx_delta =
  100 + new_start_idx - last_idx.getIntValue();
  101 + if (st_delta == idx_delta)
  102 + {
  103 + QTC::TC("qpdf", "QPDFPageLabelDocumentHelper skip first");
  104 + skip_first = true;
  105 + }
  106 + }
  107 + }
  108 + if (! skip_first)
  109 + {
  110 + new_labels.push_back(QPDFObjectHandle::newInteger(new_start_idx));
  111 + new_labels.push_back(label);
  112 + }
  113 +
  114 + long long int idx_offset = new_start_idx - start_idx;
  115 + for (long long i = start_idx + 1; i <= end_idx; ++i)
  116 + {
  117 + if (this->m->labels->hasIndex(i) &&
  118 + (label = getLabelForPage(i)).isDictionary())
  119 + {
  120 + new_labels.push_back(QPDFObjectHandle::newInteger(i + idx_offset));
  121 + new_labels.push_back(label);
  122 + }
  123 + }
  124 +}
  125 +
... ...
libqpdf/build.mk
... ... @@ -45,6 +45,7 @@ SRCS_libqpdf = \
45 45 libqpdf/QPDFObject.cc \
46 46 libqpdf/QPDFObjectHandle.cc \
47 47 libqpdf/QPDFPageDocumentHelper.cc \
  48 + libqpdf/QPDFPageLabelDocumentHelper.cc \
48 49 libqpdf/QPDFPageObjectHelper.cc \
49 50 libqpdf/QPDFSystemError.cc \
50 51 libqpdf/QPDFTokenizer.cc \
... ...
qpdf/qtest/qpdf.test
... ... @@ -236,6 +236,24 @@ $td-&gt;runtest(&quot;number trees&quot;,
236 236  
237 237 show_ntests();
238 238 # ----------
  239 +$td->notify("--- Page Labels ---");
  240 +$n_tests += 3;
  241 +
  242 +$td->runtest("complex page labels",
  243 + {$td->COMMAND => "test_driver 47 page-labels-num-tree.pdf"},
  244 + {$td->FILE => "page-labels-num-tree.out", $td->EXIT_STATUS => 0},
  245 + $td->NORMALIZE_NEWLINES);
  246 +$td->runtest("no zero entry for page labels",
  247 + {$td->COMMAND => "test_driver 47 page-labels-no-zero.pdf"},
  248 + {$td->FILE => "page-labels-no-zero.out", $td->EXIT_STATUS => 0},
  249 + $td->NORMALIZE_NEWLINES);
  250 +$td->runtest("no page labels",
  251 + {$td->COMMAND => "test_driver 47 minimal.pdf"},
  252 + {$td->FILE => "no-page-labels.out", $td->EXIT_STATUS => 0},
  253 + $td->NORMALIZE_NEWLINES);
  254 +
  255 +show_ntests();
  256 +# ----------
239 257 $td->notify("--- Page API Tests ---");
240 258 $n_tests += 9;
241 259  
... ...
qpdf/qtest/qpdf/no-page-labels.out 0 → 100644
  1 +1 << /St 2 >>
  2 +test 47 done
... ...
qpdf/qtest/qpdf/page-labels-no-zero.out 0 → 100644
  1 +1 << /St 2 >>
  2 +3 << /P (blank) /St 1 >>
  3 +4 << /P (X-) /S /A /St 17 >>
  4 +6 << /P () /St 1 >>
  5 +7 << /S /R /St 3 >>
  6 +10 << /S /D /St 1 >>
  7 +12 << /S /a /St 1 >>
  8 +13 << /S /a /St 3 >>
  9 +16 << /P (q.) /S /D /St 6 >>
  10 +20 << /P (www) /St 1 >>
  11 +21 << /S /D /St 12 >>
  12 +23 << /S /D /St 16059 >>
  13 +24 << /S /R /St 50 >>
  14 +30 << /S /r /St 54 >>
  15 +test 47 done
... ...
qpdf/qtest/qpdf/page-labels-no-zero.pdf 0 → 100644
  1 +%PDF-1.3
  2 +%¿÷¢þ
  3 +%QDF-1.0
  4 +
  5 +1 0 obj
  6 +<<
  7 + /PageLabels 2 0 R
  8 + /Pages 3 0 R
  9 + /Type /Catalog
  10 +>>
  11 +endobj
  12 +
  13 +2 0 obj
  14 +<<
  15 + /Nums [
  16 + 2 << /P (blank) >>
  17 + 3 << /P (X-) /S /A /St 17 >>
  18 + 5 << /P () >>
  19 + 6 << /S /R /St 3 >>
  20 + 9 << /S /D >>
  21 + 11 << /S /a >>
  22 + 12 << /S /a /St 3 >>
  23 + 15 << /P (q.) /S /D /St 6 >>
  24 + 19 << /P (www) >>
  25 + 20 << /S /D /St 12 >>
  26 + 22 << /S /D /St 16059 >>
  27 + 23 << /S /R /St 50 >>
  28 + 29 << /S /r /St 54 >>
  29 + ]
  30 +>>
  31 +endobj
  32 +
  33 +3 0 obj
  34 +<<
  35 + /Count 30
  36 + /Kids [
  37 + 4 0 R
  38 + 5 0 R
  39 + 6 0 R
  40 + 7 0 R
  41 + 8 0 R
  42 + 9 0 R
  43 + 10 0 R
  44 + 11 0 R
  45 + 12 0 R
  46 + 13 0 R
  47 + 14 0 R
  48 + 15 0 R
  49 + 16 0 R
  50 + 17 0 R
  51 + 18 0 R
  52 + 19 0 R
  53 + 20 0 R
  54 + 21 0 R
  55 + 22 0 R
  56 + 23 0 R
  57 + 24 0 R
  58 + 25 0 R
  59 + 26 0 R
  60 + 27 0 R
  61 + 28 0 R
  62 + 29 0 R
  63 + 30 0 R
  64 + 31 0 R
  65 + 32 0 R
  66 + 33 0 R
  67 + ]
  68 + /Type /Pages
  69 +>>
  70 +endobj
  71 +
  72 +%% Page 1
  73 +4 0 obj
  74 +<<
  75 + /Contents 34 0 R
  76 + /MediaBox [
  77 + 0
  78 + 0
  79 + 612
  80 + 792
  81 + ]
  82 + /Parent 3 0 R
  83 + /Resources <<
  84 + /Font <<
  85 + /F1 36 0 R
  86 + >>
  87 + /ProcSet 37 0 R
  88 + >>
  89 + /Type /Page
  90 +>>
  91 +endobj
  92 +
  93 +%% Page 2
  94 +5 0 obj
  95 +<<
  96 + /Contents 38 0 R
  97 + /MediaBox [
  98 + 0
  99 + 0
  100 + 612
  101 + 792
  102 + ]
  103 + /Parent 3 0 R
  104 + /Resources <<
  105 + /Font <<
  106 + /F1 36 0 R
  107 + >>
  108 + /ProcSet 37 0 R
  109 + >>
  110 + /Type /Page
  111 +>>
  112 +endobj
  113 +
  114 +%% Page 3
  115 +6 0 obj
  116 +<<
  117 + /Contents 40 0 R
  118 + /MediaBox [
  119 + 0
  120 + 0
  121 + 612
  122 + 792
  123 + ]
  124 + /Parent 3 0 R
  125 + /Resources <<
  126 + /Font <<
  127 + /F1 36 0 R
  128 + >>
  129 + /ProcSet 37 0 R
  130 + >>
  131 + /Type /Page
  132 +>>
  133 +endobj
  134 +
  135 +%% Page 4
  136 +7 0 obj
  137 +<<
  138 + /Contents 42 0 R
  139 + /MediaBox [
  140 + 0
  141 + 0
  142 + 612
  143 + 792
  144 + ]
  145 + /Parent 3 0 R
  146 + /Resources <<
  147 + /Font <<
  148 + /F1 36 0 R
  149 + >>
  150 + /ProcSet 37 0 R
  151 + >>
  152 + /Type /Page
  153 +>>
  154 +endobj
  155 +
  156 +%% Page 5
  157 +8 0 obj
  158 +<<
  159 + /Contents 44 0 R
  160 + /MediaBox [
  161 + 0
  162 + 0
  163 + 612
  164 + 792
  165 + ]
  166 + /Parent 3 0 R
  167 + /Resources <<
  168 + /Font <<
  169 + /F1 36 0 R
  170 + >>
  171 + /ProcSet 37 0 R
  172 + >>
  173 + /Type /Page
  174 +>>
  175 +endobj
  176 +
  177 +%% Page 6
  178 +9 0 obj
  179 +<<
  180 + /Contents 46 0 R
  181 + /MediaBox [
  182 + 0
  183 + 0
  184 + 612
  185 + 792
  186 + ]
  187 + /Parent 3 0 R
  188 + /Resources <<
  189 + /Font <<
  190 + /F1 36 0 R
  191 + >>
  192 + /ProcSet 37 0 R
  193 + >>
  194 + /Type /Page
  195 +>>
  196 +endobj
  197 +
  198 +%% Page 7
  199 +10 0 obj
  200 +<<
  201 + /Contents 48 0 R
  202 + /MediaBox [
  203 + 0
  204 + 0
  205 + 612
  206 + 792
  207 + ]
  208 + /Parent 3 0 R
  209 + /Resources <<
  210 + /Font <<
  211 + /F1 36 0 R
  212 + >>
  213 + /ProcSet 37 0 R
  214 + >>
  215 + /Type /Page
  216 +>>
  217 +endobj
  218 +
  219 +%% Page 8
  220 +11 0 obj
  221 +<<
  222 + /Contents 50 0 R
  223 + /MediaBox [
  224 + 0
  225 + 0
  226 + 612
  227 + 792
  228 + ]
  229 + /Parent 3 0 R
  230 + /Resources <<
  231 + /Font <<
  232 + /F1 36 0 R
  233 + >>
  234 + /ProcSet 37 0 R
  235 + >>
  236 + /Type /Page
  237 +>>
  238 +endobj
  239 +
  240 +%% Page 9
  241 +12 0 obj
  242 +<<
  243 + /Contents 52 0 R
  244 + /MediaBox [
  245 + 0
  246 + 0
  247 + 612
  248 + 792
  249 + ]
  250 + /Parent 3 0 R
  251 + /Resources <<
  252 + /Font <<
  253 + /F1 36 0 R
  254 + >>
  255 + /ProcSet 37 0 R
  256 + >>
  257 + /Type /Page
  258 +>>
  259 +endobj
  260 +
  261 +%% Page 10
  262 +13 0 obj
  263 +<<
  264 + /Contents 54 0 R
  265 + /MediaBox [
  266 + 0
  267 + 0
  268 + 612
  269 + 792
  270 + ]
  271 + /Parent 3 0 R
  272 + /Resources <<
  273 + /Font <<
  274 + /F1 36 0 R
  275 + >>
  276 + /ProcSet 37 0 R
  277 + >>
  278 + /Type /Page
  279 +>>
  280 +endobj
  281 +
  282 +%% Page 11
  283 +14 0 obj
  284 +<<
  285 + /Contents 56 0 R
  286 + /MediaBox [
  287 + 0
  288 + 0
  289 + 612
  290 + 792
  291 + ]
  292 + /Parent 3 0 R
  293 + /Resources <<
  294 + /Font <<
  295 + /F1 36 0 R
  296 + >>
  297 + /ProcSet 37 0 R
  298 + >>
  299 + /Type /Page
  300 +>>
  301 +endobj
  302 +
  303 +%% Page 12
  304 +15 0 obj
  305 +<<
  306 + /Contents 58 0 R
  307 + /MediaBox [
  308 + 0
  309 + 0
  310 + 612
  311 + 792
  312 + ]
  313 + /Parent 3 0 R
  314 + /Resources <<
  315 + /Font <<
  316 + /F1 36 0 R
  317 + >>
  318 + /ProcSet 37 0 R
  319 + >>
  320 + /Type /Page
  321 +>>
  322 +endobj
  323 +
  324 +%% Page 13
  325 +16 0 obj
  326 +<<
  327 + /Contents 60 0 R
  328 + /MediaBox [
  329 + 0
  330 + 0
  331 + 612
  332 + 792
  333 + ]
  334 + /Parent 3 0 R
  335 + /Resources <<
  336 + /Font <<
  337 + /F1 36 0 R
  338 + >>
  339 + /ProcSet 37 0 R
  340 + >>
  341 + /Type /Page
  342 +>>
  343 +endobj
  344 +
  345 +%% Page 14
  346 +17 0 obj
  347 +<<
  348 + /Contents 62 0 R
  349 + /MediaBox [
  350 + 0
  351 + 0
  352 + 612
  353 + 792
  354 + ]
  355 + /Parent 3 0 R
  356 + /Resources <<
  357 + /Font <<
  358 + /F1 36 0 R
  359 + >>
  360 + /ProcSet 37 0 R
  361 + >>
  362 + /Type /Page
  363 +>>
  364 +endobj
  365 +
  366 +%% Page 15
  367 +18 0 obj
  368 +<<
  369 + /Contents 64 0 R
  370 + /MediaBox [
  371 + 0
  372 + 0
  373 + 612
  374 + 792
  375 + ]
  376 + /Parent 3 0 R
  377 + /Resources <<
  378 + /Font <<
  379 + /F1 36 0 R
  380 + >>
  381 + /ProcSet 37 0 R
  382 + >>
  383 + /Type /Page
  384 +>>
  385 +endobj
  386 +
  387 +%% Page 16
  388 +19 0 obj
  389 +<<
  390 + /Contents 66 0 R
  391 + /MediaBox [
  392 + 0
  393 + 0
  394 + 612
  395 + 792
  396 + ]
  397 + /Parent 3 0 R
  398 + /Resources <<
  399 + /Font <<
  400 + /F1 36 0 R
  401 + >>
  402 + /ProcSet 37 0 R
  403 + >>
  404 + /Type /Page
  405 +>>
  406 +endobj
  407 +
  408 +%% Page 17
  409 +20 0 obj
  410 +<<
  411 + /Contents 68 0 R
  412 + /MediaBox [
  413 + 0
  414 + 0
  415 + 612
  416 + 792
  417 + ]
  418 + /Parent 3 0 R
  419 + /Resources <<
  420 + /Font <<
  421 + /F1 36 0 R
  422 + >>
  423 + /ProcSet 37 0 R
  424 + >>
  425 + /Type /Page
  426 +>>
  427 +endobj
  428 +
  429 +%% Page 18
  430 +21 0 obj
  431 +<<
  432 + /Contents 70 0 R
  433 + /MediaBox [
  434 + 0
  435 + 0
  436 + 612
  437 + 792
  438 + ]
  439 + /Parent 3 0 R
  440 + /Resources <<
  441 + /Font <<
  442 + /F1 36 0 R
  443 + >>
  444 + /ProcSet 37 0 R
  445 + >>
  446 + /Type /Page
  447 +>>
  448 +endobj
  449 +
  450 +%% Page 19
  451 +22 0 obj
  452 +<<
  453 + /Contents 72 0 R
  454 + /MediaBox [
  455 + 0
  456 + 0
  457 + 612
  458 + 792
  459 + ]
  460 + /Parent 3 0 R
  461 + /Resources <<
  462 + /Font <<
  463 + /F1 36 0 R
  464 + >>
  465 + /ProcSet 37 0 R
  466 + >>
  467 + /Type /Page
  468 +>>
  469 +endobj
  470 +
  471 +%% Page 20
  472 +23 0 obj
  473 +<<
  474 + /Contents 74 0 R
  475 + /MediaBox [
  476 + 0
  477 + 0
  478 + 612
  479 + 792
  480 + ]
  481 + /Parent 3 0 R
  482 + /Resources <<
  483 + /Font <<
  484 + /F1 36 0 R
  485 + >>
  486 + /ProcSet 37 0 R
  487 + >>
  488 + /Type /Page
  489 +>>
  490 +endobj
  491 +
  492 +%% Page 21
  493 +24 0 obj
  494 +<<
  495 + /Contents 76 0 R
  496 + /MediaBox [
  497 + 0
  498 + 0
  499 + 612
  500 + 792
  501 + ]
  502 + /Parent 3 0 R
  503 + /Resources <<
  504 + /Font <<
  505 + /F1 36 0 R
  506 + >>
  507 + /ProcSet 37 0 R
  508 + >>
  509 + /Type /Page
  510 +>>
  511 +endobj
  512 +
  513 +%% Page 22
  514 +25 0 obj
  515 +<<
  516 + /Contents 78 0 R
  517 + /MediaBox [
  518 + 0
  519 + 0
  520 + 612
  521 + 792
  522 + ]
  523 + /Parent 3 0 R
  524 + /Resources <<
  525 + /Font <<
  526 + /F1 36 0 R
  527 + >>
  528 + /ProcSet 37 0 R
  529 + >>
  530 + /Type /Page
  531 +>>
  532 +endobj
  533 +
  534 +%% Page 23
  535 +26 0 obj
  536 +<<
  537 + /Contents 80 0 R
  538 + /MediaBox [
  539 + 0
  540 + 0
  541 + 612
  542 + 792
  543 + ]
  544 + /Parent 3 0 R
  545 + /Resources <<
  546 + /Font <<
  547 + /F1 36 0 R
  548 + >>
  549 + /ProcSet 37 0 R
  550 + >>
  551 + /Type /Page
  552 +>>
  553 +endobj
  554 +
  555 +%% Page 24
  556 +27 0 obj
  557 +<<
  558 + /Contents 82 0 R
  559 + /MediaBox [
  560 + 0
  561 + 0
  562 + 612
  563 + 792
  564 + ]
  565 + /Parent 3 0 R
  566 + /Resources <<
  567 + /Font <<
  568 + /F1 36 0 R
  569 + >>
  570 + /ProcSet 37 0 R
  571 + >>
  572 + /Type /Page
  573 +>>
  574 +endobj
  575 +
  576 +%% Page 25
  577 +28 0 obj
  578 +<<
  579 + /Contents 84 0 R
  580 + /MediaBox [
  581 + 0
  582 + 0
  583 + 612
  584 + 792
  585 + ]
  586 + /Parent 3 0 R
  587 + /Resources <<
  588 + /Font <<
  589 + /F1 36 0 R
  590 + >>
  591 + /ProcSet 37 0 R
  592 + >>
  593 + /Type /Page
  594 +>>
  595 +endobj
  596 +
  597 +%% Page 26
  598 +29 0 obj
  599 +<<
  600 + /Contents 86 0 R
  601 + /MediaBox [
  602 + 0
  603 + 0
  604 + 612
  605 + 792
  606 + ]
  607 + /Parent 3 0 R
  608 + /Resources <<
  609 + /Font <<
  610 + /F1 36 0 R
  611 + >>
  612 + /ProcSet 37 0 R
  613 + >>
  614 + /Type /Page
  615 +>>
  616 +endobj
  617 +
  618 +%% Page 27
  619 +30 0 obj
  620 +<<
  621 + /Contents 88 0 R
  622 + /MediaBox [
  623 + 0
  624 + 0
  625 + 612
  626 + 792
  627 + ]
  628 + /Parent 3 0 R
  629 + /Resources <<
  630 + /Font <<
  631 + /F1 36 0 R
  632 + >>
  633 + /ProcSet 37 0 R
  634 + >>
  635 + /Type /Page
  636 +>>
  637 +endobj
  638 +
  639 +%% Page 28
  640 +31 0 obj
  641 +<<
  642 + /Contents 90 0 R
  643 + /MediaBox [
  644 + 0
  645 + 0
  646 + 612
  647 + 792
  648 + ]
  649 + /Parent 3 0 R
  650 + /Resources <<
  651 + /Font <<
  652 + /F1 36 0 R
  653 + >>
  654 + /ProcSet 37 0 R
  655 + >>
  656 + /Type /Page
  657 +>>
  658 +endobj
  659 +
  660 +%% Page 29
  661 +32 0 obj
  662 +<<
  663 + /Contents 92 0 R
  664 + /MediaBox [
  665 + 0
  666 + 0
  667 + 612
  668 + 792
  669 + ]
  670 + /Parent 3 0 R
  671 + /Resources <<
  672 + /Font <<
  673 + /F1 36 0 R
  674 + >>
  675 + /ProcSet 37 0 R
  676 + >>
  677 + /Type /Page
  678 +>>
  679 +endobj
  680 +
  681 +%% Page 30
  682 +33 0 obj
  683 +<<
  684 + /Contents 94 0 R
  685 + /MediaBox [
  686 + 0
  687 + 0
  688 + 612
  689 + 792
  690 + ]
  691 + /Parent 3 0 R
  692 + /Resources <<
  693 + /Font <<
  694 + /F1 36 0 R
  695 + >>
  696 + /ProcSet 37 0 R
  697 + >>
  698 + /Type /Page
  699 +>>
  700 +endobj
  701 +
  702 +%% Contents for page 1
  703 +34 0 obj
  704 +<<
  705 + /Length 35 0 R
  706 +>>
  707 +stream
  708 +BT
  709 + /F1 24 Tf
  710 + 72 720 Td
  711 + (Potato 0) Tj
  712 +ET
  713 +endstream
  714 +endobj
  715 +
  716 +35 0 obj
  717 +46
  718 +endobj
  719 +
  720 +36 0 obj
  721 +<<
  722 + /BaseFont /Helvetica
  723 + /Encoding /WinAnsiEncoding
  724 + /Name /F1
  725 + /Subtype /Type1
  726 + /Type /Font
  727 +>>
  728 +endobj
  729 +
  730 +37 0 obj
  731 +[
  732 + /PDF
  733 + /Text
  734 +]
  735 +endobj
  736 +
  737 +%% Contents for page 2
  738 +38 0 obj
  739 +<<
  740 + /Length 39 0 R
  741 +>>
  742 +stream
  743 +BT
  744 + /F1 24 Tf
  745 + 72 720 Td
  746 + (Potato 1) Tj
  747 +ET
  748 +endstream
  749 +endobj
  750 +
  751 +39 0 obj
  752 +46
  753 +endobj
  754 +
  755 +%% Contents for page 3
  756 +40 0 obj
  757 +<<
  758 + /Length 41 0 R
  759 +>>
  760 +stream
  761 +BT
  762 + /F1 24 Tf
  763 + 72 720 Td
  764 + (Potato 2) Tj
  765 +ET
  766 +endstream
  767 +endobj
  768 +
  769 +41 0 obj
  770 +46
  771 +endobj
  772 +
  773 +%% Contents for page 4
  774 +42 0 obj
  775 +<<
  776 + /Length 43 0 R
  777 +>>
  778 +stream
  779 +BT
  780 + /F1 24 Tf
  781 + 72 720 Td
  782 + (Potato 3) Tj
  783 +ET
  784 +endstream
  785 +endobj
  786 +
  787 +43 0 obj
  788 +46
  789 +endobj
  790 +
  791 +%% Contents for page 5
  792 +44 0 obj
  793 +<<
  794 + /Length 45 0 R
  795 +>>
  796 +stream
  797 +BT
  798 + /F1 24 Tf
  799 + 72 720 Td
  800 + (Potato 4) Tj
  801 +ET
  802 +endstream
  803 +endobj
  804 +
  805 +45 0 obj
  806 +46
  807 +endobj
  808 +
  809 +%% Contents for page 6
  810 +46 0 obj
  811 +<<
  812 + /Length 47 0 R
  813 +>>
  814 +stream
  815 +BT
  816 + /F1 24 Tf
  817 + 72 720 Td
  818 + (Potato 5) Tj
  819 +ET
  820 +endstream
  821 +endobj
  822 +
  823 +47 0 obj
  824 +46
  825 +endobj
  826 +
  827 +%% Contents for page 7
  828 +48 0 obj
  829 +<<
  830 + /Length 49 0 R
  831 +>>
  832 +stream
  833 +BT
  834 + /F1 24 Tf
  835 + 72 720 Td
  836 + (Potato 6) Tj
  837 +ET
  838 +endstream
  839 +endobj
  840 +
  841 +49 0 obj
  842 +46
  843 +endobj
  844 +
  845 +%% Contents for page 8
  846 +50 0 obj
  847 +<<
  848 + /Length 51 0 R
  849 +>>
  850 +stream
  851 +BT
  852 + /F1 24 Tf
  853 + 72 720 Td
  854 + (Potato 7) Tj
  855 +ET
  856 +endstream
  857 +endobj
  858 +
  859 +51 0 obj
  860 +46
  861 +endobj
  862 +
  863 +%% Contents for page 9
  864 +52 0 obj
  865 +<<
  866 + /Length 53 0 R
  867 +>>
  868 +stream
  869 +BT
  870 + /F1 24 Tf
  871 + 72 720 Td
  872 + (Potato 8) Tj
  873 +ET
  874 +endstream
  875 +endobj
  876 +
  877 +53 0 obj
  878 +46
  879 +endobj
  880 +
  881 +%% Contents for page 10
  882 +54 0 obj
  883 +<<
  884 + /Length 55 0 R
  885 +>>
  886 +stream
  887 +BT
  888 + /F1 24 Tf
  889 + 72 720 Td
  890 + (Potato 9) Tj
  891 +ET
  892 +endstream
  893 +endobj
  894 +
  895 +55 0 obj
  896 +46
  897 +endobj
  898 +
  899 +%% Contents for page 11
  900 +56 0 obj
  901 +<<
  902 + /Length 57 0 R
  903 +>>
  904 +stream
  905 +BT
  906 + /F1 24 Tf
  907 + 72 720 Td
  908 + (Potato 10) Tj
  909 +ET
  910 +endstream
  911 +endobj
  912 +
  913 +57 0 obj
  914 +47
  915 +endobj
  916 +
  917 +%% Contents for page 12
  918 +58 0 obj
  919 +<<
  920 + /Length 59 0 R
  921 +>>
  922 +stream
  923 +BT
  924 + /F1 24 Tf
  925 + 72 720 Td
  926 + (Potato 11) Tj
  927 +ET
  928 +endstream
  929 +endobj
  930 +
  931 +59 0 obj
  932 +47
  933 +endobj
  934 +
  935 +%% Contents for page 13
  936 +60 0 obj
  937 +<<
  938 + /Length 61 0 R
  939 +>>
  940 +stream
  941 +BT
  942 + /F1 24 Tf
  943 + 72 720 Td
  944 + (Potato 12) Tj
  945 +ET
  946 +endstream
  947 +endobj
  948 +
  949 +61 0 obj
  950 +47
  951 +endobj
  952 +
  953 +%% Contents for page 14
  954 +62 0 obj
  955 +<<
  956 + /Length 63 0 R
  957 +>>
  958 +stream
  959 +BT
  960 + /F1 24 Tf
  961 + 72 720 Td
  962 + (Potato 13) Tj
  963 +ET
  964 +endstream
  965 +endobj
  966 +
  967 +63 0 obj
  968 +47
  969 +endobj
  970 +
  971 +%% Contents for page 15
  972 +64 0 obj
  973 +<<
  974 + /Length 65 0 R
  975 +>>
  976 +stream
  977 +BT
  978 + /F1 24 Tf
  979 + 72 720 Td
  980 + (Potato 14) Tj
  981 +ET
  982 +endstream
  983 +endobj
  984 +
  985 +65 0 obj
  986 +47
  987 +endobj
  988 +
  989 +%% Contents for page 16
  990 +66 0 obj
  991 +<<
  992 + /Length 67 0 R
  993 +>>
  994 +stream
  995 +BT
  996 + /F1 24 Tf
  997 + 72 720 Td
  998 + (Potato 15) Tj
  999 +ET
  1000 +endstream
  1001 +endobj
  1002 +
  1003 +67 0 obj
  1004 +47
  1005 +endobj
  1006 +
  1007 +%% Contents for page 17
  1008 +68 0 obj
  1009 +<<
  1010 + /Length 69 0 R
  1011 +>>
  1012 +stream
  1013 +BT
  1014 + /F1 24 Tf
  1015 + 72 720 Td
  1016 + (Potato 16) Tj
  1017 +ET
  1018 +endstream
  1019 +endobj
  1020 +
  1021 +69 0 obj
  1022 +47
  1023 +endobj
  1024 +
  1025 +%% Contents for page 18
  1026 +70 0 obj
  1027 +<<
  1028 + /Length 71 0 R
  1029 +>>
  1030 +stream
  1031 +BT
  1032 + /F1 24 Tf
  1033 + 72 720 Td
  1034 + (Potato 17) Tj
  1035 +ET
  1036 +endstream
  1037 +endobj
  1038 +
  1039 +71 0 obj
  1040 +47
  1041 +endobj
  1042 +
  1043 +%% Contents for page 19
  1044 +72 0 obj
  1045 +<<
  1046 + /Length 73 0 R
  1047 +>>
  1048 +stream
  1049 +BT
  1050 + /F1 24 Tf
  1051 + 72 720 Td
  1052 + (Potato 18) Tj
  1053 +ET
  1054 +endstream
  1055 +endobj
  1056 +
  1057 +73 0 obj
  1058 +47
  1059 +endobj
  1060 +
  1061 +%% Contents for page 20
  1062 +74 0 obj
  1063 +<<
  1064 + /Length 75 0 R
  1065 +>>
  1066 +stream
  1067 +BT
  1068 + /F1 24 Tf
  1069 + 72 720 Td
  1070 + (Potato 19) Tj
  1071 +ET
  1072 +endstream
  1073 +endobj
  1074 +
  1075 +75 0 obj
  1076 +47
  1077 +endobj
  1078 +
  1079 +%% Contents for page 21
  1080 +76 0 obj
  1081 +<<
  1082 + /Length 77 0 R
  1083 +>>
  1084 +stream
  1085 +BT
  1086 + /F1 24 Tf
  1087 + 72 720 Td
  1088 + (Potato 20) Tj
  1089 +ET
  1090 +endstream
  1091 +endobj
  1092 +
  1093 +77 0 obj
  1094 +47
  1095 +endobj
  1096 +
  1097 +%% Contents for page 22
  1098 +78 0 obj
  1099 +<<
  1100 + /Length 79 0 R
  1101 +>>
  1102 +stream
  1103 +BT
  1104 + /F1 24 Tf
  1105 + 72 720 Td
  1106 + (Potato 21) Tj
  1107 +ET
  1108 +endstream
  1109 +endobj
  1110 +
  1111 +79 0 obj
  1112 +47
  1113 +endobj
  1114 +
  1115 +%% Contents for page 23
  1116 +80 0 obj
  1117 +<<
  1118 + /Length 81 0 R
  1119 +>>
  1120 +stream
  1121 +BT
  1122 + /F1 24 Tf
  1123 + 72 720 Td
  1124 + (Potato 22) Tj
  1125 +ET
  1126 +endstream
  1127 +endobj
  1128 +
  1129 +81 0 obj
  1130 +47
  1131 +endobj
  1132 +
  1133 +%% Contents for page 24
  1134 +82 0 obj
  1135 +<<
  1136 + /Length 83 0 R
  1137 +>>
  1138 +stream
  1139 +BT
  1140 + /F1 24 Tf
  1141 + 72 720 Td
  1142 + (Potato 23) Tj
  1143 +ET
  1144 +endstream
  1145 +endobj
  1146 +
  1147 +83 0 obj
  1148 +47
  1149 +endobj
  1150 +
  1151 +%% Contents for page 25
  1152 +84 0 obj
  1153 +<<
  1154 + /Length 85 0 R
  1155 +>>
  1156 +stream
  1157 +BT
  1158 + /F1 24 Tf
  1159 + 72 720 Td
  1160 + (Potato 24) Tj
  1161 +ET
  1162 +endstream
  1163 +endobj
  1164 +
  1165 +85 0 obj
  1166 +47
  1167 +endobj
  1168 +
  1169 +%% Contents for page 26
  1170 +86 0 obj
  1171 +<<
  1172 + /Length 87 0 R
  1173 +>>
  1174 +stream
  1175 +BT
  1176 + /F1 24 Tf
  1177 + 72 720 Td
  1178 + (Potato 25) Tj
  1179 +ET
  1180 +endstream
  1181 +endobj
  1182 +
  1183 +87 0 obj
  1184 +47
  1185 +endobj
  1186 +
  1187 +%% Contents for page 27
  1188 +88 0 obj
  1189 +<<
  1190 + /Length 89 0 R
  1191 +>>
  1192 +stream
  1193 +BT
  1194 + /F1 24 Tf
  1195 + 72 720 Td
  1196 + (Potato 26) Tj
  1197 +ET
  1198 +endstream
  1199 +endobj
  1200 +
  1201 +89 0 obj
  1202 +47
  1203 +endobj
  1204 +
  1205 +%% Contents for page 28
  1206 +90 0 obj
  1207 +<<
  1208 + /Length 91 0 R
  1209 +>>
  1210 +stream
  1211 +BT
  1212 + /F1 24 Tf
  1213 + 72 720 Td
  1214 + (Potato 27) Tj
  1215 +ET
  1216 +endstream
  1217 +endobj
  1218 +
  1219 +91 0 obj
  1220 +47
  1221 +endobj
  1222 +
  1223 +%% Contents for page 29
  1224 +92 0 obj
  1225 +<<
  1226 + /Length 93 0 R
  1227 +>>
  1228 +stream
  1229 +BT
  1230 + /F1 24 Tf
  1231 + 72 720 Td
  1232 + (Potato 28) Tj
  1233 +ET
  1234 +endstream
  1235 +endobj
  1236 +
  1237 +93 0 obj
  1238 +47
  1239 +endobj
  1240 +
  1241 +%% Contents for page 30
  1242 +94 0 obj
  1243 +<<
  1244 + /Length 95 0 R
  1245 +>>
  1246 +stream
  1247 +BT
  1248 + /F1 24 Tf
  1249 + 72 720 Td
  1250 + (Potato 29) Tj
  1251 +ET
  1252 +endstream
  1253 +endobj
  1254 +
  1255 +95 0 obj
  1256 +47
  1257 +endobj
  1258 +
  1259 +xref
  1260 +0 96
  1261 +0000000000 65535 f
  1262 +0000000025 00000 n
  1263 +0000000099 00000 n
  1264 +0000000457 00000 n
  1265 +0000000854 00000 n
  1266 +0000001059 00000 n
  1267 +0000001264 00000 n
  1268 +0000001469 00000 n
  1269 +0000001674 00000 n
  1270 +0000001879 00000 n
  1271 +0000002084 00000 n
  1272 +0000002290 00000 n
  1273 +0000002496 00000 n
  1274 +0000002703 00000 n
  1275 +0000002910 00000 n
  1276 +0000003117 00000 n
  1277 +0000003324 00000 n
  1278 +0000003531 00000 n
  1279 +0000003738 00000 n
  1280 +0000003945 00000 n
  1281 +0000004152 00000 n
  1282 +0000004359 00000 n
  1283 +0000004566 00000 n
  1284 +0000004773 00000 n
  1285 +0000004980 00000 n
  1286 +0000005187 00000 n
  1287 +0000005394 00000 n
  1288 +0000005601 00000 n
  1289 +0000005808 00000 n
  1290 +0000006015 00000 n
  1291 +0000006222 00000 n
  1292 +0000006429 00000 n
  1293 +0000006636 00000 n
  1294 +0000006843 00000 n
  1295 +0000007062 00000 n
  1296 +0000007165 00000 n
  1297 +0000007185 00000 n
  1298 +0000007304 00000 n
  1299 +0000007363 00000 n
  1300 +0000007466 00000 n
  1301 +0000007509 00000 n
  1302 +0000007612 00000 n
  1303 +0000007655 00000 n
  1304 +0000007758 00000 n
  1305 +0000007801 00000 n
  1306 +0000007904 00000 n
  1307 +0000007947 00000 n
  1308 +0000008050 00000 n
  1309 +0000008093 00000 n
  1310 +0000008196 00000 n
  1311 +0000008239 00000 n
  1312 +0000008342 00000 n
  1313 +0000008385 00000 n
  1314 +0000008488 00000 n
  1315 +0000008532 00000 n
  1316 +0000008635 00000 n
  1317 +0000008679 00000 n
  1318 +0000008783 00000 n
  1319 +0000008827 00000 n
  1320 +0000008931 00000 n
  1321 +0000008975 00000 n
  1322 +0000009079 00000 n
  1323 +0000009123 00000 n
  1324 +0000009227 00000 n
  1325 +0000009271 00000 n
  1326 +0000009375 00000 n
  1327 +0000009419 00000 n
  1328 +0000009523 00000 n
  1329 +0000009567 00000 n
  1330 +0000009671 00000 n
  1331 +0000009715 00000 n
  1332 +0000009819 00000 n
  1333 +0000009863 00000 n
  1334 +0000009967 00000 n
  1335 +0000010011 00000 n
  1336 +0000010115 00000 n
  1337 +0000010159 00000 n
  1338 +0000010263 00000 n
  1339 +0000010307 00000 n
  1340 +0000010411 00000 n
  1341 +0000010455 00000 n
  1342 +0000010559 00000 n
  1343 +0000010603 00000 n
  1344 +0000010707 00000 n
  1345 +0000010751 00000 n
  1346 +0000010855 00000 n
  1347 +0000010899 00000 n
  1348 +0000011003 00000 n
  1349 +0000011047 00000 n
  1350 +0000011151 00000 n
  1351 +0000011195 00000 n
  1352 +0000011299 00000 n
  1353 +0000011343 00000 n
  1354 +0000011447 00000 n
  1355 +0000011491 00000 n
  1356 +0000011595 00000 n
  1357 +trailer <<
  1358 + /Root 1 0 R
  1359 + /Size 96
  1360 + /ID [<90f919de7874f3bc5cb7afbd1e9537bb><55983ed25b1ed15804ad4831bad000da>]
  1361 +>>
  1362 +startxref
  1363 +11615
  1364 +%%EOF
... ...
qpdf/qtest/qpdf/page-labels-num-tree.out 0 → 100644
  1 +1 << /S /r /St 1 >>
  2 +3 << /P (blank) /St 1 >>
  3 +4 << /P (X-) /S /A /St 17 >>
  4 +6 << /P () /St 1 >>
  5 +7 << /S /R /St 3 >>
  6 +10 << /S /D /St 1 >>
  7 +12 << /S /a /St 1 >>
  8 +13 << /S /a /St 3 >>
  9 +16 << /P (q.) /S /D /St 6 >>
  10 +20 << /P (www) /St 1 >>
  11 +21 << /S /D /St 12 >>
  12 +23 << /S /D /St 16059 >>
  13 +24 << /S /R /St 50 >>
  14 +30 << /S /r /St 54 >>
  15 +test 47 done
... ...
qpdf/qtest/qpdf/page-labels-num-tree.pdf 0 → 100644
  1 +%PDF-1.3
  2 +%¿÷¢þ
  3 +%QDF-1.0
  4 +
  5 +1 0 obj
  6 +<<
  7 + /PageLabels 2 0 R
  8 + /Pages 3 0 R
  9 + /Type /Catalog
  10 +>>
  11 +endobj
  12 +
  13 +2 0 obj
  14 +<<
  15 + /Kids [
  16 + 4 0 R
  17 + 5 0 R
  18 + ]
  19 +>>
  20 +endobj
  21 +
  22 +3 0 obj
  23 +<<
  24 + /Count 30
  25 + /Kids [
  26 + 6 0 R
  27 + 7 0 R
  28 + 8 0 R
  29 + 9 0 R
  30 + 10 0 R
  31 + 11 0 R
  32 + 12 0 R
  33 + 13 0 R
  34 + 14 0 R
  35 + 15 0 R
  36 + 16 0 R
  37 + 17 0 R
  38 + 18 0 R
  39 + 19 0 R
  40 + 20 0 R
  41 + 21 0 R
  42 + 22 0 R
  43 + 23 0 R
  44 + 24 0 R
  45 + 25 0 R
  46 + 26 0 R
  47 + 27 0 R
  48 + 28 0 R
  49 + 29 0 R
  50 + 30 0 R
  51 + 31 0 R
  52 + 32 0 R
  53 + 33 0 R
  54 + 34 0 R
  55 + 35 0 R
  56 + ]
  57 + /Type /Pages
  58 +>>
  59 +endobj
  60 +
  61 +4 0 obj
  62 +<<
  63 + /Kids [
  64 + 36 0 R
  65 + 37 0 R
  66 + ]
  67 + /Limits [
  68 + 0
  69 + 19
  70 + ]
  71 +>>
  72 +endobj
  73 +
  74 +5 0 obj
  75 +<<
  76 + /Limits [
  77 + 20
  78 + 29
  79 + ]
  80 + /Nums [
  81 + 20 << /S /D /St 12 >>
  82 + 22 << /S /D /St 16059 >>
  83 + 23 << /S /R /St 50 >>
  84 + 29 << /S /r /St 54 >>
  85 + ]
  86 +>>
  87 +endobj
  88 +
  89 +%% Page 1
  90 +6 0 obj
  91 +<<
  92 + /Contents 38 0 R
  93 + /MediaBox [
  94 + 0
  95 + 0
  96 + 612
  97 + 792
  98 + ]
  99 + /Parent 3 0 R
  100 + /Resources <<
  101 + /Font <<
  102 + /F1 40 0 R
  103 + >>
  104 + /ProcSet 41 0 R
  105 + >>
  106 + /Type /Page
  107 +>>
  108 +endobj
  109 +
  110 +%% Page 2
  111 +7 0 obj
  112 +<<
  113 + /Contents 42 0 R
  114 + /MediaBox [
  115 + 0
  116 + 0
  117 + 612
  118 + 792
  119 + ]
  120 + /Parent 3 0 R
  121 + /Resources <<
  122 + /Font <<
  123 + /F1 40 0 R
  124 + >>
  125 + /ProcSet 41 0 R
  126 + >>
  127 + /Type /Page
  128 +>>
  129 +endobj
  130 +
  131 +%% Page 3
  132 +8 0 obj
  133 +<<
  134 + /Contents 44 0 R
  135 + /MediaBox [
  136 + 0
  137 + 0
  138 + 612
  139 + 792
  140 + ]
  141 + /Parent 3 0 R
  142 + /Resources <<
  143 + /Font <<
  144 + /F1 40 0 R
  145 + >>
  146 + /ProcSet 41 0 R
  147 + >>
  148 + /Type /Page
  149 +>>
  150 +endobj
  151 +
  152 +%% Page 4
  153 +9 0 obj
  154 +<<
  155 + /Contents 46 0 R
  156 + /MediaBox [
  157 + 0
  158 + 0
  159 + 612
  160 + 792
  161 + ]
  162 + /Parent 3 0 R
  163 + /Resources <<
  164 + /Font <<
  165 + /F1 40 0 R
  166 + >>
  167 + /ProcSet 41 0 R
  168 + >>
  169 + /Type /Page
  170 +>>
  171 +endobj
  172 +
  173 +%% Page 5
  174 +10 0 obj
  175 +<<
  176 + /Contents 48 0 R
  177 + /MediaBox [
  178 + 0
  179 + 0
  180 + 612
  181 + 792
  182 + ]
  183 + /Parent 3 0 R
  184 + /Resources <<
  185 + /Font <<
  186 + /F1 40 0 R
  187 + >>
  188 + /ProcSet 41 0 R
  189 + >>
  190 + /Type /Page
  191 +>>
  192 +endobj
  193 +
  194 +%% Page 6
  195 +11 0 obj
  196 +<<
  197 + /Contents 50 0 R
  198 + /MediaBox [
  199 + 0
  200 + 0
  201 + 612
  202 + 792
  203 + ]
  204 + /Parent 3 0 R
  205 + /Resources <<
  206 + /Font <<
  207 + /F1 40 0 R
  208 + >>
  209 + /ProcSet 41 0 R
  210 + >>
  211 + /Type /Page
  212 +>>
  213 +endobj
  214 +
  215 +%% Page 7
  216 +12 0 obj
  217 +<<
  218 + /Contents 52 0 R
  219 + /MediaBox [
  220 + 0
  221 + 0
  222 + 612
  223 + 792
  224 + ]
  225 + /Parent 3 0 R
  226 + /Resources <<
  227 + /Font <<
  228 + /F1 40 0 R
  229 + >>
  230 + /ProcSet 41 0 R
  231 + >>
  232 + /Type /Page
  233 +>>
  234 +endobj
  235 +
  236 +%% Page 8
  237 +13 0 obj
  238 +<<
  239 + /Contents 54 0 R
  240 + /MediaBox [
  241 + 0
  242 + 0
  243 + 612
  244 + 792
  245 + ]
  246 + /Parent 3 0 R
  247 + /Resources <<
  248 + /Font <<
  249 + /F1 40 0 R
  250 + >>
  251 + /ProcSet 41 0 R
  252 + >>
  253 + /Type /Page
  254 +>>
  255 +endobj
  256 +
  257 +%% Page 9
  258 +14 0 obj
  259 +<<
  260 + /Contents 56 0 R
  261 + /MediaBox [
  262 + 0
  263 + 0
  264 + 612
  265 + 792
  266 + ]
  267 + /Parent 3 0 R
  268 + /Resources <<
  269 + /Font <<
  270 + /F1 40 0 R
  271 + >>
  272 + /ProcSet 41 0 R
  273 + >>
  274 + /Type /Page
  275 +>>
  276 +endobj
  277 +
  278 +%% Page 10
  279 +15 0 obj
  280 +<<
  281 + /Contents 58 0 R
  282 + /MediaBox [
  283 + 0
  284 + 0
  285 + 612
  286 + 792
  287 + ]
  288 + /Parent 3 0 R
  289 + /Resources <<
  290 + /Font <<
  291 + /F1 40 0 R
  292 + >>
  293 + /ProcSet 41 0 R
  294 + >>
  295 + /Type /Page
  296 +>>
  297 +endobj
  298 +
  299 +%% Page 11
  300 +16 0 obj
  301 +<<
  302 + /Contents 60 0 R
  303 + /MediaBox [
  304 + 0
  305 + 0
  306 + 612
  307 + 792
  308 + ]
  309 + /Parent 3 0 R
  310 + /Resources <<
  311 + /Font <<
  312 + /F1 40 0 R
  313 + >>
  314 + /ProcSet 41 0 R
  315 + >>
  316 + /Type /Page
  317 +>>
  318 +endobj
  319 +
  320 +%% Page 12
  321 +17 0 obj
  322 +<<
  323 + /Contents 62 0 R
  324 + /MediaBox [
  325 + 0
  326 + 0
  327 + 612
  328 + 792
  329 + ]
  330 + /Parent 3 0 R
  331 + /Resources <<
  332 + /Font <<
  333 + /F1 40 0 R
  334 + >>
  335 + /ProcSet 41 0 R
  336 + >>
  337 + /Type /Page
  338 +>>
  339 +endobj
  340 +
  341 +%% Page 13
  342 +18 0 obj
  343 +<<
  344 + /Contents 64 0 R
  345 + /MediaBox [
  346 + 0
  347 + 0
  348 + 612
  349 + 792
  350 + ]
  351 + /Parent 3 0 R
  352 + /Resources <<
  353 + /Font <<
  354 + /F1 40 0 R
  355 + >>
  356 + /ProcSet 41 0 R
  357 + >>
  358 + /Type /Page
  359 +>>
  360 +endobj
  361 +
  362 +%% Page 14
  363 +19 0 obj
  364 +<<
  365 + /Contents 66 0 R
  366 + /MediaBox [
  367 + 0
  368 + 0
  369 + 612
  370 + 792
  371 + ]
  372 + /Parent 3 0 R
  373 + /Resources <<
  374 + /Font <<
  375 + /F1 40 0 R
  376 + >>
  377 + /ProcSet 41 0 R
  378 + >>
  379 + /Type /Page
  380 +>>
  381 +endobj
  382 +
  383 +%% Page 15
  384 +20 0 obj
  385 +<<
  386 + /Contents 68 0 R
  387 + /MediaBox [
  388 + 0
  389 + 0
  390 + 612
  391 + 792
  392 + ]
  393 + /Parent 3 0 R
  394 + /Resources <<
  395 + /Font <<
  396 + /F1 40 0 R
  397 + >>
  398 + /ProcSet 41 0 R
  399 + >>
  400 + /Type /Page
  401 +>>
  402 +endobj
  403 +
  404 +%% Page 16
  405 +21 0 obj
  406 +<<
  407 + /Contents 70 0 R
  408 + /MediaBox [
  409 + 0
  410 + 0
  411 + 612
  412 + 792
  413 + ]
  414 + /Parent 3 0 R
  415 + /Resources <<
  416 + /Font <<
  417 + /F1 40 0 R
  418 + >>
  419 + /ProcSet 41 0 R
  420 + >>
  421 + /Type /Page
  422 +>>
  423 +endobj
  424 +
  425 +%% Page 17
  426 +22 0 obj
  427 +<<
  428 + /Contents 72 0 R
  429 + /MediaBox [
  430 + 0
  431 + 0
  432 + 612
  433 + 792
  434 + ]
  435 + /Parent 3 0 R
  436 + /Resources <<
  437 + /Font <<
  438 + /F1 40 0 R
  439 + >>
  440 + /ProcSet 41 0 R
  441 + >>
  442 + /Type /Page
  443 +>>
  444 +endobj
  445 +
  446 +%% Page 18
  447 +23 0 obj
  448 +<<
  449 + /Contents 74 0 R
  450 + /MediaBox [
  451 + 0
  452 + 0
  453 + 612
  454 + 792
  455 + ]
  456 + /Parent 3 0 R
  457 + /Resources <<
  458 + /Font <<
  459 + /F1 40 0 R
  460 + >>
  461 + /ProcSet 41 0 R
  462 + >>
  463 + /Type /Page
  464 +>>
  465 +endobj
  466 +
  467 +%% Page 19
  468 +24 0 obj
  469 +<<
  470 + /Contents 76 0 R
  471 + /MediaBox [
  472 + 0
  473 + 0
  474 + 612
  475 + 792
  476 + ]
  477 + /Parent 3 0 R
  478 + /Resources <<
  479 + /Font <<
  480 + /F1 40 0 R
  481 + >>
  482 + /ProcSet 41 0 R
  483 + >>
  484 + /Type /Page
  485 +>>
  486 +endobj
  487 +
  488 +%% Page 20
  489 +25 0 obj
  490 +<<
  491 + /Contents 78 0 R
  492 + /MediaBox [
  493 + 0
  494 + 0
  495 + 612
  496 + 792
  497 + ]
  498 + /Parent 3 0 R
  499 + /Resources <<
  500 + /Font <<
  501 + /F1 40 0 R
  502 + >>
  503 + /ProcSet 41 0 R
  504 + >>
  505 + /Type /Page
  506 +>>
  507 +endobj
  508 +
  509 +%% Page 21
  510 +26 0 obj
  511 +<<
  512 + /Contents 80 0 R
  513 + /MediaBox [
  514 + 0
  515 + 0
  516 + 612
  517 + 792
  518 + ]
  519 + /Parent 3 0 R
  520 + /Resources <<
  521 + /Font <<
  522 + /F1 40 0 R
  523 + >>
  524 + /ProcSet 41 0 R
  525 + >>
  526 + /Type /Page
  527 +>>
  528 +endobj
  529 +
  530 +%% Page 22
  531 +27 0 obj
  532 +<<
  533 + /Contents 82 0 R
  534 + /MediaBox [
  535 + 0
  536 + 0
  537 + 612
  538 + 792
  539 + ]
  540 + /Parent 3 0 R
  541 + /Resources <<
  542 + /Font <<
  543 + /F1 40 0 R
  544 + >>
  545 + /ProcSet 41 0 R
  546 + >>
  547 + /Type /Page
  548 +>>
  549 +endobj
  550 +
  551 +%% Page 23
  552 +28 0 obj
  553 +<<
  554 + /Contents 84 0 R
  555 + /MediaBox [
  556 + 0
  557 + 0
  558 + 612
  559 + 792
  560 + ]
  561 + /Parent 3 0 R
  562 + /Resources <<
  563 + /Font <<
  564 + /F1 40 0 R
  565 + >>
  566 + /ProcSet 41 0 R
  567 + >>
  568 + /Type /Page
  569 +>>
  570 +endobj
  571 +
  572 +%% Page 24
  573 +29 0 obj
  574 +<<
  575 + /Contents 86 0 R
  576 + /MediaBox [
  577 + 0
  578 + 0
  579 + 612
  580 + 792
  581 + ]
  582 + /Parent 3 0 R
  583 + /Resources <<
  584 + /Font <<
  585 + /F1 40 0 R
  586 + >>
  587 + /ProcSet 41 0 R
  588 + >>
  589 + /Type /Page
  590 +>>
  591 +endobj
  592 +
  593 +%% Page 25
  594 +30 0 obj
  595 +<<
  596 + /Contents 88 0 R
  597 + /MediaBox [
  598 + 0
  599 + 0
  600 + 612
  601 + 792
  602 + ]
  603 + /Parent 3 0 R
  604 + /Resources <<
  605 + /Font <<
  606 + /F1 40 0 R
  607 + >>
  608 + /ProcSet 41 0 R
  609 + >>
  610 + /Type /Page
  611 +>>
  612 +endobj
  613 +
  614 +%% Page 26
  615 +31 0 obj
  616 +<<
  617 + /Contents 90 0 R
  618 + /MediaBox [
  619 + 0
  620 + 0
  621 + 612
  622 + 792
  623 + ]
  624 + /Parent 3 0 R
  625 + /Resources <<
  626 + /Font <<
  627 + /F1 40 0 R
  628 + >>
  629 + /ProcSet 41 0 R
  630 + >>
  631 + /Type /Page
  632 +>>
  633 +endobj
  634 +
  635 +%% Page 27
  636 +32 0 obj
  637 +<<
  638 + /Contents 92 0 R
  639 + /MediaBox [
  640 + 0
  641 + 0
  642 + 612
  643 + 792
  644 + ]
  645 + /Parent 3 0 R
  646 + /Resources <<
  647 + /Font <<
  648 + /F1 40 0 R
  649 + >>
  650 + /ProcSet 41 0 R
  651 + >>
  652 + /Type /Page
  653 +>>
  654 +endobj
  655 +
  656 +%% Page 28
  657 +33 0 obj
  658 +<<
  659 + /Contents 94 0 R
  660 + /MediaBox [
  661 + 0
  662 + 0
  663 + 612
  664 + 792
  665 + ]
  666 + /Parent 3 0 R
  667 + /Resources <<
  668 + /Font <<
  669 + /F1 40 0 R
  670 + >>
  671 + /ProcSet 41 0 R
  672 + >>
  673 + /Type /Page
  674 +>>
  675 +endobj
  676 +
  677 +%% Page 29
  678 +34 0 obj
  679 +<<
  680 + /Contents 96 0 R
  681 + /MediaBox [
  682 + 0
  683 + 0
  684 + 612
  685 + 792
  686 + ]
  687 + /Parent 3 0 R
  688 + /Resources <<
  689 + /Font <<
  690 + /F1 40 0 R
  691 + >>
  692 + /ProcSet 41 0 R
  693 + >>
  694 + /Type /Page
  695 +>>
  696 +endobj
  697 +
  698 +%% Page 30
  699 +35 0 obj
  700 +<<
  701 + /Contents 98 0 R
  702 + /MediaBox [
  703 + 0
  704 + 0
  705 + 612
  706 + 792
  707 + ]
  708 + /Parent 3 0 R
  709 + /Resources <<
  710 + /Font <<
  711 + /F1 40 0 R
  712 + >>
  713 + /ProcSet 41 0 R
  714 + >>
  715 + /Type /Page
  716 +>>
  717 +endobj
  718 +
  719 +36 0 obj
  720 +<<
  721 + /Limits [
  722 + 0
  723 + 9
  724 + ]
  725 + /Nums [
  726 + 0 << /S /r >>
  727 + 2 << /P (blank) >>
  728 + 3 << /P (X-) /S /A /St 17 >>
  729 + 5 << /P () >>
  730 + 6 << /S /R /St 3 >>
  731 + 9 << /S /D >>
  732 + ]
  733 +>>
  734 +endobj
  735 +
  736 +37 0 obj
  737 +<<
  738 + /Limits [
  739 + 11
  740 + 19
  741 + ]
  742 + /Nums [
  743 + 11 << /S /a >>
  744 + 12 << /S /a /St 3 >>
  745 + 15 << /P (q.) /S /D /St 6 >>
  746 + 19 << /P (www) >>
  747 + ]
  748 +>>
  749 +endobj
  750 +
  751 +%% Contents for page 1
  752 +38 0 obj
  753 +<<
  754 + /Length 39 0 R
  755 +>>
  756 +stream
  757 +BT
  758 + /F1 24 Tf
  759 + 72 720 Td
  760 + (Potato 0) Tj
  761 +ET
  762 +endstream
  763 +endobj
  764 +
  765 +39 0 obj
  766 +46
  767 +endobj
  768 +
  769 +40 0 obj
  770 +<<
  771 + /BaseFont /Helvetica
  772 + /Encoding /WinAnsiEncoding
  773 + /Name /F1
  774 + /Subtype /Type1
  775 + /Type /Font
  776 +>>
  777 +endobj
  778 +
  779 +41 0 obj
  780 +[
  781 + /PDF
  782 + /Text
  783 +]
  784 +endobj
  785 +
  786 +%% Contents for page 2
  787 +42 0 obj
  788 +<<
  789 + /Length 43 0 R
  790 +>>
  791 +stream
  792 +BT
  793 + /F1 24 Tf
  794 + 72 720 Td
  795 + (Potato 1) Tj
  796 +ET
  797 +endstream
  798 +endobj
  799 +
  800 +43 0 obj
  801 +46
  802 +endobj
  803 +
  804 +%% Contents for page 3
  805 +44 0 obj
  806 +<<
  807 + /Length 45 0 R
  808 +>>
  809 +stream
  810 +BT
  811 + /F1 24 Tf
  812 + 72 720 Td
  813 + (Potato 2) Tj
  814 +ET
  815 +endstream
  816 +endobj
  817 +
  818 +45 0 obj
  819 +46
  820 +endobj
  821 +
  822 +%% Contents for page 4
  823 +46 0 obj
  824 +<<
  825 + /Length 47 0 R
  826 +>>
  827 +stream
  828 +BT
  829 + /F1 24 Tf
  830 + 72 720 Td
  831 + (Potato 3) Tj
  832 +ET
  833 +endstream
  834 +endobj
  835 +
  836 +47 0 obj
  837 +46
  838 +endobj
  839 +
  840 +%% Contents for page 5
  841 +48 0 obj
  842 +<<
  843 + /Length 49 0 R
  844 +>>
  845 +stream
  846 +BT
  847 + /F1 24 Tf
  848 + 72 720 Td
  849 + (Potato 4) Tj
  850 +ET
  851 +endstream
  852 +endobj
  853 +
  854 +49 0 obj
  855 +46
  856 +endobj
  857 +
  858 +%% Contents for page 6
  859 +50 0 obj
  860 +<<
  861 + /Length 51 0 R
  862 +>>
  863 +stream
  864 +BT
  865 + /F1 24 Tf
  866 + 72 720 Td
  867 + (Potato 5) Tj
  868 +ET
  869 +endstream
  870 +endobj
  871 +
  872 +51 0 obj
  873 +46
  874 +endobj
  875 +
  876 +%% Contents for page 7
  877 +52 0 obj
  878 +<<
  879 + /Length 53 0 R
  880 +>>
  881 +stream
  882 +BT
  883 + /F1 24 Tf
  884 + 72 720 Td
  885 + (Potato 6) Tj
  886 +ET
  887 +endstream
  888 +endobj
  889 +
  890 +53 0 obj
  891 +46
  892 +endobj
  893 +
  894 +%% Contents for page 8
  895 +54 0 obj
  896 +<<
  897 + /Length 55 0 R
  898 +>>
  899 +stream
  900 +BT
  901 + /F1 24 Tf
  902 + 72 720 Td
  903 + (Potato 7) Tj
  904 +ET
  905 +endstream
  906 +endobj
  907 +
  908 +55 0 obj
  909 +46
  910 +endobj
  911 +
  912 +%% Contents for page 9
  913 +56 0 obj
  914 +<<
  915 + /Length 57 0 R
  916 +>>
  917 +stream
  918 +BT
  919 + /F1 24 Tf
  920 + 72 720 Td
  921 + (Potato 8) Tj
  922 +ET
  923 +endstream
  924 +endobj
  925 +
  926 +57 0 obj
  927 +46
  928 +endobj
  929 +
  930 +%% Contents for page 10
  931 +58 0 obj
  932 +<<
  933 + /Length 59 0 R
  934 +>>
  935 +stream
  936 +BT
  937 + /F1 24 Tf
  938 + 72 720 Td
  939 + (Potato 9) Tj
  940 +ET
  941 +endstream
  942 +endobj
  943 +
  944 +59 0 obj
  945 +46
  946 +endobj
  947 +
  948 +%% Contents for page 11
  949 +60 0 obj
  950 +<<
  951 + /Length 61 0 R
  952 +>>
  953 +stream
  954 +BT
  955 + /F1 24 Tf
  956 + 72 720 Td
  957 + (Potato 10) Tj
  958 +ET
  959 +endstream
  960 +endobj
  961 +
  962 +61 0 obj
  963 +47
  964 +endobj
  965 +
  966 +%% Contents for page 12
  967 +62 0 obj
  968 +<<
  969 + /Length 63 0 R
  970 +>>
  971 +stream
  972 +BT
  973 + /F1 24 Tf
  974 + 72 720 Td
  975 + (Potato 11) Tj
  976 +ET
  977 +endstream
  978 +endobj
  979 +
  980 +63 0 obj
  981 +47
  982 +endobj
  983 +
  984 +%% Contents for page 13
  985 +64 0 obj
  986 +<<
  987 + /Length 65 0 R
  988 +>>
  989 +stream
  990 +BT
  991 + /F1 24 Tf
  992 + 72 720 Td
  993 + (Potato 12) Tj
  994 +ET
  995 +endstream
  996 +endobj
  997 +
  998 +65 0 obj
  999 +47
  1000 +endobj
  1001 +
  1002 +%% Contents for page 14
  1003 +66 0 obj
  1004 +<<
  1005 + /Length 67 0 R
  1006 +>>
  1007 +stream
  1008 +BT
  1009 + /F1 24 Tf
  1010 + 72 720 Td
  1011 + (Potato 13) Tj
  1012 +ET
  1013 +endstream
  1014 +endobj
  1015 +
  1016 +67 0 obj
  1017 +47
  1018 +endobj
  1019 +
  1020 +%% Contents for page 15
  1021 +68 0 obj
  1022 +<<
  1023 + /Length 69 0 R
  1024 +>>
  1025 +stream
  1026 +BT
  1027 + /F1 24 Tf
  1028 + 72 720 Td
  1029 + (Potato 14) Tj
  1030 +ET
  1031 +endstream
  1032 +endobj
  1033 +
  1034 +69 0 obj
  1035 +47
  1036 +endobj
  1037 +
  1038 +%% Contents for page 16
  1039 +70 0 obj
  1040 +<<
  1041 + /Length 71 0 R
  1042 +>>
  1043 +stream
  1044 +BT
  1045 + /F1 24 Tf
  1046 + 72 720 Td
  1047 + (Potato 15) Tj
  1048 +ET
  1049 +endstream
  1050 +endobj
  1051 +
  1052 +71 0 obj
  1053 +47
  1054 +endobj
  1055 +
  1056 +%% Contents for page 17
  1057 +72 0 obj
  1058 +<<
  1059 + /Length 73 0 R
  1060 +>>
  1061 +stream
  1062 +BT
  1063 + /F1 24 Tf
  1064 + 72 720 Td
  1065 + (Potato 16) Tj
  1066 +ET
  1067 +endstream
  1068 +endobj
  1069 +
  1070 +73 0 obj
  1071 +47
  1072 +endobj
  1073 +
  1074 +%% Contents for page 18
  1075 +74 0 obj
  1076 +<<
  1077 + /Length 75 0 R
  1078 +>>
  1079 +stream
  1080 +BT
  1081 + /F1 24 Tf
  1082 + 72 720 Td
  1083 + (Potato 17) Tj
  1084 +ET
  1085 +endstream
  1086 +endobj
  1087 +
  1088 +75 0 obj
  1089 +47
  1090 +endobj
  1091 +
  1092 +%% Contents for page 19
  1093 +76 0 obj
  1094 +<<
  1095 + /Length 77 0 R
  1096 +>>
  1097 +stream
  1098 +BT
  1099 + /F1 24 Tf
  1100 + 72 720 Td
  1101 + (Potato 18) Tj
  1102 +ET
  1103 +endstream
  1104 +endobj
  1105 +
  1106 +77 0 obj
  1107 +47
  1108 +endobj
  1109 +
  1110 +%% Contents for page 20
  1111 +78 0 obj
  1112 +<<
  1113 + /Length 79 0 R
  1114 +>>
  1115 +stream
  1116 +BT
  1117 + /F1 24 Tf
  1118 + 72 720 Td
  1119 + (Potato 19) Tj
  1120 +ET
  1121 +endstream
  1122 +endobj
  1123 +
  1124 +79 0 obj
  1125 +47
  1126 +endobj
  1127 +
  1128 +%% Contents for page 21
  1129 +80 0 obj
  1130 +<<
  1131 + /Length 81 0 R
  1132 +>>
  1133 +stream
  1134 +BT
  1135 + /F1 24 Tf
  1136 + 72 720 Td
  1137 + (Potato 20) Tj
  1138 +ET
  1139 +endstream
  1140 +endobj
  1141 +
  1142 +81 0 obj
  1143 +47
  1144 +endobj
  1145 +
  1146 +%% Contents for page 22
  1147 +82 0 obj
  1148 +<<
  1149 + /Length 83 0 R
  1150 +>>
  1151 +stream
  1152 +BT
  1153 + /F1 24 Tf
  1154 + 72 720 Td
  1155 + (Potato 21) Tj
  1156 +ET
  1157 +endstream
  1158 +endobj
  1159 +
  1160 +83 0 obj
  1161 +47
  1162 +endobj
  1163 +
  1164 +%% Contents for page 23
  1165 +84 0 obj
  1166 +<<
  1167 + /Length 85 0 R
  1168 +>>
  1169 +stream
  1170 +BT
  1171 + /F1 24 Tf
  1172 + 72 720 Td
  1173 + (Potato 22) Tj
  1174 +ET
  1175 +endstream
  1176 +endobj
  1177 +
  1178 +85 0 obj
  1179 +47
  1180 +endobj
  1181 +
  1182 +%% Contents for page 24
  1183 +86 0 obj
  1184 +<<
  1185 + /Length 87 0 R
  1186 +>>
  1187 +stream
  1188 +BT
  1189 + /F1 24 Tf
  1190 + 72 720 Td
  1191 + (Potato 23) Tj
  1192 +ET
  1193 +endstream
  1194 +endobj
  1195 +
  1196 +87 0 obj
  1197 +47
  1198 +endobj
  1199 +
  1200 +%% Contents for page 25
  1201 +88 0 obj
  1202 +<<
  1203 + /Length 89 0 R
  1204 +>>
  1205 +stream
  1206 +BT
  1207 + /F1 24 Tf
  1208 + 72 720 Td
  1209 + (Potato 24) Tj
  1210 +ET
  1211 +endstream
  1212 +endobj
  1213 +
  1214 +89 0 obj
  1215 +47
  1216 +endobj
  1217 +
  1218 +%% Contents for page 26
  1219 +90 0 obj
  1220 +<<
  1221 + /Length 91 0 R
  1222 +>>
  1223 +stream
  1224 +BT
  1225 + /F1 24 Tf
  1226 + 72 720 Td
  1227 + (Potato 25) Tj
  1228 +ET
  1229 +endstream
  1230 +endobj
  1231 +
  1232 +91 0 obj
  1233 +47
  1234 +endobj
  1235 +
  1236 +%% Contents for page 27
  1237 +92 0 obj
  1238 +<<
  1239 + /Length 93 0 R
  1240 +>>
  1241 +stream
  1242 +BT
  1243 + /F1 24 Tf
  1244 + 72 720 Td
  1245 + (Potato 26) Tj
  1246 +ET
  1247 +endstream
  1248 +endobj
  1249 +
  1250 +93 0 obj
  1251 +47
  1252 +endobj
  1253 +
  1254 +%% Contents for page 28
  1255 +94 0 obj
  1256 +<<
  1257 + /Length 95 0 R
  1258 +>>
  1259 +stream
  1260 +BT
  1261 + /F1 24 Tf
  1262 + 72 720 Td
  1263 + (Potato 27) Tj
  1264 +ET
  1265 +endstream
  1266 +endobj
  1267 +
  1268 +95 0 obj
  1269 +47
  1270 +endobj
  1271 +
  1272 +%% Contents for page 29
  1273 +96 0 obj
  1274 +<<
  1275 + /Length 97 0 R
  1276 +>>
  1277 +stream
  1278 +BT
  1279 + /F1 24 Tf
  1280 + 72 720 Td
  1281 + (Potato 28) Tj
  1282 +ET
  1283 +endstream
  1284 +endobj
  1285 +
  1286 +97 0 obj
  1287 +47
  1288 +endobj
  1289 +
  1290 +%% Contents for page 30
  1291 +98 0 obj
  1292 +<<
  1293 + /Length 99 0 R
  1294 +>>
  1295 +stream
  1296 +BT
  1297 + /F1 24 Tf
  1298 + 72 720 Td
  1299 + (Potato 29) Tj
  1300 +ET
  1301 +endstream
  1302 +endobj
  1303 +
  1304 +99 0 obj
  1305 +47
  1306 +endobj
  1307 +
  1308 +xref
  1309 +0 100
  1310 +0000000000 65535 f
  1311 +0000000025 00000 n
  1312 +0000000099 00000 n
  1313 +0000000155 00000 n
  1314 +0000000544 00000 n
  1315 +0000000631 00000 n
  1316 +0000000814 00000 n
  1317 +0000001019 00000 n
  1318 +0000001224 00000 n
  1319 +0000001429 00000 n
  1320 +0000001634 00000 n
  1321 +0000001840 00000 n
  1322 +0000002046 00000 n
  1323 +0000002252 00000 n
  1324 +0000002458 00000 n
  1325 +0000002665 00000 n
  1326 +0000002872 00000 n
  1327 +0000003079 00000 n
  1328 +0000003286 00000 n
  1329 +0000003493 00000 n
  1330 +0000003700 00000 n
  1331 +0000003907 00000 n
  1332 +0000004114 00000 n
  1333 +0000004321 00000 n
  1334 +0000004528 00000 n
  1335 +0000004735 00000 n
  1336 +0000004942 00000 n
  1337 +0000005149 00000 n
  1338 +0000005356 00000 n
  1339 +0000005563 00000 n
  1340 +0000005770 00000 n
  1341 +0000005977 00000 n
  1342 +0000006184 00000 n
  1343 +0000006391 00000 n
  1344 +0000006598 00000 n
  1345 +0000006805 00000 n
  1346 +0000007001 00000 n
  1347 +0000007200 00000 n
  1348 +0000007389 00000 n
  1349 +0000007492 00000 n
  1350 +0000007512 00000 n
  1351 +0000007631 00000 n
  1352 +0000007690 00000 n
  1353 +0000007793 00000 n
  1354 +0000007836 00000 n
  1355 +0000007939 00000 n
  1356 +0000007982 00000 n
  1357 +0000008085 00000 n
  1358 +0000008128 00000 n
  1359 +0000008231 00000 n
  1360 +0000008274 00000 n
  1361 +0000008377 00000 n
  1362 +0000008420 00000 n
  1363 +0000008523 00000 n
  1364 +0000008566 00000 n
  1365 +0000008669 00000 n
  1366 +0000008712 00000 n
  1367 +0000008815 00000 n
  1368 +0000008859 00000 n
  1369 +0000008962 00000 n
  1370 +0000009006 00000 n
  1371 +0000009110 00000 n
  1372 +0000009154 00000 n
  1373 +0000009258 00000 n
  1374 +0000009302 00000 n
  1375 +0000009406 00000 n
  1376 +0000009450 00000 n
  1377 +0000009554 00000 n
  1378 +0000009598 00000 n
  1379 +0000009702 00000 n
  1380 +0000009746 00000 n
  1381 +0000009850 00000 n
  1382 +0000009894 00000 n
  1383 +0000009998 00000 n
  1384 +0000010042 00000 n
  1385 +0000010146 00000 n
  1386 +0000010190 00000 n
  1387 +0000010294 00000 n
  1388 +0000010338 00000 n
  1389 +0000010442 00000 n
  1390 +0000010486 00000 n
  1391 +0000010590 00000 n
  1392 +0000010634 00000 n
  1393 +0000010738 00000 n
  1394 +0000010782 00000 n
  1395 +0000010886 00000 n
  1396 +0000010930 00000 n
  1397 +0000011034 00000 n
  1398 +0000011078 00000 n
  1399 +0000011182 00000 n
  1400 +0000011226 00000 n
  1401 +0000011330 00000 n
  1402 +0000011374 00000 n
  1403 +0000011478 00000 n
  1404 +0000011522 00000 n
  1405 +0000011626 00000 n
  1406 +0000011670 00000 n
  1407 +0000011774 00000 n
  1408 +0000011818 00000 n
  1409 +0000011922 00000 n
  1410 +trailer <<
  1411 + /Root 1 0 R
  1412 + /Size 100
  1413 + /ID [<90f919de7874f3bc5cb7afbd1e9537bb><0dfe18a94cde0f4bfdc86c03af19010e>]
  1414 +>>
  1415 +startxref
  1416 +11942
  1417 +%%EOF
... ...
qpdf/test_driver.cc
... ... @@ -7,6 +7,7 @@
7 7 #include <qpdf/QPDFPageObjectHelper.hh>
8 8 #include <qpdf/QPDFAcroFormDocumentHelper.hh>
9 9 #include <qpdf/QPDFNumberTreeObjectHelper.hh>
  10 +#include <qpdf/QPDFPageLabelDocumentHelper.hh>
10 11 #include <qpdf/QUtil.hh>
11 12 #include <qpdf/QTC.hh>
12 13 #include <qpdf/Pl_StdioFile.hh>
... ... @@ -1690,6 +1691,21 @@ void runtest(int n, char const* filename1, char const* arg2)
1690 1691 assert("six" == oh.getStringValue());
1691 1692 assert(2 == offset);
1692 1693 }
  1694 + else if (n == 47)
  1695 + {
  1696 + // Test page labels.
  1697 + QPDFPageLabelDocumentHelper pldh(pdf);
  1698 + size_t npages = pdf.getRoot().getKey("/Pages").
  1699 + getKey("/Count").getIntValue();
  1700 + std::vector<QPDFObjectHandle> labels;
  1701 + pldh.getLabelsForPageRange(0, npages - 1, 1, labels);
  1702 + assert(labels.size() % 2 == 0);
  1703 + for (size_t i = 0; i < labels.size(); i+= 2)
  1704 + {
  1705 + std::cout << labels.at(i).getIntValue() << " "
  1706 + << labels.at(i+1).unparse() << std::endl;
  1707 + }
  1708 + }
1693 1709 else
1694 1710 {
1695 1711 throw std::runtime_error(std::string("invalid test ") +
... ...