From 638ea00309ef225858fdc2b5ab2889e1236d783d Mon Sep 17 00:00:00 2001 From: Vincent Hennebert Date: Mon, 19 Nov 2012 18:53:11 +0000 Subject: [PATCH] Bugzilla #54169: Split the parent tree (the number tree corresponding to the ParentTree entry in the structure tree root) to avoid reaching the internal limits of Acrobat Pro, that would otherwise split it at the wrong place when saving the document. Patch submitted by Robert Meyer git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1411352 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/fop/pdf/PDFNumberTreeNode.java | 28 ++++- .../org/apache/fop/pdf/PDFPageLabels.java | 14 --- .../org/apache/fop/pdf/PDFParentTree.java | 46 ++++++-- .../pdf/PDFLogicalStructureHandler.java | 4 +- status.xml | 5 + .../apache/fop/pdf/PDFParentTreeTestCase.java | 107 ++++++++++++++++++ test/pdf/1.5/test.pdf | Bin 92694 -> 94625 bytes .../pdf/background-image_jpg_repeat.pdf | Bin 12760 -> 12832 bytes .../pdf/background-image_jpg_single.pdf | Bin 12599 -> 12671 bytes .../pdf/background-image_png_repeat.pdf | Bin 35383 -> 35455 bytes .../pdf/background-image_png_single.pdf | Bin 58594 -> 58666 bytes .../pdf/background-image_svg_repeat.pdf | Bin 17086 -> 17158 bytes .../pdf/background-image_svg_single.pdf | Bin 9898 -> 9970 bytes test/pdf/accessibility/pdf/complete.pdf | Bin 96564 -> 96638 bytes test/pdf/accessibility/pdf/hyphenation.pdf | Bin 8251 -> 8323 bytes test/pdf/accessibility/pdf/image_jpg.pdf | Bin 8977 -> 9049 bytes test/pdf/accessibility/pdf/image_png.pdf | Bin 58018 -> 58090 bytes test/pdf/accessibility/pdf/image_svg.pdf | Bin 14233 -> 14305 bytes test/pdf/accessibility/pdf/image_wmf.pdf | Bin 248058 -> 248130 bytes test/pdf/accessibility/pdf/language.pdf | Bin 8717 -> 8789 bytes test/pdf/accessibility/pdf/leader.pdf | Bin 9278 -> 9350 bytes test/pdf/accessibility/pdf/links.pdf | Bin 9511 -> 9583 bytes test/pdf/accessibility/pdf/role.pdf | Bin 18986 -> 19058 bytes .../accessibility/pdf/role_non-standard.pdf | Bin 18677 -> 18749 bytes test/pdf/accessibility/pdf/side-regions.pdf | Bin 28067 -> 28141 bytes .../accessibility/pdf/table_row-col-span.pdf | Bin 19354 -> 19428 bytes test/pdf/accessibility/pdf/text_1.pdf | Bin 7423 -> 7495 bytes test/pdf/accessibility/pdf/text_2.pdf | Bin 10364 -> 10436 bytes .../accessibility/pdf/text_font-embedding.pdf | Bin 28477 -> 28549 bytes test/pdf/accessibility/pdf/th_scope.pdf | Bin 16293 -> 16365 bytes 30 files changed, 173 insertions(+), 31 deletions(-) create mode 100644 test/java/org/apache/fop/pdf/PDFParentTreeTestCase.java diff --git a/src/java/org/apache/fop/pdf/PDFNumberTreeNode.java b/src/java/org/apache/fop/pdf/PDFNumberTreeNode.java index 72fbcd1c6..599530439 100644 --- a/src/java/org/apache/fop/pdf/PDFNumberTreeNode.java +++ b/src/java/org/apache/fop/pdf/PDFNumberTreeNode.java @@ -49,7 +49,7 @@ public class PDFNumberTreeNode extends PDFDictionary { * @return the Kids array */ public PDFArray getKids() { - return (PDFArray)get(KIDS); + return (PDFArray) get(KIDS); } /** @@ -65,7 +65,12 @@ public class PDFNumberTreeNode extends PDFDictionary { * @return the Nums array */ public PDFNumsArray getNums() { - return (PDFNumsArray)get(NUMS); + PDFNumsArray nums = (PDFNumsArray) get(NUMS); + if (nums == null) { + nums = new PDFNumsArray(this); + setNums(nums); + } + return nums; } /** @@ -83,7 +88,7 @@ public class PDFNumberTreeNode extends PDFDictionary { */ public Integer getLowerLimit() { PDFArray limits = prepareLimitsArray(); - return (Integer)limits.get(0); + return (Integer) limits.get(0); } /** @@ -101,12 +106,25 @@ public class PDFNumberTreeNode extends PDFDictionary { */ public Integer getUpperLimit() { PDFArray limits = prepareLimitsArray(); - return (Integer)limits.get(1); + return (Integer) limits.get(1); + } + + /** + * Adds a number and object to the nums array and increases the + * upper limit should it be required. + * @param num The unique number identifying the object in the array + * @param object The object being added + */ + protected void addToNums(int num, Object object) { + getNums().put(num, object); + if (getUpperLimit() < num) { + setUpperLimit(num); + } } private PDFArray prepareLimitsArray() { - PDFArray limits = (PDFArray)get(LIMITS); + PDFArray limits = (PDFArray) get(LIMITS); if (limits == null) { limits = new PDFArray(this, new Object[2]); put(LIMITS, limits); diff --git a/src/java/org/apache/fop/pdf/PDFPageLabels.java b/src/java/org/apache/fop/pdf/PDFPageLabels.java index e95c97a25..e7b90ec4e 100644 --- a/src/java/org/apache/fop/pdf/PDFPageLabels.java +++ b/src/java/org/apache/fop/pdf/PDFPageLabels.java @@ -56,20 +56,6 @@ public class PDFPageLabels extends PDFNumberTreeNode { super(); } - /** - * Returns the Nums object - * @return the Nums object (an empty PDFNumsArray for the "/Nums" entry is created - * if it doesn't exist) - */ - public PDFNumsArray getNums() { - PDFNumsArray nums = super.getNums(); - if (nums == null) { - nums = new PDFNumsArray(this); - setNums(nums); - } - return nums; - } - /** * Adds a new entry, if necessary, to the /PageLabels dictionary. * @param index the page index (0 for page 1) diff --git a/src/java/org/apache/fop/pdf/PDFParentTree.java b/src/java/org/apache/fop/pdf/PDFParentTree.java index 7876bbc0c..e03545568 100644 --- a/src/java/org/apache/fop/pdf/PDFParentTree.java +++ b/src/java/org/apache/fop/pdf/PDFParentTree.java @@ -24,18 +24,44 @@ package org.apache.fop.pdf; */ public class PDFParentTree extends PDFNumberTreeNode { + private static final int MAX_NUMS_ARRAY_SIZE = 50; + + public PDFParentTree() { + put("Kids", new PDFArray()); + } + + @Override + public void addToNums(int num, Object object) { + int arrayIndex = num / MAX_NUMS_ARRAY_SIZE; + setNumOfKidsArrays(arrayIndex + 1); + insertItemToNumsArray(arrayIndex, num, object); + } + + private void setNumOfKidsArrays(int numKids) { + for (int i = getKids().length(); i < numKids; i++) { + PDFNumberTreeNode newArray = new PDFNumberTreeNode(); + newArray.setNums(new PDFNumsArray(newArray)); + newArray.setLowerLimit(i * MAX_NUMS_ARRAY_SIZE); + newArray.setUpperLimit(i * MAX_NUMS_ARRAY_SIZE); + addKid(newArray); + } + } + /** - * Returns the number tree corresponding to this parent tree. - * - * @return the number tree + * Registers a child object and adds it to the Kids array. + * @param kid The child PDF object to be added */ - public PDFNumsArray getNums() { - PDFNumsArray nums = super.getNums(); - if (nums == null) { - nums = new PDFNumsArray(this); - setNums(nums); - } - return nums; + private void addKid(PDFObject kid) { + assert getDocument() != null; + getDocument().assignObjectNumber(kid); + getDocument().addTrailerObject(kid); + ((PDFArray) get("Kids")).add(kid); + } + + private void insertItemToNumsArray(int array, int num, Object object) { + assert getKids().get(array) instanceof PDFNumberTreeNode; + PDFNumberTreeNode numsArray = (PDFNumberTreeNode) getKids().get(array); + numsArray.addToNums(num, object); } } diff --git a/src/java/org/apache/fop/render/pdf/PDFLogicalStructureHandler.java b/src/java/org/apache/fop/render/pdf/PDFLogicalStructureHandler.java index ee00d2401..c532a05a4 100644 --- a/src/java/org/apache/fop/render/pdf/PDFLogicalStructureHandler.java +++ b/src/java/org/apache/fop/render/pdf/PDFLogicalStructureHandler.java @@ -124,7 +124,7 @@ class PDFLogicalStructureHandler { // being output to the PDF. // This should really be handled by PDFNumsArray pdfDoc.registerObject(pageParentTreeArray); - parentTree.getNums().put(currentPage.getStructParents(), pageParentTreeArray); + parentTree.addToNums(currentPage.getStructParents(), pageParentTreeArray); } private MarkedContentInfo addToParentTree(PDFStructElem structureTreeElement) { @@ -198,7 +198,7 @@ class PDFLogicalStructureHandler { contentItem.put("Type", OBJR); contentItem.put("Pg", this.currentPage); contentItem.put("Obj", link); - parentTree.getNums().put(structParent, structureTreeElement); + parentTree.addToNums(structParent, structureTreeElement); structureTreeElement.addKid(contentItem); } diff --git a/status.xml b/status.xml index 990a15f5e..9362983b2 100644 --- a/status.xml +++ b/status.xml @@ -59,6 +59,11 @@ documents. Example: the fix of marks layering will be such a case when it's done. --> + + Split the parent tree (the number tree corresponding to the ParentTree entry in the + structure tree root) to avoid reaching the internal limits of Acrobat Pro, that would + otherwise split it at the wrong place when saving the document. + Created a simple mechanism to avoid NPEs when AWT fonts are requested from Batik for AFP output. diff --git a/test/java/org/apache/fop/pdf/PDFParentTreeTestCase.java b/test/java/org/apache/fop/pdf/PDFParentTreeTestCase.java new file mode 100644 index 000000000..6fa5d6a42 --- /dev/null +++ b/test/java/org/apache/fop/pdf/PDFParentTreeTestCase.java @@ -0,0 +1,107 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* $Id$ */ + +package org.apache.fop.pdf; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.mock; + +/** + * Tests that the nums array in the ParentTree dictionary is correctly being split into + * separate arrays if the elements number exceeds the set limit. + */ +public class PDFParentTreeTestCase { + + private PDFParentTree parentTree; + + @Before + public void initializeStructureTree() { + parentTree = new PDFParentTree(); + PDFDocument pdfDocument = new PDFDocument("test"); + pdfDocument.makeStructTreeRoot(parentTree); + } + + /** + * Adds less structured items than the imposed limit which should result + * in only one nums array being created. + * @throws Exception + */ + @Test + public void testNoSplit() throws Exception { + assertEquals(getArrayNumber(45), 1); + } + + /** + * Adds more than the imposed array limit to test that it splits the + * nums array into two objects. + * @throws Exception + */ + @Test + public void testSingleSplit() throws Exception { + assertEquals(getArrayNumber(70), 2); + } + + /** + * Adds items to the nums array to cause and test that multiple splits occur + * @throws Exception + */ + @Test + public void testMultipleSplit() throws Exception { + assertEquals(getArrayNumber(165), 4); + } + + /** + * Ensures that items added out of order get added to the correct nums array + * @throws Exception + */ + @Test + public void testOutOfOrderSplit() throws Exception { + PDFStructElem structElem = mock(PDFStructElem.class); + for (int num = 50; num < 53; num++) { + parentTree.addToNums(num, structElem); + } + assertEquals(getArrayNumber(50), 2); + PDFNumberTreeNode treeNode = (PDFNumberTreeNode) parentTree.getKids().get(0); + for (int num = 0; num < 50; num++) { + assertTrue(treeNode.getNums().map.containsKey(num)); + } + treeNode = (PDFNumberTreeNode) parentTree.getKids().get(1); + for (int num = 50; num < 53; num++) { + assertTrue(treeNode.getNums().map.containsKey(num)); + } + } + + /** + * Gets the number of arrays created for a given number of elements + * @param elementNumber The number of elements to be added to the nums array + * @return Returns the number of array objects + * @throws Exception + */ + private int getArrayNumber(int elementNumber) throws Exception { + PDFStructElem structElem = mock(PDFStructElem.class); + for (int structParent = 0; structParent < elementNumber; structParent++) { + parentTree.addToNums(structParent, structElem); + } + return parentTree.getKids().length(); + } +} diff --git a/test/pdf/1.5/test.pdf b/test/pdf/1.5/test.pdf index d97648e1edca50f561957fa6a1b04593adb0e8e0..e937afd583ea69ef477531c3ff56519d8b1bf944 100644 GIT binary patch delta 10381 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 delta 8313 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 F7XaXOTVVhI delta 277 zcmZ3GawB;{6NiD3k%6&=f!W3`8$NCWqYxtlD`N{Q1GCK+`79Zc1tyCM`W%eLo0sV;GBQ~jPCjW+JUPHHEz8o_z`(`a)yd4+ z(b?45#L~^#(A3b-$j#Wo(#+J{$k9&0hM7@b_zBGmBex>DCh@gR;2>10r{}FB(bOjY_Xw{fsqB5s;aBM G8y5i2(q0Jw delta 292 zcmeyLv^{A;6NiD3k%6&=f%(QR8$NCWqYxtlD`N{Q1M|%n`79Zc1tyCM5<}8%)+PD4x9DAT7() z(#XQq+0@a^z|z#x*wDbx$;8dv&BEEq(8$@*z}d-8!G@rcSS|$x{ou^1R0ShrkQ<9j Y5{pVIic-_K3=J*K&A3!mUH#p-06wZs9smFU diff --git a/test/pdf/accessibility/pdf/background-image_png_repeat.pdf b/test/pdf/accessibility/pdf/background-image_png_repeat.pdf index d42d935aa1165ba42966e62c8cf4c3059334374d..f69e373bcfc11c684f739f7e41c232ba9685403d 100644 GIT binary patch delta 345 zcmdl!h3WqkrU^|PhL(mF#>OTF8@p`yxD72s3@xmTjjc=!HeckkWJDI2EGm$T%-`HA z;GH9Cs9>OwpOnRAW22z&lbV-alA&N^wE1mK5t{}`Du~O@j*BZbF9oE=$Ox*~(8SOX zE@-^Dz1e`7(RlKXw!<9WnJL8z(MAT7Ticx{U$5ac@+-{+3K%FDT7pcA1zM7sn^^)D zGKf_`GQ6TFHI2(a!N_Fu#dak|Mx)7JI!ahf%uOvOM|75EIl5UGS{j=>8<-dwS~|KI zyE(fWxmr3Ix|tZ7ni&|H*(ul%R1(Xjpr9X|S(OU31mvyalEk7Cu(ie}7KTP#s;aL3 GZd?E)fM0L` delta 293 zcmexAg=zZ~rU^|P21Z5(#uf&a8@p`yxDAX#j0~)dEvyVIH(%tlWJDI2EGm$T%-`HA z;GH9CpkSbopOnRAW22z&lbV-alA&N^xcO~O5t{}`Du~O@j*BZbF9oE=$PlX7(8SOX zE@-s5z1e`7(P;9Hw!>V0rMbll(FO{JmXn*?ohSck=U_D6%-W&E$Y?TIqqAi4hR)P1 zCsPYIV*^)117}MUCs$Vs6IU~5CubukV`mdnV@F2=I|UnpN@BSb6!e2Lt5Ow=j6qH; aE=epZsVGWK<1#ieH#6W;Rdw}u;{pIhx=@7x diff --git a/test/pdf/accessibility/pdf/background-image_png_single.pdf b/test/pdf/accessibility/pdf/background-image_png_single.pdf index ba39a2b31f7322877d196b3b81b00fecfca48fcf..cdba6192e9c9a5484e1b4563431975c0de73c8c4 100644 GIT binary patch delta 354 zcmaEKl6loB<_S$4hL(mF#>OUw8@p`yxD72s3@xmTjjc=!H(%tlWJDI2EGm$T%-`HA z@bI{(p@M-zeo_{fjg5l7PikIzNrr-v(dOnG?W`IgsUR*pJ1(x&ycCccBO|C{Lql^j zxS;W7qk9I-jK-6bA0FoL&P*v*h&D2qZ1Bk0-pBySaKF-App1cnp(V)JSfFj0xtS$k zA%j>2BwH$qQq#B$6pTzZ*E~{U1e!blaS4mLrJ3bq<|n0DPHsl7re+3i2CmMoMrNkQ z#+ELQuFl5Jj?R{@jz&%vb_zBGmBex>DCh@gR;2PGXw1I-5TSTmZD(Ri6L= diff --git a/test/pdf/accessibility/pdf/background-image_svg_repeat.pdf b/test/pdf/accessibility/pdf/background-image_svg_repeat.pdf index 1de4c98a147cc2d44497463a42c376a7879db78e..ed74244b33192f13ddd55e464bb8780dd1de3e0b 100644 GIT binary patch delta 357 zcmdnj%GlP%IH8Hd(9+Pt*x1BmW0wsdx1nW-p@o&Pv6YF*=8JrmjK~6$MFnz^`I~zM zoR~!o6$}*eld`yMY!vi;QuESFG8BxBHa`)bpr!$m3gWV}nV`ae1XtepPZ7w61UukZ!LbQQ`k>zA3duPsyqSQ1l0|jH_%}4B&7#YnsKX1t_WX=G$-VeV+=V(Dn)=45FG6mfHMvQw}js3ew4K|wz_vnmy6 a0mz}nC5c5PU@HyHjLeL=R8?L5-M9d{)K0Dd diff --git a/test/pdf/accessibility/pdf/background-image_svg_single.pdf b/test/pdf/accessibility/pdf/background-image_svg_single.pdf index b89ea182ae1e95d94159ce5ed59cea90b692e2a4..d2245e349172ae465fa108f257dd55a0f1ae38b1 100644 GIT binary patch delta 352 zcmZ4G`^k4g6NjOtp@p%riP^?38$NDB%Me2gD`R6T6SK`1`79Zc1tyCM~LBC>R-ljEx1_mYJJb0v0le zRY0<(q9`?u3#iU?v!RM2Ba?x}jlgVdPOEaCEEFE1e+?)*D49$!!Tnx-j zE#1t`j9i`FEG*27P0j5TYzQieyOJf5IE>%@me>W}w DK%HE; delta 291 zcmez5yUKS$6NiD3k%6&=q3Omh8$NCWqYxtlD`N{QL(|O{`79Zc1tyCM+A�Ej81` zz}eN*(#grl#lYFk($LJ%(9F@)%*fK%%+bu$(ACmT!G@rcSS|$x{ou^1R0SgwkQ<9j X5{pVIic-_KER9UfxKveL{oS|#C-zIm diff --git a/test/pdf/accessibility/pdf/complete.pdf b/test/pdf/accessibility/pdf/complete.pdf index 9b4df8c400b712a05b624133baa0c09546acf2cc..844106f2324908d329ee6927ac2d2752258724d5 100644 GIT binary patch delta 1732 zcmah}T})g>7|pi@Dp!71p(-K3^`R*(=&*1r`1IVY$+)9x@wj1( zPmjrEjJvs+8(SzMyVT}R-&mxm>{3Z#H2JlXJaM9g&WURURJ}v*zkanH&bN0sXaDYL zTXMGr=ukV^imo5tOhbjlWIeQ^SJyt zx_IJi4bLX1LC$(7kHhWMh|!jPx;&M~qkG5{n>#3uu~dheGOOXjqx7J-(1AbZiNADd zqxNPeeG7QL3p|;)s-gJ_T0<7!k9lr4eT4Y8ZW@vk zM$vn|2fdl_dsGSZ8j*pW1d#g$=SBJ!aFl-yNMV|E^T%E~f()L?43^dTC-+hbp{BVx z;%UXvk&elQ$}rmz$}r%IePp4moIY_=08nvpG#5v5F~#|P^a55u%jj*AgPK2mj3fa;_Gr2+o;hp31!337e{K#3`CkJC=XO3lE8ilOE^ zlpw?urw-Fa#85K~_*_FMt$IO-{Lj!)Ay(7WQl+jij8ktLQ2A*xwBMGYuS#_qN^z82 zQ9MZ>7q_R!X3YV{!=ieMlFuQ?-^QjUGt~K17K33tjPj25n9O7m6+rN#$Ms_26RY?FqVs7)-5H8HWqpYPtgwv9aa^qq6& z+;hI~n>+K@oxG3lL*A73j*|8maBAu~%ESJR)cUUfG+0k3qE7X$?%eJeN6XR1u<5QEi%Z08b z5|%YIKB$hl+{;d^Zl;LZQkH#x^&~}eTVmMqTQP;@seHO5Z?2~;JECiktDS0)$GLlN zsBqP|8DeTwF>%e;cQ#UA9yw~>m&I(&D8c2iAk{+UT#&YrCl`Y>My_lupbGFCE1;W( zTQMnW8S)oH^wHyG;T!`vAUr*__dXF}*uSuyN)oE^KZc04ip0N)!aR0gk>|<}x6=)y zs3_p&B;{98B4{LCl7Gfv(OO*|&k^JiH*$}e2bpoImossylnrre@K@tBL9lzalPWP1 zutPdER4Bjbq|yKn%TG`V2uBvw(p%_j->Xx9p_bmrYbzG+h@v0b9ihI*>YnGCGafOqFW{nTzQ6` zlvi5t`oi*WQyMr(MY3);l|W3h+6w9*RW8r%rn{(}X{8mwt8L)v$QuS~pQmMHiT&sc zx6`MHe{ZKg)sV*S=??66q~D=SpjU+q>=c09uedzQw}7Ypt3(RZl$$?w(h+3vOl7dF z+&{gS@(DG=O~{utN1+^32en~BNNpJK^)6y4Yp0NEr+{#(G62+EgyA9-7h7K5N3Y=o zw7d&g+D{yi-%alU&Ue#OA@eoj3vEkhY+PRd$8Ks2)?v}{1T1=Y$4h*qF)2~2}% zl|r)uyo_?0N>d$TToi4q){joSj)N#``AGFm0qUCqR0jAz9HI?`Cdm020427(J4E$} zwVIw`9Yf9cC_#uV&mN|$h@qw*@Rfn;5xomS)O&`GBDpX^btU?PhH?5&2h@JrF4k|$ z(6>R8R;M^hp4>D_pS8BWI5uhbIQSE)kFvvdZCC#RY-Y2FuArHlNMNF?YaSv~3)@js zieRQI7e}elnm#@>Y+GZ~2_Q#@hU{BKLI`j77!d3i{!vGD(%oEkVjr8mboi^Qz0TbtTa);~QY&_@6O diff --git a/test/pdf/accessibility/pdf/hyphenation.pdf b/test/pdf/accessibility/pdf/hyphenation.pdf index d8552f63a45d570a4b433e1ef8c575a7b3867e26..401fbf3568bda01a591ce0883aaece4202a71391 100644 GIT binary patch delta 390 zcmdn((Cj#&iNny+(8Ac*)L>$l8l&OHjfZ&{jW(C^1~PIRT80=}SQ#5znHp@q$Y+Tn zFj-U}7g@pNUV)8bMg|H73i(M{TsAfe`aY?7=_MHoM#h^%1P`#;g5`p^?CiL>Qu9(k zii`}Qs*MdzOyGh>P(cebBe)HE&w1tZhVhh*az84V{Z%B!%L zn;Do-HkF^7X>8$YXy)wb;_77LVqsux$Y+Tn zFj-U}7g@pNUV)91x6AT!`lRNimt-gy8Ep;`JiumaXsKYJ5X5C?$HkSJmy(~9#bsmw z6ag`e4NXkof`(8*3o|3Qn9<}w2@yu)&1n(|ER4pJkIO8bd_-1Ya+R#@cp;sLpir3F8{3Xl!n2Y~bi*r(i=+Ni3Iwf_`vjRVvUDkQa+f5{pW})>;@_m~*MBy863u F0RY~PT-*Qv delta 297 zcmccVHqmWD6NiD3k%6&=k-^3;8$NCWqYxtlD`N{QBZJKs`79Zc1tyCMcp;E0s*{ zR!Yq@aWgivFm`e@bG2|bGc`7Ju{3dYG&i%bbaOK{cQmlHQ?MbZB$i7-K|eUNDivrx Y$fd<4iA5z~8!e2DO}SK6UH#p-06Y>+-v9sr diff --git a/test/pdf/accessibility/pdf/image_png.pdf b/test/pdf/accessibility/pdf/image_png.pdf index a33d2ed3f4746be7e2ba8b05012d81779335a8f7..0a5641aaa81ddba42300360305fd4c34eef9ff8f 100644 GIT binary patch delta 357 zcmZ2S?`8@p`yxD72s3@xmTjjc?LH(%tlWJDI2EGm$T%-`HA zaO=3Jk%ECjeo_{fjg5l7PikIzNrr-v@#dNvCd}#}sUR*pJ1(x&ycCccBV(vyQwu}5 zn91ac_k}mVx~;;@Xfm1q{$UR9%#>nWKl&?Y8n?%o#|$c2WE_n=9A+emav!`n;TC){IE33+0@X*$j#Z<%*@2q z$u`tu-|_F*4^; KRdw}u;{pJ*=49^x delta 300 zcmaELlzGun<_S$421Z5(#ui3~8@p`yxDAX#j0~)dEv$?TH(%tlWJDI2EGm$T%-`HA zaO=3Jp@M-zeo_{fjg5l7PikIzNrr-v(dL>PCd}#}sUR*pJ1(x&ycCccBO|C{Qwu}5 znDOL^_k}mVx~;;@Xgrz!{$Vb^(%fQ&XafZ!gUPq}dI)z#mP3jnumRmuPW diff --git a/test/pdf/accessibility/pdf/image_svg.pdf b/test/pdf/accessibility/pdf/image_svg.pdf index 1184ddef9954858234c43282422152fb4652642c..eaf6d56c4ec724bbb4c0e68aea920785b9ff69fc 100644 GIT binary patch delta 332 zcmbQ4|1f_-6NjOtp@p%rsp-Zp8$NDB%Me2gD`R6TQ`5~C`79Zc1tyCMK6bxb&kW8#7 zN=@T3P%t*wyxYW!kGpka8mVo?HT#{H+0=CxB*wn;`OI6j?-;E0Zxk*@m delta 295 zcmaEuKQn(q6NiD3k%6&=k@3bZ8$NCWqYxtlD`N{QBje2%`79Zc1tyCMTWDx(Vrjsos_N?R#svVmSxu1u diff --git a/test/pdf/accessibility/pdf/image_wmf.pdf b/test/pdf/accessibility/pdf/image_wmf.pdf index 43c15d9ea6e1f6c3911619aa56ea965dfb7d562b..819f385a6613eb24a387f2beff7020cf8f497b98 100644 GIT binary patch delta 348 zcmex0k^j&n{s~PShL(mF#>S>*8@p`yxD72s3@xmTjjc@0HeckkWJDI2EGm$T%-`HA z5FsmSqF|tqpOnRAW22z&lbV-alA&N`+Wbqm{g*By5HoH6rOUjyUl^n;h|A87iz_uR z1*G20boz$9%wmjY+mG*MR%8a!FAp&PVC3-5Oet1~HZz|7`Vh0TrkOF4@qVSbKq&(S zGb4~;u|WGWb2Cf8LI%?n4>OB0nr}Bh%xuO8G%W83^DbsKBNH=IbED}}CzwmKEgUV4 zjGWwDoQ)iv4V;`DU0n>F+{_&D delta 304 zcmX>!iT~F`{s~PS21Z5(#ui4V8@p`yxDAX#j0~)dEv$@8H(%tlWJDI2EGm$T%-`HA z5FsmStYDy!pOnRAW22z&lbV-alA&N`()>%e{g*By5HoH6rOUjyUl^n;h|A87iz_uR z1*G20Wcr4^%wmkD+mG*MR%8a!FAp&PVC3>E%`H}lHc&7#n*Q<-vomK!QED0&kZZO* z`!KT^BcsLkMMs!-F;6cz!JM9Ln7XV1*R$>4E diff --git a/test/pdf/accessibility/pdf/language.pdf b/test/pdf/accessibility/pdf/language.pdf index 48a5f9f52b16f2a3347e9142f8b57e54bf57145a..e32f4f7e961125af382237436f9501276b79e303 100644 GIT binary patch delta 418 zcmeBmx#}{ZiNny+(8Ac*)M8?n8l&;XjfZ&{O*WVEhB68nT80=}SQ#5znOa2I=%*xG zrA%HZAUSzGzu0DOer85)B>Bmb0=X#si2_$ejT8(N@{_W-Y-|+teNyw%OEMIUOgC2x zo?r_ENdQ2D=B0qt7#Twq8ylLKzy(d9f)-|Ga4}P;n4yWKIb6_e^Aw3Ytc+%p z3+0w_cxR>*D?}R^PF9e2wl^|_st38kuQV4ZW1wJU02B<01v)D;H?ssRWDu)>u`t+g<)Fy~TLb@g}S0stuEZ!!P? delta 361 zcmccW((5vziNnCi$iUdb$b4d#8l%z1jfZ&{jW?I_hB68n7=;)aSQ%Sb8JS1f=%*xG zrA%HZAUSzGzu0DOer85)B>Bmb0=X#si2_$e4HXO&@{_W-Y-|+teNyw%OEMIUOg2{w zo?r_ENdQ2D=B0qt7#Tqo8ylLKzy*z=f)-|Ga4{38n4yWKIb6_m^Aw3Ytc<3U z3+0w_`IY7tD?}S87#U2KlXvEDuBb9OUa>dR)WX8V(%Hh? z%-GGq$=t-%(9zMw%*4sr+{wwz+0xm>PQiwtl2|SU1^wX6s#Ku)ApaDXBo>u`ZL}~j NHsw-Pb@g}S0svsjU(f&m diff --git a/test/pdf/accessibility/pdf/leader.pdf b/test/pdf/accessibility/pdf/leader.pdf index e277699e5c50d2eeae1a0abe1d2a879b37084c37..869a47d7616661dcb2416f21e8fe3999441bdb19 100644 GIT binary patch delta 352 zcmdnz(dId!iNny+(8Ac*)N*5&4Ij6mWr(4Lm9epvspaO2e3p#J0+U4ra*_F)dj-sy zMNJe86!Md@xNK|`^nFtE(n~TFj7&G*6n?~^0g?*hva{pjO3h0FsWCEzDmF4OHiZkC zZGJ2>g_+T8a)rWq4)4sAVuffU=F&h|#eNQV2B<^p956pV~O#>N6|%goIz0Sg(# zDj?ZXQIwj-1ypCgd9I=8ADmg03bX~}!Qzs{q7tyZ7G@?ET&k+B{%%|V Do4Q?Q delta 295 zcmZqk+~+Z&iNnCi$iUdb$YNuc4Ij6GQHYU&m9d4Dk;UeVe3p#J0+U4ra*_F)dj-sy zMU52<6!Md@xNK|`^nFtE(n~TFj7&D)6n?~^0g?*hva{pjO3h0FsWCEvDhAqU3Kulp z{8(lRGo$I`3Wf7rexigA#1JvsNdzUUu8<8T8xTu71wk1Q z`~jk+VS5XEi?m{AE&c^}WfiUL4&OcZ-ov@8epD|{$A~0?X&7IfF9JCjJWY%+?Di+u z!8nndMC6#3!`K~8$v;5F!|gwYi*Ox)ta^>C0In9IN1ncpE&*LVMz`YvVbs|@g!w$m z)J%KdIY5lKBz86$(}K|!q|}oQNV$5ReQEi;0TId+JGNumP7hK4N&^-O5Sn(&KSyP- z%!sCaLxuw=IQ?NHV1zUI1F1Vc_Z9-&{g{scKov;bj;&g)9@?TzJtd0Mlm%;k?s~uN zO)#RmdPvM9Gc~Jid8vHTM885Ecg;PB5o7LD@&*7+-KS(oa3R$&^==uO$iLHAah#8xQd?8Ch;Fks9Wbz$B_sO>fc_!-%r2%=cp;$jE3o znNe}6j9+PPu|l+gf{_`>G6h2gL$E^>j1&ybC$Cd<=By}6P2)09FgDukq%@Ne=)XJ4 zmXkGA?q(VqIGURnx|o|8T9_LexjLIzx>^{SxEh&QxR?Whvz>wsK_#&u4+m#fr2@?d Yd9=7Bv8V)WqlLMFC6}tItG^o;08{UD9smFU diff --git a/test/pdf/accessibility/pdf/role.pdf b/test/pdf/accessibility/pdf/role.pdf index 6e26032ff1920a6cf31106b559ce97e30209c47f..a91e8b98306a98823ee30f47a79b26ba5b1596a2 100644 GIT binary patch delta 711 zcmah{&ubGw7-jqcVcSY2jbN&D1apbd%*@X0?5;6nlkHM!Q4&41F2T}Rw=^xZDTKSkN4g;-<$d7lt#_K~hG(erp)OJno5*mLw;_Ml}MW0cT7$>Do; zDI@lnV#STotz*c9Q|x0}8+OmJ9-AZMcCT-io7xcekKH4-MRaU4_4zODD8A?u-E~-%! zTnJ2TF?dydkvbpEui;s4!;)XE@qcfiH*{gWr4)j>OnN95JSi9!+Ex$M5~EhsPE0Js zI~I3ywRz1T*fQg{{_}%~!p!99!&C}ItW4I>;)JxN2)G}3p2t~GWdRF>^eT?;Gr^@- k!o__pp@DJXQgo}S#^_J8*1o#hP6ktHnZn5BCN2iXU+%ZYF8}}l delta 657 zcmew~g>lss#tBUv21Z5(#uml~6T4KIOe{BUJj}yru(^~skdfQKD8$IX%Gkon*kJQT zK1&pV$)WUJ6K^iRI)4QX*OgP;C}wMlcyuL#UXMp@AV>(0KAasT@%gEVh_#j+Z_t#%MHI z(ddjYNCApHrlymOMfA*}`l3yYK?-8w#$t1}CCJ&6_ZrV;G@E=-a?@mPQz>-}_nTTm zjWjYbfthAzFxkg6YqGbgnlWfPx@M!BD{z90CeP z3Z~|hBV3$0D~eLnxC|7`j5fbn F7XTRpxUK*I diff --git a/test/pdf/accessibility/pdf/role_non-standard.pdf b/test/pdf/accessibility/pdf/role_non-standard.pdf index edf7541df069d1b873f61c01f57b1876bf3c8be9..c7a55233cef31610075a9e2674fc6a3c48beeebc 100644 GIT binary patch delta 692 zcmah{&ubGw7-d=uVXY;C0jUw^&_L}a^W&SD-E-+_;~Mq^S+sH4tLPUU9|l?M?LCt zAZ%x|)F;T^-j_i{)0Hy~beej%s9WJsAuRnmTP_&|CTaf`Os;%4I9;>#?^DR%xLHkloT#h)FOt048=dQKqm+>8NwF<)q zxZNAub=+9#7=>U^Sr5emvVvh@ZOzzhtleoRnTf^t$d;ZiweC9vOP;<6-}WP-OH(5Q zR51Z*WvYP|XvFJ*Ae?xhgy40Lg%D64MN)|{tWQ?4|6fb&U|hc0UTc{c`$LwKxuqlv OriwG^luDB`k@E)!Uc96L delta 620 zcmdlxiSg@1#tBUv21Z5(#umng6T4KIOe{BUJj}yru(^~skdfQKD8$IX%Gkon*l_bj zK1&pV$)WUJ6K^i6vBnv7w0xOwiN-DrjM51Q#=$Tp%UFXgs-9Do4}=i!G)=Tgo=qNZ%1< zG@2Y~ct!)H2*oZ_Q>ZpmGYbQ_x#p97jU=$T+Y)HvI!3d}n#O0;F&u6RbGV@i+$=ML z$ucHclch}@Hy<|OA3MYXo#W`}&tU}en}Vs?PI^F((i#w;TX6C-m& zH)B@|S92FP6K6*gBNroA3kx?(Lq``QM+-Xz8-hw=xfB%igEOmA6@ZZijM?In#G;al UqSQ1lLvtf@6E0O%SARDy0F5uJ-~a#s diff --git a/test/pdf/accessibility/pdf/side-regions.pdf b/test/pdf/accessibility/pdf/side-regions.pdf index 22364c2c827e854fa6cebc37e51df63799fae94a..650e962b35d41e449f4011feb91b530037e59cad 100644 GIT binary patch delta 2632 zcmai0T})g>6wck1wpnd}k`fmU3<}C(3G;LB+!?YZg|cfYQedH?{1ky*Ei__V&=O;^ z#Wzi(Z6~Hpj5fCM!D!OZO?)u;qCRS(4?ZKppr7g*fz!_(;+C##Z;SVO!hc#;Knm^^=Hk8kM^1GA0s8%^v)iKn{&tS zmbS;O&wM`ekC1< zl2sTLgD6KKkRMVFj;M<8^Um8fF+~HyBx~y6(GZoWgeb)hp$8!jIx-;ix5N9O25Nw* zzM+~rq{ZV`cs!=Uz%&HbZhlssjk;3ubeeQOQ&@Rv?KIJ>DpuL_e!TSV;XN^^3;H>B zB$*11RSBwh=@g2mg?al(*Fh8jwchQctk~~I6)4tRy4shIZ!7jm=01w)P%$caB@OMH zUo%|?QH&@%YIoKYkF}U$x*0s^Qp3};aj4w6nBn_52Duqtwjj8%pa#>H#>o zInoJrzBkcg{vKI}^_RI+Ou6R9=rve;I-Y{!Ts%R{#u#q?HP&fHhlv@;twUCUDJ}m| zaDo^yegSYeg*_1bQO23L1{k`b!KlC)BESU*j&P%fTg*Qvk<*zV=DlZ;96n1ZpxI|&2<%mZV z_C$_IqRYlU(Sh+ST$81jm)3xk65q5I8Xaa-p*aQK@gplF5lpz}!YYb+J~hR{ND)HD zFSKUbrNAG>q-`gC2qP;|6^B$Jb_y$oUvZaXja9%e#5kn_3LU{1hmu4wtbGLI zSj-3p?@JX{q?A(^)r=T=A{sTP(zgkHQB8<^@M>6m+NuI)RI*~!kTGr%Lc&(YOn6qt z%oA1xnWwE_n2!%nkgy251mE6hFr2ce#+<{i!s&)0lNE}Pfpcy%2xf)EgCN!f;(_&mA9vR&^)%2c-qG+fx8#G#J6{ z_7s9!l@V?^yWPnNsVo77F52q5)NV1C*@P~$?}f|5jtJ#+;ddjNh^uH>_S#+L_bB(x zBg;DO!!tX%{CExbl+dL!%iqP$WC!}Wm&x#fY+okZFL>6=dW`l#1IoUEenERl`hQJk l6NGe+FTGwMj57S+ZFOz_{M!2Y!ix#+X-_8F+cP8C#D7|@h!Ow* delta 2499 zcmai0OH5o<7|xxstr;H$CnYj5aL|%6*vfg_dme-#9qC|S0cN09fhqDBN-<(7G!SEg z=}u#{^~BV)k<{111k>P+E=*)$bmzh@jEhD$CT@(TE?m__|Nk;GF!z!;i<@)4^Z(!f z_|AXt{Bg(m=#F#c(jLk=6RJ}iP?nI zfZ#$f*R6u43~DJWn4)EjNoJ}bx38u5+lIzYM+9M9J63<*u0EEvKRix+nR;ut!|eR= z&+Sr6s!fE0E4RX_JyGS9c7*M>Kerq#r>=o>!9U3Viu-S7?vKTk7ch3GQ*DuQRHYoq zl2sTrg)9dkk=yB{!)r49vi;Vsm@)xjBTKchaEh8&Qj}tg(1jF_IbJ|0%jvzp3wnU1 zzN%AgUW7+hcs!=7iD^iz)&8p68+4`RU0tN(WNGf~;tVmgCRdrd5%=HD?2bWSFwW7# zjp@LxMo_a&r>b~{+cyp$+J^$5*4txjD)wiO2F05Ecd}FQvSOd+c2LYz6{CVz$}rOY zo;$P;#R#*bcIWNN(Pq2S)dUfYpM0hmhtAC(|30dosj5dkRb@B+^obMqfzS1!c4+b4 zp=SF}|1#`13b?;Ha1GXLgScKDZnl^5cy=$3`(I8q+gxE8D%vQdQD<~f;6kiBxCHRp zU;v}H3cOo}(E9pN0AoM}0j~jcFCRe2tAH0FjP~xcXn%Kz*r!e-Ax8Y}G-5Xgnr-np z%muN(gB4KiP@H7J8Vt{&!ysruuh$M51#&+ zBKX&jwZpS-986(@9$w(#*{{b&uu?QIn+C8!0}~h+Fd+7~7rLN5&IC58ZycX!qJ{l< zd=%=#0~H*o%>xC#aIWlU6a7yHLqb$=$BDv=TOc|ZZlZ&UBxcjZc=o{Lk1=EHzmuOF z>$~{U0vVx1;wTgdBMN7$KsZsGh#(p-Z-KZ(<2@@7k7&FS1tN*rG*$#|+uBr5V);U8 zIzb7e)XtTf(hv}TWR4_)1^0x3%tDwajs2q3pMiKaC(O8X2TVdWAv>wK%}ysX;dsnw z4mpRcHMS*$871x2>EsHuujYhP#-Z3Sh8+!I9NQGagosp2U6d$f=ZSKbD_gCi5?}5i zL&c+nT1E*?q-@TpjPNnWYWX@S<&5LR*9K<7i&V@!A?@w6$xI|XQ}_)DF=!F)I(%6f zw=FYK-8g45!oWF?G6*K^{LBuzaTh_tziBgTjvXSv>->Ji!O5zo^q>(ZXy s9@(4gCSCt)QcMuiF?jBk6252fZ_~o!_=Uyb)x$kQd7`y7*Wa7?52(*^Z~y=R diff --git a/test/pdf/accessibility/pdf/table_row-col-span.pdf b/test/pdf/accessibility/pdf/table_row-col-span.pdf index eec14fa3d8d7fa6166b4a2d9af831d707b564f6e..9a05c1892a6fadcf5abba0a03fa1120c278ebf10 100644 GIT binary patch delta 2219 zcmai0&ubG=5N7S6vMMc&76l7?358xV^WMB)B?OY#f>A8^$MqJ3og2qx}o_q9qJ>(XVS-2fAOcbsw*HvrmgxvM&qEqjL*$Q9N1CE-wzIUPlLu zucBq2K=Sg@PF$}iwVS=c)8VrO0Y@uK`;|t%b~|n~;`~)#}wqW#?L-&)(>F_mT&}WnWwEGyL$_jpLvmzrv zGxkd-X@XKp1Z&j7M!*b|K**A?86y+4XbOHQ0D==0v(3v&ye>0?5VWWcxsn11WAIZ1 zKDIes5su1c&5cSbp-|_YFV>CZ%Z*_m5_O{`Q4YEpse5(8V>+cD^fN$MCgo%lIMFPH z5`_CKxKPR$VryI{D(ys96Ac**d(ko#oZwr778z+&C;Lrv zrqRn_B{|bN2w+V!V$FSvN0o{Vy_3N~Qf+~RJ}lp9<^3!M!HiYrH1_)B#?f*F@dT2= z%)bEPv7NO#t9+g9bXMyk#vzqsfXZW?6&|e4es(Hr;u7E$SLPmq1IYe%!gJTQA*hxO zP2AA7-3;!UZEZG#h9(l<3XP=xUzhDTNosfcZ+iS;p!2VRz2U>%;p^SrlNg<1Q?!~AgJ_a2)IdA-MX)k1T&L~5XFFxmAFtGpEzP38r(F98+V3Y z1YEiC1H$ZF`Ufuj0KuFR2l_WF-XqZmfk2AL;d9D%{PF(z9SKU(J#EMB+g27g+!7v=R# z`)hi0@8wQ*53=ZrZ|zRHzukMBf<&ZZrE}>D%U0!+^|N&Ng3g1)Y+%8M;zMUEca0T@ z0j6M1>Zt7iF_P6-SzXOes<0{}KpxrURhp$5%Gn?)jDa=gNMY7C6GU)mYIZpQf>#v_ z=5-~(G?_t&q^c7oR3V6sz!DeHV_wUq1j(uD(CENuqPFAElnK$YVga2Q7ne`E1pSms z0x4QCObHS-TLfN7N7#&!0}@eP6JdcUXlLV9GQ>_vLY5Q@)N?I z24!s_sP42fxtk?gLhVahE6b?pvG(5p5;7_(tdp-scUosvlUQ%{hN0xP-q|)d?Hg;< z4#hwRtQta&kE+gLRLnTC+Slj_(`M)Oj(=1!O{p?+@ byqwE_fSuh3+q=X2T1G#|wAJcvZKQtzPO-VO diff --git a/test/pdf/accessibility/pdf/text_1.pdf b/test/pdf/accessibility/pdf/text_1.pdf index f3daa44b0baeaff71e6ae03f5b2263ad63dec91d..71b32f80c5f6209b50eb14e04ade016bbcaad816 100644 GIT binary patch delta 375 zcmexwdE9D36T6|Mp@p%D!Ng8=MvILb5A!fuZZ72wWaKim3^BB@GB&X?*nEM{3YkAy zL?91IdUB7zJW+E61BLvgEG`=x1%02?y!4U`1tWva_JVAzHXx}WE;~CeuGG8~kQze^ zsA6M76BD?gB~;MD%m^lCWH7l=OoY*J^E5F7W=6xw$0e6?cxR>*D?}TbO)isio~$Xz zYvfm&3luO=Ff;|(6AQFHGdHsYEMyR?fMjh&QED2Ofr63I=0j3SjEu&UpGvE+m{}NG zPW~x9H`Bt+(%jkH)zHGy*~HPp+0@a+%)-Rn+}P6C)y%@u#lTL%hM+L$RACQ2D=B4B(WpNpr14Td# zV?z@YxS$18(8A0JE@nBoQA~uuGBY+dv~+beHZm}?Q?MbZB$i7- kK|eUNDpkSA5ajCOlEk8tilWpsE;9=gLoQWSSARDy01fa_ivR!s diff --git a/test/pdf/accessibility/pdf/text_2.pdf b/test/pdf/accessibility/pdf/text_2.pdf index 5a2abcf2f8a8926801efa9cdedd1409d680109c6..ac16626596c4bb9cd1589c488d297f851cf93ea0 100644 GIT binary patch delta 493 zcmaiw%}N4M7={@OibI7)?kW%HD6KqyGjm2n7=H$$$gFnZqR?^zO>~5)U9=Gjl5+!X zx&WC=FsMaPbRprs7R}HwOsjV1d!F|@FMQv-Pqq8&Ijmz&85#}K5rW3!$%2HP!D3AU zSU1I`8>>SH#?_x3lidVV=tiQsXb6A0MP6- zybM8pm}15Ph<(Ua5-{R3q7WQFCWfntxZ#rFv^tW2|*BGV2 zhnjPfn9jH>UvMKrsCY&ikTfw#J`s4Acll_ zkGgvUt8Ll8PK@Qa#GPk(Q;Hx(EN4=)x~gE2&V07YMP4RFgO(^Zb%oQS!3<7J6&Z%9 n5?X-y%72kMfH1pnT{a=%-j)0IQO~~UHBW%9VFqNmQZ>O3S(}9( delta 452 zcmX>S_$OdO6T5+tk%6&=@x)FwCPT}O8xQj^8f-4*4P@jpFbXj;urju=GTwZF&kC78 zSwtWYNqTaRz@%>{xdxB@{^L0oorTwJMnDIhh5 zmQcmUh9)L3K_dgGpoN(cT+9$EW@Kt)2p2S-+$ke3Y66u)w$OBPfuP%FX4zgwMx)6S z<<6*s6roscWD3=0Vr&dI&}?&y{0C;Bmfs4ROh!hN7byD!IUkfSF`7+2tg=+tuQaz< zA=*H}&>Uo(f}w(u@#F$kXU>YE)HE&w1tas#zg0aMnGDS)yQ!;8u2a94;b>}M;_7H@ zqTCd{E#Omn0UIfNiui N1BQ^Qs;j>n7XYlBdguTE diff --git a/test/pdf/accessibility/pdf/text_font-embedding.pdf b/test/pdf/accessibility/pdf/text_font-embedding.pdf index e7f75b5a3da0f3aa17298be245048176db6475a6..d724af9e97d1a6816c52b478dccdd366a6603f53 100644 GIT binary patch delta 591 zcmah_Jxe1&7-kev22T_fK@S}KK(M&XJG0rH3Au>bWZ^hbJnbY(l3h*ItYB7B1twsj@1g$Oy??x>`$w6foXR{==6jW8NILnnQ!5%mk_ zau|EQ8)-na#T*Qy1IjiiOcrB|wlR?0>VTk5D`V>0_}>}U`bXF;NLVqZ zzD`UbD_od(b<{}(t6O(ml`E6T&|jJ<7+)A2i7ZOGi{GnVY56boB{= zdZ|7t7#i+kGQ4*$yXWKbAi$uVoN-I|=p)0;T2Ht3cK7c3e%4*>1Ew0@w-+Ev5)Zh1 z)X)qi@SZ_0T5r^&PID5QZ0cyAVIs>@V zp3MP>=^n*N#*@r>pG%Ja#k}7dlf}Ki6I2jJ4WkNEDHPu}tz)}_NW#$rms2@U%ENRT zLenaHGejK>Ga^YN$On)sbi@(^MiNXNLW;$eu^?iLZ_A{=8KJngl_{7uqO=djtSAvn zp)gRK_0W$V^yEJwsVeeDOspAD+!@ulJlvQuTO~K{p=Ik0%Wk24DtS_Iya$y;q|^gg ze3hPnEYe2Ac`0A`R)@DBoJe>Sdsv!`>QU|-R3?0YiSlU&?zHQ!4Ms#3ftogb)-;bG zMl|7wS{MK>p6e0kyB-78ti-UaVMWhKqn(v}hc diff --git a/test/pdf/accessibility/pdf/th_scope.pdf b/test/pdf/accessibility/pdf/th_scope.pdf index 9d19548d7ce6ff42262d00f445b766a72cd2d8b5..68a98987b77291d877d8cd1a978845360702262f 100644 GIT binary patch delta 416 zcmZ2l|F(WY6T6|Mp@p%D!Ng8=MvILb5A!fuZZ72wWfU^B3^BB@GB&X?u#B?NPf4~) znY>Uya`Jk9vCZ84%#2(J`N}GCZX=LeY=4xQ# z;%07cU|?kAV(I4MVs7DLVr=MSr(i=+Ni3Iwf_`vjRVvUHP(T!yBo>u`?KLztG%?~* KRdw}u;{pI|o^aFv delta 377 zcmaD`zqEcr6T5+tk%6&=@x)GbM)Qpu5A!fuY%b*uWfU?n3NbRUGPbZXwv4jTPf4~) znY>Uya`Jk9vCZ84%#2(J`Ng?>|