Commit c9271335fa8eef118b7294076bd079698919f430

Authored by Jay Berkenbilt
1 parent 78c49824

Add QPDFPageObjectHelper::flattenRotation and --flatten-rotation

ChangeLog
  1 +2020-12-30 Jay Berkenbilt <ejb@ql.org>
  2 +
  3 + * Add QPDFPageObjectHelper::flattenRotation and --flatten-rotation
  4 + option to the qpdf CLI. The flattenRotation method removes any
  5 + /Rotate key from a page dictionary and implements the same
  6 + rotation by modifying the page's contents such that the various
  7 + page boxes are altered and the page renders identically. This can
  8 + be used to work around buggy PDF applications that don't properly
  9 + handle page rotation. The --flatten-rotation option to the qpdf
  10 + CLI calls flattenRotation for every page.
  11 +
1 2020-12-26 Jay Berkenbilt <ejb@ql.org> 12 2020-12-26 Jay Berkenbilt <ejb@ql.org>
2 13
3 * Add QPDFObjectHandle::setFilterOnWrite, which can be used to 14 * Add QPDFObjectHandle::setFilterOnWrite, which can be used to
@@ -39,10 +39,6 @@ Candidates for upcoming release @@ -39,10 +39,6 @@ Candidates for upcoming release
39 * big page even with --remove-unreferenced-resources=yes, even with --empty 39 * big page even with --remove-unreferenced-resources=yes, even with --empty
40 * optimize image failure because of colorspace 40 * optimize image failure because of colorspace
41 41
42 -* Take flattenRotation code from pdf-split and do something with it,  
43 - maybe adding it to the library. Once there, call it from pdf-split  
44 - and bump up the required version of qpdf.  
45 -  
46 * Externalize inline images doesn't walk into form XObjects. In 42 * Externalize inline images doesn't walk into form XObjects. In
47 general: 43 general:
48 44
include/qpdf/QPDFPageObjectHelper.hh
@@ -242,6 +242,16 @@ class QPDFPageObjectHelper: public QPDFObjectHelper @@ -242,6 +242,16 @@ class QPDFPageObjectHelper: public QPDFObjectHelper
242 bool allow_shrink = true, 242 bool allow_shrink = true,
243 bool allow_expand = false); 243 bool allow_expand = false);
244 244
  245 + // If a page is rotated using /Rotate in the page's dictionary,
  246 + // instead rotate the page by the same amount by altering the
  247 + // contents and removing the /Rotate key. This method adjusts the
  248 + // various page bounding boxes (/MediaBox, etc.) so that the page
  249 + // will have the same semantics. This can be useful to work around
  250 + // problems with PDF applications that can't properly handle
  251 + // rotated pages.
  252 + QPDF_DLL
  253 + void flattenRotation();
  254 +
245 private: 255 private:
246 static void 256 static void
247 removeUnreferencedResourcesHelper( 257 removeUnreferencedResourcesHelper(
libqpdf/QPDFPageObjectHelper.cc
@@ -835,3 +835,135 @@ QPDFPageObjectHelper::placeFormXObject( @@ -835,3 +835,135 @@ QPDFPageObjectHelper::placeFormXObject(
835 name + " Do\n" + 835 name + " Do\n" +
836 "Q\n"); 836 "Q\n");
837 } 837 }
  838 +
  839 +void
  840 +QPDFPageObjectHelper::flattenRotation()
  841 +{
  842 + QPDF* qpdf = this->oh.getOwningQPDF();
  843 + if (! qpdf)
  844 + {
  845 + throw std::runtime_error(
  846 + "QPDFPageObjectHelper::flattenRotation"
  847 + " called with a direct object");
  848 + }
  849 +
  850 + auto rotate_oh = this->oh.getKey("/Rotate");
  851 + int rotate = 0;
  852 + if (rotate_oh.isInteger())
  853 + {
  854 + rotate = rotate_oh.getIntValueAsInt();
  855 + }
  856 + if (! ((rotate == 90) || (rotate == 180) || (rotate == 270)))
  857 + {
  858 + return;
  859 + }
  860 + auto mediabox = this->oh.getKey("/MediaBox");
  861 + if (! mediabox.isRectangle())
  862 + {
  863 + return;
  864 + }
  865 + auto media_rect = mediabox.getArrayAsRectangle();
  866 +
  867 + std::vector<std::string> boxes = {
  868 + "/MediaBox", "/CropBox", "/BleedBox", "/TrimBox", "/ArtBox",
  869 + };
  870 + for (auto const& boxkey: boxes)
  871 + {
  872 + auto box = this->oh.getKey(boxkey);
  873 + if (! box.isRectangle())
  874 + {
  875 + continue;
  876 + }
  877 + auto rect = box.getArrayAsRectangle();
  878 + decltype(rect) new_rect;
  879 +
  880 + // How far are the edges of our rectangle from the edges
  881 + // of the media box?
  882 + auto left_x = rect.llx - media_rect.llx;
  883 + auto right_x = media_rect.urx - rect.urx;
  884 + auto bottom_y = rect.lly - media_rect.lly;
  885 + auto top_y = media_rect.ury - rect.ury;
  886 +
  887 + // Rotating the page 180 degrees does not change
  888 + // /MediaBox. Rotating 90 or 270 degrees reverses llx and
  889 + // lly and also reverse urx and ury. For all the other
  890 + // boxes, we want the corners to be the correct distance
  891 + // away from the corners of the mediabox.
  892 + switch (rotate)
  893 + {
  894 + case 90:
  895 + new_rect.llx = media_rect.lly + bottom_y;
  896 + new_rect.urx = media_rect.ury - top_y;
  897 + new_rect.lly = media_rect.llx + right_x;
  898 + new_rect.ury = media_rect.urx - left_x;
  899 + break;
  900 +
  901 + case 180:
  902 + new_rect.llx = media_rect.llx + right_x;
  903 + new_rect.urx = media_rect.urx - left_x;
  904 + new_rect.lly = media_rect.lly + top_y;
  905 + new_rect.ury = media_rect.ury - bottom_y;
  906 + break;
  907 +
  908 + case 270:
  909 + new_rect.llx = media_rect.lly + top_y;
  910 + new_rect.urx = media_rect.ury - bottom_y;
  911 + new_rect.lly = media_rect.llx + left_x;
  912 + new_rect.ury = media_rect.urx - right_x;
  913 + break;
  914 +
  915 + default:
  916 + // ignore
  917 + break;
  918 + }
  919 +
  920 + this->oh.replaceKey(
  921 + boxkey, QPDFObjectHandle::newFromRectangle(new_rect));
  922 + }
  923 +
  924 + // When we rotate the page, pivot about the point 0, 0 and then
  925 + // translate so the page is visible with the origin point being
  926 + // the same offset from the lower left corner of the media box.
  927 + // These calculations have been verified emperically with various
  928 + // PDF readers.
  929 + QPDFObjectHandle::Matrix cm;
  930 + cm.e = 0.0;
  931 + cm.f = 0.0;
  932 + switch (rotate)
  933 + {
  934 + case 90:
  935 + cm.b = -1;
  936 + cm.c = 1;
  937 + cm.f = media_rect.urx + media_rect.llx;
  938 + break;
  939 +
  940 + case 180:
  941 + cm.a = -1;
  942 + cm.d = -1;
  943 + cm.e = media_rect.urx + media_rect.llx;
  944 + cm.f = media_rect.ury + media_rect.lly;
  945 + break;
  946 +
  947 + case 270:
  948 + cm.b = 1;
  949 + cm.c = -1;
  950 + cm.e = media_rect.ury + media_rect.lly;
  951 + break;
  952 +
  953 + default:
  954 + break;
  955 + }
  956 + std::string cm_str =
  957 + std::string("q\n") +
  958 + QUtil::double_to_string(cm.a, 2) + " " +
  959 + QUtil::double_to_string(cm.b, 2) + " " +
  960 + QUtil::double_to_string(cm.c, 2) + " " +
  961 + QUtil::double_to_string(cm.d, 2) + " " +
  962 + QUtil::double_to_string(cm.e, 2) + " " +
  963 + QUtil::double_to_string(cm.f, 2) + " cm\n";
  964 + this->oh.addPageContents(
  965 + QPDFObjectHandle::newStream(qpdf, cm_str), true);
  966 + this->oh.addPageContents(
  967 + QPDFObjectHandle::newStream(qpdf, "\nQ\n"), false);
  968 + this->oh.removeKey("/Rotate");
  969 +}
manual/qpdf-manual.xml
@@ -1063,6 +1063,19 @@ make @@ -1063,6 +1063,19 @@ make
1063 </listitem> 1063 </listitem>
1064 </varlistentry> 1064 </varlistentry>
1065 <varlistentry> 1065 <varlistentry>
  1066 + <term><option>--flatten-rotation</option></term>
  1067 + <listitem>
  1068 + <para>
  1069 + For each page that is rotated using the
  1070 + <literal>/Rotate</literal> key in the page's dictionary,
  1071 + remove the <literal>/Rotate</literal> key and implement the
  1072 + identical rotation semantics by modifying the page's contents.
  1073 + This option can be useful to prepare files for buggy PDF
  1074 + applications that don't properly handle rotated pages.
  1075 + </para>
  1076 + </listitem>
  1077 + </varlistentry>
  1078 + <varlistentry>
1066 <term><option>--split-pages=[n]</option></term> 1079 <term><option>--split-pages=[n]</option></term>
1067 <listitem> 1080 <listitem>
1068 <para> 1081 <para>
qpdf/qpdf.cc
@@ -174,6 +174,7 @@ struct Options @@ -174,6 +174,7 @@ struct Options
174 show_pages(false), 174 show_pages(false),
175 show_page_images(false), 175 show_page_images(false),
176 collate(false), 176 collate(false),
  177 + flatten_rotation(false),
177 json(false), 178 json(false),
178 check(false), 179 check(false),
179 optimize_images(false), 180 optimize_images(false),
@@ -276,6 +277,7 @@ struct Options @@ -276,6 +277,7 @@ struct Options
276 bool show_pages; 277 bool show_pages;
277 bool show_page_images; 278 bool show_page_images;
278 bool collate; 279 bool collate;
  280 + bool flatten_rotation;
279 bool json; 281 bool json;
280 std::set<std::string> json_keys; 282 std::set<std::string> json_keys;
281 std::set<std::string> json_objects; 283 std::set<std::string> json_objects;
@@ -747,6 +749,7 @@ class ArgParser @@ -747,6 +749,7 @@ class ArgParser
747 void argOverlay(); 749 void argOverlay();
748 void argRotate(char* parameter); 750 void argRotate(char* parameter);
749 void argCollate(); 751 void argCollate();
  752 + void argFlattenRotation();
750 void argStreamData(char* parameter); 753 void argStreamData(char* parameter);
751 void argCompressStreams(char* parameter); 754 void argCompressStreams(char* parameter);
752 void argRecompressFlate(); 755 void argRecompressFlate();
@@ -968,6 +971,7 @@ ArgParser::initOptionTable() @@ -968,6 +971,7 @@ ArgParser::initOptionTable()
968 char const* stream_data_choices[] = 971 char const* stream_data_choices[] =
969 {"compress", "preserve", "uncompress", 0}; 972 {"compress", "preserve", "uncompress", 0};
970 (*t)["collate"] = oe_bare(&ArgParser::argCollate); 973 (*t)["collate"] = oe_bare(&ArgParser::argCollate);
  974 + (*t)["flatten-rotation"] = oe_bare(&ArgParser::argFlattenRotation);
971 (*t)["stream-data"] = oe_requiredChoices( 975 (*t)["stream-data"] = oe_requiredChoices(
972 &ArgParser::argStreamData, stream_data_choices); 976 &ArgParser::argStreamData, stream_data_choices);
973 (*t)["compress-streams"] = oe_requiredChoices( 977 (*t)["compress-streams"] = oe_requiredChoices(
@@ -1250,6 +1254,7 @@ ArgParser::argHelp() @@ -1250,6 +1254,7 @@ ArgParser::argHelp()
1250 << "--pages options -- select specific pages from one or more files\n" 1254 << "--pages options -- select specific pages from one or more files\n"
1251 << "--collate causes files specified in --pages to be collated\n" 1255 << "--collate causes files specified in --pages to be collated\n"
1252 << " rather than concatenated\n" 1256 << " rather than concatenated\n"
  1257 + << "--flatten-rotation move page rotation from /Rotate key to content\n"
1253 << "--rotate=[+|-]angle[:page-range]\n" 1258 << "--rotate=[+|-]angle[:page-range]\n"
1254 << " rotate each specified page 90, 180, or 270 degrees;\n" 1259 << " rotate each specified page 90, 180, or 270 degrees;\n"
1255 << " rotate all pages if no page range is given\n" 1260 << " rotate all pages if no page range is given\n"
@@ -1880,6 +1885,12 @@ ArgParser::argRotate(char* parameter) @@ -1880,6 +1885,12 @@ ArgParser::argRotate(char* parameter)
1880 } 1885 }
1881 1886
1882 void 1887 void
  1888 +ArgParser::argFlattenRotation()
  1889 +{
  1890 + o.flatten_rotation = true;
  1891 +}
  1892 +
  1893 +void
1883 ArgParser::argStreamData(char* parameter) 1894 ArgParser::argStreamData(char* parameter)
1884 { 1895 {
1885 o.stream_data_set = true; 1896 o.stream_data_set = true;
@@ -4818,6 +4829,13 @@ static void handle_transformations(QPDF&amp; pdf, Options&amp; o) @@ -4818,6 +4829,13 @@ static void handle_transformations(QPDF&amp; pdf, Options&amp; o)
4818 (*iter).coalesceContentStreams(); 4829 (*iter).coalesceContentStreams();
4819 } 4830 }
4820 } 4831 }
  4832 + if (o.flatten_rotation)
  4833 + {
  4834 + for (auto& page: dh.getAllPages())
  4835 + {
  4836 + page.flattenRotation();
  4837 + }
  4838 + }
4821 if (o.remove_page_labels) 4839 if (o.remove_page_labels)
4822 { 4840 {
4823 pdf.getRoot().removeKey("/PageLabels"); 4841 pdf.getRoot().removeKey("/PageLabels");
qpdf/qtest/qpdf.test
@@ -671,7 +671,7 @@ foreach my $d (@json_files) @@ -671,7 +671,7 @@ foreach my $d (@json_files)
671 show_ntests(); 671 show_ntests();
672 # ---------- 672 # ----------
673 $td->notify("--- Page API Tests ---"); 673 $td->notify("--- Page API Tests ---");
674 -$n_tests += 9; 674 +$n_tests += 11;
675 675
676 $td->runtest("basic page API", 676 $td->runtest("basic page API",
677 {$td->COMMAND => "test_driver 15 page_api_1.pdf"}, 677 {$td->COMMAND => "test_driver 15 page_api_1.pdf"},
@@ -706,6 +706,15 @@ $td-&gt;runtest(&quot;remove page we don&#39;t have&quot;, @@ -706,6 +706,15 @@ $td-&gt;runtest(&quot;remove page we don&#39;t have&quot;,
706 {$td->COMMAND => "test_driver 22 page_api_1.pdf"}, 706 {$td->COMMAND => "test_driver 22 page_api_1.pdf"},
707 {$td->FILE => "page_api_1.out2", $td->EXIT_STATUS => 2}, 707 {$td->FILE => "page_api_1.out2", $td->EXIT_STATUS => 2},
708 $td->NORMALIZE_NEWLINES); 708 $td->NORMALIZE_NEWLINES);
  709 +$td->runtest("flatten rotation",
  710 + {$td->COMMAND => "qpdf --static-id --qdf".
  711 + " --no-original-object-ids" .
  712 + " --flatten-rotation boxes.pdf a.pdf"},
  713 + {$td->STRING => "", $td->EXIT_STATUS => 0},
  714 + $td->NORMALIZE_NEWLINES);
  715 +$td->runtest("check output",
  716 + {$td->FILE => "a.pdf"},
  717 + {$td->FILE => "boxes-flattened.pdf"});
709 show_ntests(); 718 show_ntests();
710 # ---------- 719 # ----------
711 $td->notify("--- Files for specific bugs ---"); 720 $td->notify("--- Files for specific bugs ---");
qpdf/qtest/qpdf/boxes-flattened.pdf 0 โ†’ 100644
  1 +%PDF-1.3
  2 +%ยฟรทยขรพ
  3 +%QDF-1.0
  4 +
  5 +1 0 obj
  6 +<<
  7 + /Pages 2 0 R
  8 + /Type /Catalog
  9 +>>
  10 +endobj
  11 +
  12 +2 0 obj
  13 +<<
  14 + /Count 8
  15 + /Kids [
  16 + 3 0 R
  17 + 4 0 R
  18 + 5 0 R
  19 + 6 0 R
  20 + 7 0 R
  21 + 8 0 R
  22 + 9 0 R
  23 + 10 0 R
  24 + ]
  25 + /Type /Pages
  26 +>>
  27 +endobj
  28 +
  29 +%% Page 1
  30 +3 0 obj
  31 +<<
  32 + /BleedBox [
  33 + 20
  34 + 40
  35 + 552
  36 + 712
  37 + ]
  38 + /Contents 11 0 R
  39 + /CropBox [
  40 + 10
  41 + 20
  42 + 582
  43 + 752
  44 + ]
  45 + /MediaBox [
  46 + 0
  47 + 0
  48 + 612
  49 + 792
  50 + ]
  51 + /Parent 2 0 R
  52 + /Resources <<
  53 + /Font <<
  54 + /F1 13 0 R
  55 + >>
  56 + /ProcSet 14 0 R
  57 + /XObject <<
  58 + /Fx1 15 0 R
  59 + >>
  60 + >>
  61 + /TrimBox [
  62 + 30
  63 + 60
  64 + 522
  65 + 672
  66 + ]
  67 + /Type /Page
  68 +>>
  69 +endobj
  70 +
  71 +%% Page 2
  72 +4 0 obj
  73 +<<
  74 + /BleedBox [
  75 + 40.000000
  76 + 60.000000
  77 + 712.000000
  78 + 592.000000
  79 + ]
  80 + /Contents [
  81 + 17 0 R
  82 + 19 0 R
  83 + 21 0 R
  84 + ]
  85 + /CropBox [
  86 + 20.000000
  87 + 30.000000
  88 + 752.000000
  89 + 602.000000
  90 + ]
  91 + /MediaBox [
  92 + 0.000000
  93 + 0.000000
  94 + 792.000000
  95 + 612.000000
  96 + ]
  97 + /Parent 2 0 R
  98 + /Resources <<
  99 + /Font <<
  100 + /F1 13 0 R
  101 + >>
  102 + /ProcSet 14 0 R
  103 + /XObject <<
  104 + /Fx1 15 0 R
  105 + >>
  106 + >>
  107 + /TrimBox [
  108 + 60.000000
  109 + 90.000000
  110 + 672.000000
  111 + 582.000000
  112 + ]
  113 + /Type /Page
  114 +>>
  115 +endobj
  116 +
  117 +%% Page 3
  118 +5 0 obj
  119 +<<
  120 + /BleedBox [
  121 + 60.000000
  122 + 80.000000
  123 + 592.000000
  124 + 752.000000
  125 + ]
  126 + /Contents [
  127 + 23 0 R
  128 + 25 0 R
  129 + 27 0 R
  130 + ]
  131 + /CropBox [
  132 + 30.000000
  133 + 40.000000
  134 + 602.000000
  135 + 772.000000
  136 + ]
  137 + /MediaBox [
  138 + 0.000000
  139 + 0.000000
  140 + 612.000000
  141 + 792.000000
  142 + ]
  143 + /Parent 2 0 R
  144 + /Resources <<
  145 + /Font <<
  146 + /F1 13 0 R
  147 + >>
  148 + /ProcSet 14 0 R
  149 + /XObject <<
  150 + /Fx1 15 0 R
  151 + >>
  152 + >>
  153 + /TrimBox [
  154 + 90.000000
  155 + 120.000000
  156 + 582.000000
  157 + 732.000000
  158 + ]
  159 + /Type /Page
  160 +>>
  161 +endobj
  162 +
  163 +%% Page 4
  164 +6 0 obj
  165 +<<
  166 + /BleedBox [
  167 + 80.000000
  168 + 20.000000
  169 + 752.000000
  170 + 552.000000
  171 + ]
  172 + /Contents [
  173 + 29 0 R
  174 + 31 0 R
  175 + 33 0 R
  176 + ]
  177 + /CropBox [
  178 + 40.000000
  179 + 10.000000
  180 + 772.000000
  181 + 582.000000
  182 + ]
  183 + /MediaBox [
  184 + 0.000000
  185 + 0.000000
  186 + 792.000000
  187 + 612.000000
  188 + ]
  189 + /Parent 2 0 R
  190 + /Resources <<
  191 + /Font <<
  192 + /F1 13 0 R
  193 + >>
  194 + /ProcSet 14 0 R
  195 + /XObject <<
  196 + /Fx1 15 0 R
  197 + >>
  198 + >>
  199 + /TrimBox [
  200 + 120.000000
  201 + 30.000000
  202 + 732.000000
  203 + 522.000000
  204 + ]
  205 + /Type /Page
  206 +>>
  207 +endobj
  208 +
  209 +%% Page 5
  210 +7 0 obj
  211 +<<
  212 + /BleedBox [
  213 + 20
  214 + 40
  215 + 552
  216 + 712
  217 + ]
  218 + /Contents 35 0 R
  219 + /CropBox [
  220 + 10
  221 + 20
  222 + 582
  223 + 752
  224 + ]
  225 + /MediaBox [
  226 + -10
  227 + -20
  228 + 642
  229 + 832
  230 + ]
  231 + /Parent 2 0 R
  232 + /Resources <<
  233 + /Font <<
  234 + /F1 13 0 R
  235 + >>
  236 + /ProcSet 14 0 R
  237 + /XObject <<
  238 + /Fx1 15 0 R
  239 + >>
  240 + >>
  241 + /TrimBox [
  242 + 30
  243 + 60
  244 + 522
  245 + 672
  246 + ]
  247 + /Type /Page
  248 +>>
  249 +endobj
  250 +
  251 +%% Page 6
  252 +8 0 obj
  253 +<<
  254 + /BleedBox [
  255 + 40.000000
  256 + 80.000000
  257 + 712.000000
  258 + 612.000000
  259 + ]
  260 + /Contents [
  261 + 37 0 R
  262 + 39 0 R
  263 + 41 0 R
  264 + ]
  265 + /CropBox [
  266 + 20.000000
  267 + 50.000000
  268 + 752.000000
  269 + 622.000000
  270 + ]
  271 + /MediaBox [
  272 + -20.000000
  273 + -10.000000
  274 + 832.000000
  275 + 642.000000
  276 + ]
  277 + /Parent 2 0 R
  278 + /Resources <<
  279 + /Font <<
  280 + /F1 13 0 R
  281 + >>
  282 + /ProcSet 14 0 R
  283 + /XObject <<
  284 + /Fx1 15 0 R
  285 + >>
  286 + >>
  287 + /TrimBox [
  288 + 60.000000
  289 + 110.000000
  290 + 672.000000
  291 + 602.000000
  292 + ]
  293 + /Type /Page
  294 +>>
  295 +endobj
  296 +
  297 +%% Page 7
  298 +9 0 obj
  299 +<<
  300 + /BleedBox [
  301 + 80.000000
  302 + 100.000000
  303 + 612.000000
  304 + 772.000000
  305 + ]
  306 + /Contents [
  307 + 43 0 R
  308 + 45 0 R
  309 + 47 0 R
  310 + ]
  311 + /CropBox [
  312 + 50.000000
  313 + 60.000000
  314 + 622.000000
  315 + 792.000000
  316 + ]
  317 + /MediaBox [
  318 + -10.000000
  319 + -20.000000
  320 + 642.000000
  321 + 832.000000
  322 + ]
  323 + /Parent 2 0 R
  324 + /Resources <<
  325 + /Font <<
  326 + /F1 13 0 R
  327 + >>
  328 + /ProcSet 14 0 R
  329 + /XObject <<
  330 + /Fx1 15 0 R
  331 + >>
  332 + >>
  333 + /TrimBox [
  334 + 110.000000
  335 + 140.000000
  336 + 602.000000
  337 + 752.000000
  338 + ]
  339 + /Type /Page
  340 +>>
  341 +endobj
  342 +
  343 +%% Page 8
  344 +10 0 obj
  345 +<<
  346 + /BleedBox [
  347 + 100.000000
  348 + 20.000000
  349 + 772.000000
  350 + 552.000000
  351 + ]
  352 + /Contents [
  353 + 49 0 R
  354 + 51 0 R
  355 + 53 0 R
  356 + ]
  357 + /CropBox [
  358 + 60.000000
  359 + 10.000000
  360 + 792.000000
  361 + 582.000000
  362 + ]
  363 + /MediaBox [
  364 + -20.000000
  365 + -10.000000
  366 + 832.000000
  367 + 642.000000
  368 + ]
  369 + /Parent 2 0 R
  370 + /Resources <<
  371 + /Font <<
  372 + /F1 13 0 R
  373 + >>
  374 + /ProcSet 14 0 R
  375 + /XObject <<
  376 + /Fx1 15 0 R
  377 + >>
  378 + >>
  379 + /TrimBox [
  380 + 140.000000
  381 + 30.000000
  382 + 752.000000
  383 + 522.000000
  384 + ]
  385 + /Type /Page
  386 +>>
  387 +endobj
  388 +
  389 +%% Contents for page 1
  390 +11 0 obj
  391 +<<
  392 + /Length 12 0 R
  393 +>>
  394 +stream
  395 +q
  396 +BT
  397 + /F1 12 Tf
  398 + 144 500 Td
  399 + (Rotate: 0) Tj
  400 +ET
  401 +Q
  402 +q
  403 +1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 cm
  404 +/Fx1 Do
  405 +Q
  406 +endstream
  407 +endobj
  408 +
  409 +12 0 obj
  410 +115
  411 +endobj
  412 +
  413 +13 0 obj
  414 +<<
  415 + /BaseFont /Helvetica
  416 + /Encoding /WinAnsiEncoding
  417 + /Name /F1
  418 + /Subtype /Type1
  419 + /Type /Font
  420 +>>
  421 +endobj
  422 +
  423 +14 0 obj
  424 +[
  425 + /PDF
  426 + /Text
  427 +]
  428 +endobj
  429 +
  430 +15 0 obj
  431 +<<
  432 + /BBox [
  433 + 0
  434 + 0
  435 + 612
  436 + 792
  437 + ]
  438 + /Resources <<
  439 + /Font <<
  440 + /F1 13 0 R
  441 + >>
  442 + /ProcSet 55 0 R
  443 + >>
  444 + /Subtype /Form
  445 + /Type /XObject
  446 + /Length 16 0 R
  447 +>>
  448 +stream
  449 +BT
  450 + /F1 12 Tf
  451 + 144 620 Td
  452 + 1 0 0 rg
  453 + (red rectangle at media [0 0 612 792]) Tj
  454 + 0 -15 Td
  455 + 0 1 0 rg
  456 + (green at crop [10 20 582 752]) Tj
  457 + 0 -15 Td
  458 + 0 0 1 rg
  459 + (blue at bleed [20 40 552 712]) Tj
  460 + 0 -15 Td
  461 + 1 .5 0 rg
  462 + (orange at trim [30 60 522 672]) Tj
  463 + 0 -15 Td
  464 + 0 0 0 rg
  465 + (page is cropped at crop) Tj
  466 + 0 -15 Td
  467 + 0 0 0 rg
  468 + (red media rectangle is not visible) Tj
  469 +ET
  470 +5 w
  471 +1 0 0 RG
  472 +0 0 612 792 re s
  473 +0 1 0 RG
  474 +10 20 572 732 re s
  475 +0 0 1 RG
  476 +20 40 532 672 re s
  477 +0 0 0 rg
  478 +1 .5 0 RG
  479 +30 60 492 612 re s
  480 +endstream
  481 +endobj
  482 +
  483 +16 0 obj
  484 +506
  485 +endobj
  486 +
  487 +%% Contents for page 2
  488 +17 0 obj
  489 +<<
  490 + /Length 18 0 R
  491 +>>
  492 +stream
  493 +q
  494 +0.00 -1.00 1.00 0.00 0.00 612.00 cm
  495 +endstream
  496 +endobj
  497 +
  498 +18 0 obj
  499 +38
  500 +endobj
  501 +
  502 +%% Contents for page 2
  503 +19 0 obj
  504 +<<
  505 + /Length 20 0 R
  506 +>>
  507 +stream
  508 +q
  509 +BT
  510 + /F1 12 Tf
  511 + 144 500 Td
  512 + (Rotate: 90) Tj
  513 +ET
  514 +Q
  515 +q
  516 +1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 cm
  517 +/Fx1 Do
  518 +Q
  519 +endstream
  520 +endobj
  521 +
  522 +20 0 obj
  523 +116
  524 +endobj
  525 +
  526 +%% Contents for page 2
  527 +21 0 obj
  528 +<<
  529 + /Length 22 0 R
  530 +>>
  531 +stream
  532 +
  533 +Q
  534 +endstream
  535 +endobj
  536 +
  537 +22 0 obj
  538 +3
  539 +endobj
  540 +
  541 +%% Contents for page 3
  542 +23 0 obj
  543 +<<
  544 + /Length 24 0 R
  545 +>>
  546 +stream
  547 +q
  548 +-1.00 0.00 0.00 -1.00 612.00 792.00 cm
  549 +endstream
  550 +endobj
  551 +
  552 +24 0 obj
  553 +41
  554 +endobj
  555 +
  556 +%% Contents for page 3
  557 +25 0 obj
  558 +<<
  559 + /Length 26 0 R
  560 +>>
  561 +stream
  562 +q
  563 +BT
  564 + /F1 12 Tf
  565 + 144 500 Td
  566 + (Rotate: 180) Tj
  567 +ET
  568 +Q
  569 +q
  570 +1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 cm
  571 +/Fx1 Do
  572 +Q
  573 +endstream
  574 +endobj
  575 +
  576 +26 0 obj
  577 +117
  578 +endobj
  579 +
  580 +%% Contents for page 3
  581 +27 0 obj
  582 +<<
  583 + /Length 28 0 R
  584 +>>
  585 +stream
  586 +
  587 +Q
  588 +endstream
  589 +endobj
  590 +
  591 +28 0 obj
  592 +3
  593 +endobj
  594 +
  595 +%% Contents for page 4
  596 +29 0 obj
  597 +<<
  598 + /Length 30 0 R
  599 +>>
  600 +stream
  601 +q
  602 +0.00 1.00 -1.00 0.00 792.00 0.00 cm
  603 +endstream
  604 +endobj
  605 +
  606 +30 0 obj
  607 +38
  608 +endobj
  609 +
  610 +%% Contents for page 4
  611 +31 0 obj
  612 +<<
  613 + /Length 32 0 R
  614 +>>
  615 +stream
  616 +q
  617 +BT
  618 + /F1 12 Tf
  619 + 144 500 Td
  620 + (Rotate: 270) Tj
  621 +ET
  622 +Q
  623 +q
  624 +1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 cm
  625 +/Fx1 Do
  626 +Q
  627 +endstream
  628 +endobj
  629 +
  630 +32 0 obj
  631 +117
  632 +endobj
  633 +
  634 +%% Contents for page 4
  635 +33 0 obj
  636 +<<
  637 + /Length 34 0 R
  638 +>>
  639 +stream
  640 +
  641 +Q
  642 +endstream
  643 +endobj
  644 +
  645 +34 0 obj
  646 +3
  647 +endobj
  648 +
  649 +%% Contents for page 5
  650 +35 0 obj
  651 +<<
  652 + /Length 36 0 R
  653 +>>
  654 +stream
  655 +q
  656 +BT
  657 + /F1 12 Tf
  658 + 144 500 Td
  659 + (Rotate: 0, extended MediaBox) Tj
  660 +ET
  661 +Q
  662 +q
  663 +1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 cm
  664 +/Fx1 Do
  665 +Q
  666 +endstream
  667 +endobj
  668 +
  669 +36 0 obj
  670 +134
  671 +endobj
  672 +
  673 +%% Contents for page 6
  674 +37 0 obj
  675 +<<
  676 + /Length 38 0 R
  677 +>>
  678 +stream
  679 +q
  680 +0.00 -1.00 1.00 0.00 0.00 632.00 cm
  681 +endstream
  682 +endobj
  683 +
  684 +38 0 obj
  685 +38
  686 +endobj
  687 +
  688 +%% Contents for page 6
  689 +39 0 obj
  690 +<<
  691 + /Length 40 0 R
  692 +>>
  693 +stream
  694 +q
  695 +BT
  696 + /F1 12 Tf
  697 + 144 500 Td
  698 + (Rotate: 90, extended MediaBox) Tj
  699 +ET
  700 +Q
  701 +q
  702 +1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 cm
  703 +/Fx1 Do
  704 +Q
  705 +endstream
  706 +endobj
  707 +
  708 +40 0 obj
  709 +135
  710 +endobj
  711 +
  712 +%% Contents for page 6
  713 +41 0 obj
  714 +<<
  715 + /Length 42 0 R
  716 +>>
  717 +stream
  718 +
  719 +Q
  720 +endstream
  721 +endobj
  722 +
  723 +42 0 obj
  724 +3
  725 +endobj
  726 +
  727 +%% Contents for page 7
  728 +43 0 obj
  729 +<<
  730 + /Length 44 0 R
  731 +>>
  732 +stream
  733 +q
  734 +-1.00 0.00 0.00 -1.00 632.00 812.00 cm
  735 +endstream
  736 +endobj
  737 +
  738 +44 0 obj
  739 +41
  740 +endobj
  741 +
  742 +%% Contents for page 7
  743 +45 0 obj
  744 +<<
  745 + /Length 46 0 R
  746 +>>
  747 +stream
  748 +q
  749 +BT
  750 + /F1 12 Tf
  751 + 144 500 Td
  752 + (Rotate: 180, extended MediaBox) Tj
  753 +ET
  754 +Q
  755 +q
  756 +1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 cm
  757 +/Fx1 Do
  758 +Q
  759 +endstream
  760 +endobj
  761 +
  762 +46 0 obj
  763 +136
  764 +endobj
  765 +
  766 +%% Contents for page 7
  767 +47 0 obj
  768 +<<
  769 + /Length 48 0 R
  770 +>>
  771 +stream
  772 +
  773 +Q
  774 +endstream
  775 +endobj
  776 +
  777 +48 0 obj
  778 +3
  779 +endobj
  780 +
  781 +%% Contents for page 8
  782 +49 0 obj
  783 +<<
  784 + /Length 50 0 R
  785 +>>
  786 +stream
  787 +q
  788 +0.00 1.00 -1.00 0.00 812.00 0.00 cm
  789 +endstream
  790 +endobj
  791 +
  792 +50 0 obj
  793 +38
  794 +endobj
  795 +
  796 +%% Contents for page 8
  797 +51 0 obj
  798 +<<
  799 + /Length 52 0 R
  800 +>>
  801 +stream
  802 +q
  803 +BT
  804 + /F1 12 Tf
  805 + 144 500 Td
  806 + (Rotate: 270, extended MediaBox) Tj
  807 +ET
  808 +Q
  809 +q
  810 +1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 cm
  811 +/Fx1 Do
  812 +Q
  813 +endstream
  814 +endobj
  815 +
  816 +52 0 obj
  817 +136
  818 +endobj
  819 +
  820 +%% Contents for page 8
  821 +53 0 obj
  822 +<<
  823 + /Length 54 0 R
  824 +>>
  825 +stream
  826 +
  827 +Q
  828 +endstream
  829 +endobj
  830 +
  831 +54 0 obj
  832 +3
  833 +endobj
  834 +
  835 +55 0 obj
  836 +[
  837 + /PDF
  838 + /Text
  839 +]
  840 +endobj
  841 +
  842 +xref
  843 +0 56
  844 +0000000000 65535 f
  845 +0000000025 00000 n
  846 +0000000079 00000 n
  847 +0000000232 00000 n
  848 +0000000620 00000 n
  849 +0000001152 00000 n
  850 +0000001685 00000 n
  851 +0000002218 00000 n
  852 +0000002610 00000 n
  853 +0000003147 00000 n
  854 +0000003686 00000 n
  855 +0000004238 00000 n
  856 +0000004410 00000 n
  857 +0000004431 00000 n
  858 +0000004550 00000 n
  859 +0000004586 00000 n
  860 +0000005303 00000 n
  861 +0000005347 00000 n
  862 +0000005442 00000 n
  863 +0000005485 00000 n
  864 +0000005658 00000 n
  865 +0000005702 00000 n
  866 +0000005762 00000 n
  867 +0000005804 00000 n
  868 +0000005902 00000 n
  869 +0000005945 00000 n
  870 +0000006119 00000 n
  871 +0000006163 00000 n
  872 +0000006223 00000 n
  873 +0000006265 00000 n
  874 +0000006360 00000 n
  875 +0000006403 00000 n
  876 +0000006577 00000 n
  877 +0000006621 00000 n
  878 +0000006681 00000 n
  879 +0000006723 00000 n
  880 +0000006914 00000 n
  881 +0000006958 00000 n
  882 +0000007053 00000 n
  883 +0000007096 00000 n
  884 +0000007288 00000 n
  885 +0000007332 00000 n
  886 +0000007392 00000 n
  887 +0000007434 00000 n
  888 +0000007532 00000 n
  889 +0000007575 00000 n
  890 +0000007768 00000 n
  891 +0000007812 00000 n
  892 +0000007872 00000 n
  893 +0000007914 00000 n
  894 +0000008009 00000 n
  895 +0000008052 00000 n
  896 +0000008245 00000 n
  897 +0000008289 00000 n
  898 +0000008349 00000 n
  899 +0000008368 00000 n
  900 +trailer <<
  901 + /Root 1 0 R
  902 + /Size 56
  903 + /ID [<42ed290ee4e4c51171853f92a1a7642d><31415926535897932384626433832795>]
  904 +>>
  905 +startxref
  906 +8404
  907 +%%EOF
qpdf/qtest/qpdf/boxes.pdf 0 โ†’ 100644
  1 +%PDF-1.3
  2 +%ยฟรทยขรพ
  3 +%QDF-1.0
  4 +
  5 +1 0 obj
  6 +<<
  7 + /Pages 2 0 R
  8 + /Type /Catalog
  9 +>>
  10 +endobj
  11 +
  12 +2 0 obj
  13 +<<
  14 + /Count 8
  15 + /Kids [
  16 + 3 0 R
  17 + 4 0 R
  18 + 5 0 R
  19 + 6 0 R
  20 + 7 0 R
  21 + 8 0 R
  22 + 9 0 R
  23 + 10 0 R
  24 + ]
  25 + /Type /Pages
  26 +>>
  27 +endobj
  28 +
  29 +%% Page 1
  30 +3 0 obj
  31 +<<
  32 + /BleedBox [
  33 + 20
  34 + 40
  35 + 552
  36 + 712
  37 + ]
  38 + /Contents 11 0 R
  39 + /CropBox [
  40 + 10
  41 + 20
  42 + 582
  43 + 752
  44 + ]
  45 + /MediaBox [
  46 + 0
  47 + 0
  48 + 612
  49 + 792
  50 + ]
  51 + /Parent 2 0 R
  52 + /Resources <<
  53 + /Font <<
  54 + /F1 13 0 R
  55 + >>
  56 + /ProcSet 14 0 R
  57 + /XObject <<
  58 + /Fx1 15 0 R
  59 + >>
  60 + >>
  61 + /TrimBox [
  62 + 30
  63 + 60
  64 + 522
  65 + 672
  66 + ]
  67 + /Type /Page
  68 +>>
  69 +endobj
  70 +
  71 +%% Page 2
  72 +4 0 obj
  73 +<<
  74 + /BleedBox [
  75 + 20
  76 + 40
  77 + 552
  78 + 712
  79 + ]
  80 + /Contents 17 0 R
  81 + /CropBox [
  82 + 10
  83 + 20
  84 + 582
  85 + 752
  86 + ]
  87 + /MediaBox [
  88 + 0
  89 + 0
  90 + 612
  91 + 792
  92 + ]
  93 + /Parent 2 0 R
  94 + /Resources <<
  95 + /Font <<
  96 + /F1 13 0 R
  97 + >>
  98 + /ProcSet 14 0 R
  99 + /XObject <<
  100 + /Fx1 15 0 R
  101 + >>
  102 + >>
  103 + /Rotate 90
  104 + /TrimBox [
  105 + 30
  106 + 60
  107 + 522
  108 + 672
  109 + ]
  110 + /Type /Page
  111 +>>
  112 +endobj
  113 +
  114 +%% Page 3
  115 +5 0 obj
  116 +<<
  117 + /BleedBox [
  118 + 20
  119 + 40
  120 + 552
  121 + 712
  122 + ]
  123 + /Contents 19 0 R
  124 + /CropBox [
  125 + 10
  126 + 20
  127 + 582
  128 + 752
  129 + ]
  130 + /MediaBox [
  131 + 0
  132 + 0
  133 + 612
  134 + 792
  135 + ]
  136 + /Parent 2 0 R
  137 + /Resources <<
  138 + /Font <<
  139 + /F1 13 0 R
  140 + >>
  141 + /ProcSet 14 0 R
  142 + /XObject <<
  143 + /Fx1 15 0 R
  144 + >>
  145 + >>
  146 + /Rotate 180
  147 + /TrimBox [
  148 + 30
  149 + 60
  150 + 522
  151 + 672
  152 + ]
  153 + /Type /Page
  154 +>>
  155 +endobj
  156 +
  157 +%% Page 4
  158 +6 0 obj
  159 +<<
  160 + /BleedBox [
  161 + 20
  162 + 40
  163 + 552
  164 + 712
  165 + ]
  166 + /Contents 21 0 R
  167 + /CropBox [
  168 + 10
  169 + 20
  170 + 582
  171 + 752
  172 + ]
  173 + /MediaBox [
  174 + 0
  175 + 0
  176 + 612
  177 + 792
  178 + ]
  179 + /Parent 2 0 R
  180 + /Resources <<
  181 + /Font <<
  182 + /F1 13 0 R
  183 + >>
  184 + /ProcSet 14 0 R
  185 + /XObject <<
  186 + /Fx1 15 0 R
  187 + >>
  188 + >>
  189 + /Rotate 270
  190 + /TrimBox [
  191 + 30
  192 + 60
  193 + 522
  194 + 672
  195 + ]
  196 + /Type /Page
  197 +>>
  198 +endobj
  199 +
  200 +%% Page 5
  201 +7 0 obj
  202 +<<
  203 + /BleedBox [
  204 + 20
  205 + 40
  206 + 552
  207 + 712
  208 + ]
  209 + /Contents 23 0 R
  210 + /CropBox [
  211 + 10
  212 + 20
  213 + 582
  214 + 752
  215 + ]
  216 + /MediaBox [
  217 + -10
  218 + -20
  219 + 642
  220 + 832
  221 + ]
  222 + /Parent 2 0 R
  223 + /Resources <<
  224 + /Font <<
  225 + /F1 13 0 R
  226 + >>
  227 + /ProcSet 14 0 R
  228 + /XObject <<
  229 + /Fx1 15 0 R
  230 + >>
  231 + >>
  232 + /TrimBox [
  233 + 30
  234 + 60
  235 + 522
  236 + 672
  237 + ]
  238 + /Type /Page
  239 +>>
  240 +endobj
  241 +
  242 +%% Page 6
  243 +8 0 obj
  244 +<<
  245 + /BleedBox [
  246 + 20
  247 + 40
  248 + 552
  249 + 712
  250 + ]
  251 + /Contents 25 0 R
  252 + /CropBox [
  253 + 10
  254 + 20
  255 + 582
  256 + 752
  257 + ]
  258 + /MediaBox [
  259 + -10
  260 + -20
  261 + 642
  262 + 832
  263 + ]
  264 + /Parent 2 0 R
  265 + /Resources <<
  266 + /Font <<
  267 + /F1 13 0 R
  268 + >>
  269 + /ProcSet 14 0 R
  270 + /XObject <<
  271 + /Fx1 15 0 R
  272 + >>
  273 + >>
  274 + /Rotate 90
  275 + /TrimBox [
  276 + 30
  277 + 60
  278 + 522
  279 + 672
  280 + ]
  281 + /Type /Page
  282 +>>
  283 +endobj
  284 +
  285 +%% Page 7
  286 +9 0 obj
  287 +<<
  288 + /BleedBox [
  289 + 20
  290 + 40
  291 + 552
  292 + 712
  293 + ]
  294 + /Contents 27 0 R
  295 + /CropBox [
  296 + 10
  297 + 20
  298 + 582
  299 + 752
  300 + ]
  301 + /MediaBox [
  302 + -10
  303 + -20
  304 + 642
  305 + 832
  306 + ]
  307 + /Parent 2 0 R
  308 + /Resources <<
  309 + /Font <<
  310 + /F1 13 0 R
  311 + >>
  312 + /ProcSet 14 0 R
  313 + /XObject <<
  314 + /Fx1 15 0 R
  315 + >>
  316 + >>
  317 + /Rotate 180
  318 + /TrimBox [
  319 + 30
  320 + 60
  321 + 522
  322 + 672
  323 + ]
  324 + /Type /Page
  325 +>>
  326 +endobj
  327 +
  328 +%% Page 8
  329 +10 0 obj
  330 +<<
  331 + /BleedBox [
  332 + 20
  333 + 40
  334 + 552
  335 + 712
  336 + ]
  337 + /Contents 29 0 R
  338 + /CropBox [
  339 + 10
  340 + 20
  341 + 582
  342 + 752
  343 + ]
  344 + /MediaBox [
  345 + -10
  346 + -20
  347 + 642
  348 + 832
  349 + ]
  350 + /Parent 2 0 R
  351 + /Resources <<
  352 + /Font <<
  353 + /F1 13 0 R
  354 + >>
  355 + /ProcSet 14 0 R
  356 + /XObject <<
  357 + /Fx1 15 0 R
  358 + >>
  359 + >>
  360 + /Rotate 270
  361 + /TrimBox [
  362 + 30
  363 + 60
  364 + 522
  365 + 672
  366 + ]
  367 + /Type /Page
  368 +>>
  369 +endobj
  370 +
  371 +%% Contents for page 1
  372 +11 0 obj
  373 +<<
  374 + /Length 12 0 R
  375 +>>
  376 +stream
  377 +q
  378 +BT
  379 + /F1 12 Tf
  380 + 144 500 Td
  381 + (Rotate: 0) Tj
  382 +ET
  383 +Q
  384 +q
  385 +1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 cm
  386 +/Fx1 Do
  387 +Q
  388 +endstream
  389 +endobj
  390 +
  391 +12 0 obj
  392 +115
  393 +endobj
  394 +
  395 +13 0 obj
  396 +<<
  397 + /BaseFont /Helvetica
  398 + /Encoding /WinAnsiEncoding
  399 + /Name /F1
  400 + /Subtype /Type1
  401 + /Type /Font
  402 +>>
  403 +endobj
  404 +
  405 +14 0 obj
  406 +[
  407 + /PDF
  408 + /Text
  409 +]
  410 +endobj
  411 +
  412 +15 0 obj
  413 +<<
  414 + /BBox [
  415 + 0
  416 + 0
  417 + 612
  418 + 792
  419 + ]
  420 + /Resources <<
  421 + /Font <<
  422 + /F1 13 0 R
  423 + >>
  424 + /ProcSet 31 0 R
  425 + >>
  426 + /Subtype /Form
  427 + /Type /XObject
  428 + /Length 16 0 R
  429 +>>
  430 +stream
  431 +BT
  432 + /F1 12 Tf
  433 + 144 620 Td
  434 + 1 0 0 rg
  435 + (red rectangle at media [0 0 612 792]) Tj
  436 + 0 -15 Td
  437 + 0 1 0 rg
  438 + (green at crop [10 20 582 752]) Tj
  439 + 0 -15 Td
  440 + 0 0 1 rg
  441 + (blue at bleed [20 40 552 712]) Tj
  442 + 0 -15 Td
  443 + 1 .5 0 rg
  444 + (orange at trim [30 60 522 672]) Tj
  445 + 0 -15 Td
  446 + 0 0 0 rg
  447 + (page is cropped at crop) Tj
  448 + 0 -15 Td
  449 + 0 0 0 rg
  450 + (red media rectangle is not visible) Tj
  451 +ET
  452 +5 w
  453 +1 0 0 RG
  454 +0 0 612 792 re s
  455 +0 1 0 RG
  456 +10 20 572 732 re s
  457 +0 0 1 RG
  458 +20 40 532 672 re s
  459 +0 0 0 rg
  460 +1 .5 0 RG
  461 +30 60 492 612 re s
  462 +endstream
  463 +endobj
  464 +
  465 +16 0 obj
  466 +506
  467 +endobj
  468 +
  469 +%% Contents for page 2
  470 +17 0 obj
  471 +<<
  472 + /Length 18 0 R
  473 +>>
  474 +stream
  475 +q
  476 +BT
  477 + /F1 12 Tf
  478 + 144 500 Td
  479 + (Rotate: 90) Tj
  480 +ET
  481 +Q
  482 +q
  483 +1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 cm
  484 +/Fx1 Do
  485 +Q
  486 +endstream
  487 +endobj
  488 +
  489 +18 0 obj
  490 +116
  491 +endobj
  492 +
  493 +%% Contents for page 3
  494 +19 0 obj
  495 +<<
  496 + /Length 20 0 R
  497 +>>
  498 +stream
  499 +q
  500 +BT
  501 + /F1 12 Tf
  502 + 144 500 Td
  503 + (Rotate: 180) Tj
  504 +ET
  505 +Q
  506 +q
  507 +1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 cm
  508 +/Fx1 Do
  509 +Q
  510 +endstream
  511 +endobj
  512 +
  513 +20 0 obj
  514 +117
  515 +endobj
  516 +
  517 +%% Contents for page 4
  518 +21 0 obj
  519 +<<
  520 + /Length 22 0 R
  521 +>>
  522 +stream
  523 +q
  524 +BT
  525 + /F1 12 Tf
  526 + 144 500 Td
  527 + (Rotate: 270) Tj
  528 +ET
  529 +Q
  530 +q
  531 +1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 cm
  532 +/Fx1 Do
  533 +Q
  534 +endstream
  535 +endobj
  536 +
  537 +22 0 obj
  538 +117
  539 +endobj
  540 +
  541 +%% Contents for page 5
  542 +23 0 obj
  543 +<<
  544 + /Length 24 0 R
  545 +>>
  546 +stream
  547 +q
  548 +BT
  549 + /F1 12 Tf
  550 + 144 500 Td
  551 + (Rotate: 0, extended MediaBox) Tj
  552 +ET
  553 +Q
  554 +q
  555 +1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 cm
  556 +/Fx1 Do
  557 +Q
  558 +endstream
  559 +endobj
  560 +
  561 +24 0 obj
  562 +134
  563 +endobj
  564 +
  565 +%% Contents for page 6
  566 +25 0 obj
  567 +<<
  568 + /Length 26 0 R
  569 +>>
  570 +stream
  571 +q
  572 +BT
  573 + /F1 12 Tf
  574 + 144 500 Td
  575 + (Rotate: 90, extended MediaBox) Tj
  576 +ET
  577 +Q
  578 +q
  579 +1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 cm
  580 +/Fx1 Do
  581 +Q
  582 +endstream
  583 +endobj
  584 +
  585 +26 0 obj
  586 +135
  587 +endobj
  588 +
  589 +%% Contents for page 7
  590 +27 0 obj
  591 +<<
  592 + /Length 28 0 R
  593 +>>
  594 +stream
  595 +q
  596 +BT
  597 + /F1 12 Tf
  598 + 144 500 Td
  599 + (Rotate: 180, extended MediaBox) Tj
  600 +ET
  601 +Q
  602 +q
  603 +1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 cm
  604 +/Fx1 Do
  605 +Q
  606 +endstream
  607 +endobj
  608 +
  609 +28 0 obj
  610 +136
  611 +endobj
  612 +
  613 +%% Contents for page 8
  614 +29 0 obj
  615 +<<
  616 + /Length 30 0 R
  617 +>>
  618 +stream
  619 +q
  620 +BT
  621 + /F1 12 Tf
  622 + 144 500 Td
  623 + (Rotate: 270, extended MediaBox) Tj
  624 +ET
  625 +Q
  626 +q
  627 +1.00000 0.00000 0.00000 1.00000 0.00000 0.00000 cm
  628 +/Fx1 Do
  629 +Q
  630 +endstream
  631 +endobj
  632 +
  633 +30 0 obj
  634 +136
  635 +endobj
  636 +
  637 +31 0 obj
  638 +[
  639 + /PDF
  640 + /Text
  641 +]
  642 +endobj
  643 +
  644 +xref
  645 +0 32
  646 +0000000000 65535 f
  647 +0000000025 00000 n
  648 +0000000079 00000 n
  649 +0000000232 00000 n
  650 +0000000620 00000 n
  651 +0000001021 00000 n
  652 +0000001423 00000 n
  653 +0000001825 00000 n
  654 +0000002217 00000 n
  655 +0000002622 00000 n
  656 +0000003028 00000 n
  657 +0000003448 00000 n
  658 +0000003620 00000 n
  659 +0000003641 00000 n
  660 +0000003760 00000 n
  661 +0000003796 00000 n
  662 +0000004513 00000 n
  663 +0000004557 00000 n
  664 +0000004730 00000 n
  665 +0000004774 00000 n
  666 +0000004948 00000 n
  667 +0000004992 00000 n
  668 +0000005166 00000 n
  669 +0000005210 00000 n
  670 +0000005401 00000 n
  671 +0000005445 00000 n
  672 +0000005637 00000 n
  673 +0000005681 00000 n
  674 +0000005874 00000 n
  675 +0000005918 00000 n
  676 +0000006111 00000 n
  677 +0000006132 00000 n
  678 +trailer <<
  679 + /Root 1 0 R
  680 + /Size 32
  681 + /ID [<42ed290ee4e4c51171853f92a1a7642d><a4dda9b40735c4bc1bf243bdd415193e>]
  682 +>>
  683 +startxref
  684 +6168
  685 +%%EOF