From 95d9107d8bbe35b37e56d090ea37136128fa7775 Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Fri, 1 Nov 2013 11:33:30 -0500 Subject: [PATCH] Fixes reading Type1 FontBBox data for usWin values --- src/core/fonts.js | 27 +++++++++++++++++++++------ test/pdfs/.gitignore | 1 + test/pdfs/issue2833.pdf | Bin 0 -> 5615 bytes test/test_manifest.json | 7 +++++++ 4 files changed, 29 insertions(+), 6 deletions(-) create mode 100644 test/pdfs/issue2833.pdf diff --git a/src/core/fonts.js b/src/core/fonts.js index 5b107f8e5..f249e229b 100644 --- a/src/core/fonts.js +++ b/src/core/fonts.js @@ -5205,13 +5205,21 @@ var Type1Parser = (function Type1ParserClosure() { for (var j = 0; j < size; j++) { var token = this.getToken(); - if (token === 'dup') { - var index = this.readInt(); - this.getToken(); // read in '/' - var glyph = this.getToken(); - encoding[index] = glyph; - this.getToken(); // read the in 'put' + // skipping till first dup or def (e.g. ignoring for statement) + while (token !== 'dup' && token !== 'def') { + token = this.getToken(); + if (token === null) { + return; // invalid header + } } + if (token === 'def') { + break; // read all array data + } + var index = this.readInt(); + this.getToken(); // read in '/' + var glyph = this.getToken(); + encoding[index] = glyph; + this.getToken(); // read the in 'put' } } if (properties.overridableEncoding && encoding) { @@ -5219,6 +5227,13 @@ var Type1Parser = (function Type1ParserClosure() { break; } break; + case 'FontBBox': + var fontBBox = this.readNumberArray(); + // adjusting ascent/descent + properties.ascent = fontBBox[3]; + properties.descent = fontBBox[1]; + properties.ascentScaled = true; + break; } } } diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index 8463dee42..c330cd14a 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -29,6 +29,7 @@ !TAMReview.pdf !issue918.pdf !issue1905.pdf +!issue2833.pdf !rotated.pdf !issue1249.pdf !smaskdim.pdf diff --git a/test/pdfs/issue2833.pdf b/test/pdfs/issue2833.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7f338ec0790abca648e83d9e9722d0af85eb1a12 GIT binary patch literal 5615 zcmb_A2{=^y+jX^QvQ=)j%1LAiGiO#~XJpI1Z(%T)jBRG@*}Ae6AtXy=36)BcrJ_<% z$W94^T+(8Rw4nUY7`po3@80M6zUQ0gIq&(s=iQgz@636{j5IW5Kv^6N#Nq)2;O%q_ zrl<&mn+5rh062k2CsMrKU~nU%8;J&hI0VFE0#jCok-S`(tgI)$3a#+M;QAyNGEv<- z5U_=05C9T^05AyPC=5>U_Vc0xAPjzl>_UU6AP!_|g-Gl5GN1ijFVhn$i7CG73fzQ5 z^Y)`UL*6mn*7SyGD+>@}K{E9+wXR%{VJ|u)%ZvlHM)?^BllND9OkFUzsh<;lB^S($ zKu)U@X`~e^a2*0cO<((vK9TOOL86h}ykrR4GA1N9KMIj5b2tz(MI(EA$$$u!TM&;k zmFz?JrUD?EWgo6drqbvHcOn&lnDmINYY;03gIkha=s2qq_qr z6f;B`ok}8l!qm-RAT!~BnFeGUTv@roBoyT(0kdPU!)DClt+K9#zv9rEPFC%iLH^}4 zD+U9iC)5@Ho4_eVHyVIuNvpHEK?Z{aWKbvs5}M%&t(QIWy~ufkGz`eY8nr zH+L4s^npo{!D3J_xDM2iWM?%mHwuZFGgCUr(*lr#2v(~iXePo;sVRvLNWh(-b_s+# zQHjo^wL696N_Qf=VOdXCF#2C>PqNEj2;B!xhI+=0N~E}uX+9KU5Zs5^f2%6MUogxs z7>2r~Jx{|a#kB*ec8(P&vY z0Jj3MXsj$6U_l%X3Hi%{SR6_g1N=M0$zhrND^L!PhxD-EdRwe0SWpgwgZy8GAjJJY zUF-C$*ZKD~7KesB{6*(F{TMugnX46u$1rOGf^rDRMGO`Pr4@^jgM>k7`$AkG1}O(6 z`Cl;vh=6hou^=HimJXKMe}W(yfnw@LWAM!4tlC>~Vbzm=xUE=N6=UTMM1UYvFc6Ie zSBx|J;=iAP&@&7~|7VB=^E;BnFLN!=N|B+7dcs(aiIg zOrevg09=zoq?0sA&fYGhb#IKoR|ytDimA)HHP0p0##Z7;xR&@($>!7#2SZN9X9TpM zJx~WwBpvHhMopa;lgcf4lf`t-sf+F})F6F38U4Yx*sE%ip)wUdG(DF+m;L5=TaZew zC0U_!vr}Z=*GLOqB-?LYCj{BJB(`{QYd0>Y>}U6gMNJ5+YIFc085~J^jiyg|_<18d z)DEYn@}PO142y&qakTT#YydMOxHx>&Q5)oVw`_HcZtywktW*-aBjO=VO{HDfaCgTK zi>J}?mp0g4n3g*ju^`;Kw=ne3#uDoGl8tsj94GZ$HuCcv%AeFG4tD?-ubi?NeMj)y zC@K}f4t#XqBNZVeaBry|&cEi$S_TsytP>+6q zXE#@`;BsT?eeo%=0!eZ`mXSIiKu|{0%Xs&n>r+ZN_f9-Ub({l7~mKB!?GF zmD6z(n-xs|&wj_6kc*Qs`M!Tt&je^J3#k+G9u6VS*Nt!|u{#Nb1%`jmO=SpkjHYvZ z!evJ_F6p)}Cpa2~zt$Ysq?oaBq02~vBga52-%159dw48Ubh(6Uk<>C{s5vcOz_y$M zeodSE<6@|7q)JcxkNmKdu5YIosu;Nhjr?lP>hcnm^oEma1w5+UiqVmy=f2}7ruW|; zthrS*lJP*TWH&GD5B0nURcxQ`b1i4h{t(V`A?px-69k;8>+RKKtU$CtmWAi#~K4=qo>NMelPn< z&$QzT@jabdNLii%kFZE1yoYS7)Vqckl}aN|ExC{EaqtZ?e&6#*YH;93wv5=JJ0i`E zg_CKr^0x(tb_i!p$+&b|bo)=&^HsblCZdewk5P)d7lZG;?aK1_B5p-$6|mk`89!M% z!(M7!a@4XkBYRixlfvL<;ZJ%)rTZH^3Nb!jbev6Rmk!OQtRspc43Ax|-)kG(NkR z*1jQNF>XssleE>~&Vx;iGZ8gq*u5Rqo*xPohCS-0^QszD49b(;J}#ZS!1cn=TJTak zT36_g)T%pnPF3)kS9V6>LRo4-srTfT%Cil{YTAruYO||f+Diyj+~4heKhFHCL`g>m za%$vaxA8vn(#1^lO`36xJv@DKHc_j6+-}p-mSl(6CIRgePNVFDJSW6o^cD#je|>z_RZq4) zD|wsgLi(pSmF!o0a^rT+i=-inPnt}|6BI&vMo+c|EHJ1_I~qb7#T6f)o^65k_FDRK z5B2Vme|q^&eh1d1Tv^im>^rwZ4w(hv5@lR{66O!F2b(|L{^E7)NB;M(FK1`FlRp;| zWc06ks~aC^zfrA>VB~Y0b`QS%FdduWXFolu@;o6}T_CkXzHzHgWal+yFseez`9O+B z@)D@*n(K9qhHk1VytKi~*QIhomaa8-@5%9wjxQeOT+$0%eD?*Ut&ID^L_(?_%3ltS z#vMH%a_q!JX>fJ7cUJ+&H#Wtk`6xl-!@j4_T2_7Y!A*X47!}UEo6xC~Y|W7MpW64H zqy9hu`^{nJr{@NOLocz9ofEVK$MbG!Zm}kXrj^+;5(-B$^~`l#G{eJ=el;IEI~HU7 zJ>8td`~7i#$PFLy*?FaA?_d$G-Te-|`_8u|#!qWmN*yV~mLIT@YU?%r-B44p{pRj? zLAkdkUAxt;;Ng!|&g>jLF1B6maBg}@2&_pwG!pL#kI0q#eie7g|~SZ?Bi(l<1on_{GTm~`h+i9Pn29n zDTDgnJWE-}_xi9Gm!qZ5Ts$<{J(*;u@YYqq8@*F9ti+6`{QB_VT}`!8%jH|?pt*}l z45dledb~D0#k4K-xOlV!yZFFUn=^XmgPZ4Y72EC%pWV2Ooc8P#e`KgX(mop)aFlUG zvZ)!dH0a}5{WujyF;oT`-l2@&gn92;@wU@SM6Jv zhn*Gk6j#xft}M2UvO!f1^uA%A{Ul7Sc!kRf8!o%rqjk6TGEaYT_I%uU3NMGjtXtOnT!%1z=}(LZb5}s7F%DKX*y)d>XgxmPc|+p* z7kiuQGjfBsEvm8!D$bX0kJmkrWXqcB@`Xpe%7vZs9#MMntSwl`#^@zmkaChoA!I9+$U5>MA=2~&*JpJ>+XZS@qU&bCgXx77C zIQ_=@ZbC=?iTz>EYnqCIDx_|^J$f7GrUzqK~?$NV!~ohNmPl2&?`RIDe>`CjVp-6GZjh?-K>Yqk5C3l z$-|2?J8LNUergQK`zEEwEsVZzc-VUBQCeEP!r6(}DY}lXA7NZ!24VuLX817S;i+aC>W7oI zX^wTDr`o;mLT0ULT-~{0wYJ7RDUHKHJJR-7=XrpKEe))ODL2ZZHCis3+1(8s-j+01 z>Z93CF?A`hv5yfARe6N#&_If0cAe+_T$C7kp0vd?gX%ykE`N7&R6eWOfoHRF-lAVo z;fQ>6kWdECd_X#i^0<^OQBa{{y#Cg~O-T-+1=3w!++1P3CH8x-zC1OYaou`ofO;v* z?fsk)hUOE)$zdM)_(kE=^NL{F{6NmU&e)Ycx7o3nUDBbK_xbiuocelENh%H1!e*A! zsP?9+Oek%0Pxf6(utkqjWyOS)aM14#*xLF+>9gaf#HT;Bq8amnA19MWp8++Cxv#@7DZwH?(% z;knk|K3vGM`qVdN;l7ooQcq>`k8>?;j><0-(L~m$Xz#ZjBzrDPT-{cCB!utUSo?vz zdY3Vui_T|cYOX1DGw$7-nSZkL+uV0*%8_K8_^=f_vUwq1Thq=yMYf*%jS;`U+5^r- zEB;5tJbe3hTaxyG*ees;1KKi!s|H70eNhJI5H~%o8tfZ(rFe^8^Ka0rM}!&dEjz*; zReOUUuYA^FAy%|a;^>v_8Hx;|@%z{MS~5*xCQoM=nU;yVp?SVjuse=hEURTcq`o(^ zU?>O7^6B8*O}}m&+iOtUbX37Xqw<(vZ(v{6d&6$S6t{8<(c`a9cu;xeci99@7VP+# zK2`Qg1^2{010$hOlp{BHYzO~Pjn6ILYY%76>`|X}+_B(nONf&$6z=33`6}RN`-tPl z55~4kxL9TaGGqGmy=@ns9Hd=&?j-iXFOd6*&87>dJmFE{+>KfvWoGq|1cWS7$#6a$DbQN;iL673Q=WoNSKq|=