From 8ea27ce157217baf14ae43f815ca36eda45d9138 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Sat, 18 Sep 2021 22:28:23 +0200 Subject: [PATCH] Tweak how fonts with an /Encoding are handled in `adjustToUnicode` (issue 14048, PR 13277 follow-up) Currently we only exclude /Encoding entries that also contains a /Differences array, which is the cause of the text-selection problem in the referenced issue. In order to address this we'll now also exclude /Encoding entries that contain one of the predefined *named* encodings, and no longer require that it also contains a /Differences array. *Please note:* This patch cases a small "regression" in the `bug1130815-text` test-case, however this is actually an improvement when compared with Adobe Reader and PDFium (in Google Chrome). --- src/core/fonts.js | 4 ++-- test/pdfs/.gitignore | 1 + test/pdfs/issue14048.pdf | Bin 0 -> 6810 bytes test/test_manifest.json | 6 ++++++ 4 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 test/pdfs/issue14048.pdf diff --git a/src/core/fonts.js b/src/core/fonts.js index 9dd9d3db3..19210e02f 100644 --- a/src/core/fonts.js +++ b/src/core/fonts.js @@ -148,9 +148,9 @@ function adjustToUnicode(properties, builtInEncoding) { if (properties.toUnicode.has(charCode)) { continue; // The font dictionary has a `ToUnicode` entry. } - } else { + } else if (properties.hasEncoding) { if ( - properties.hasEncoding && + properties.differences.length === 0 || properties.differences[charCode] !== undefined ) { continue; // The font dictionary has an `Encoding`/`Differences` entry. diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index acdf66ae4..3790b3514 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -431,6 +431,7 @@ !annotation-square-circle.pdf !annotation-square-circle-without-appearance.pdf !annotation-stamp.pdf +!issue14048.pdf !annotation-fileattachment.pdf !annotation-text-widget.pdf !annotation-choice-widget.pdf diff --git a/test/pdfs/issue14048.pdf b/test/pdfs/issue14048.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1cf071ee0e00004b6331c1601aaa06b3a70dba38 GIT binary patch literal 6810 zcmZ`;cRXBcx7Nd`(TOsm*O@V620`?Q8eM`g7%dFZYqSu(Bzi=N2tg1nNTS7&=)HFd zLG<3;896y$&i(G)`?vRgXFcy)@3YGMvljOqMP*@#2m$~BBY7t<0FVaC$_^>-VH!K>7ZPl++8d& z?69OsSjWi`i3Wg_(3VbCc4!+QNCRnkDf=zKoNnjh>ZV|ebOAy|e{oSnxmvo|IlDQz z0AasQ1*s$d-UES106@C#7H*fJ#s(Y{lV5Si9uEK++F7~Tx&mRM|3w#T>Nj0=6xznk z76^l4!{_SefZ5&WQFs8DQ zUYDW4WD+ip385RxQ3VLa0N9lQP+aWKF#ab40Fcq&?BNjjAGLNFU#z>vKv7JE{=UVb zSZ-h-6!XPC*fkdawH8H)W6Bv@(*OVS3;AVF3=X@r00tsNMS*ZQ;_|s%UzQ_w_1iWW z2*=38#U(EH{z5P^jE)#4epu|6mEZ5*dcRqMfiM{MH0&G85BvRvVSiz7>=)|+;(vMZ zx3`#+|MU;b!1SNuz((SCabS|@hH?R7bMJ;yL}C6JC;;g1f)s4ufy z$GuuwhFW*0uN}5$)M}o3cNTTy&G|8m5MJME9=UI}+d9v!mU6b%wczyDsMdZjy~?T7 zSc^(9d?Z3EoV7*Sg8N%koWx?<+-AH|vCztfgKG+!_D&ZL@ViRPZ>&25IAxSgy{*9_jQ{PYo- z4JK&ZU822MAp(Qjpp&AZggoXYS&sn!l`)tPU<~g%h%b9F$X^rlL!61oq4#~3e^+aolsSsx=TP2N zPiURs<>)QDos2pxjdPiMfmg{=ic2madWX>CIS2IuZ_&o&4`v>Q>QgBF6cI@aUXQ$ zpuo-YNA&IOat!1*3Un337S;mU-b9_NM9cHfmc$>Au}fO#oJJ)sm_H6%9*mP?s3uZY zJ6NTcepyL)zMLSiL6*b$GpGLZcDlqYZi+u^i8Y=_7_T?3&t4{oV{hVU!puEQ51BVV zPitwS?;}P9A2fOZT9vA8nn4JkhL3{y(1=mRTtoJ^k0*2LBZoz_Enif9_oRl`?{WBV|8^mpqV}qwH?<+L6W)o}eTsr)0U%>O$7y ztK3flTk`F@C-*#JohZWe(0Nj%12Nh3MnZd2pPhM3cn(Q~9S%w(2}C(mdhXm>T)@%K z?2lcw6LiluGGLYp`-sfN5eZ^9^R*ScD893FxG~l!xoo~5#cow}-*YzMC+_8 z07rcbT{EyZPM9P^4-{WnCwsPxhO9^90JzoZvdO9gpPX`k9~tA}9#z)*bUO&~o%+4d zM@_ptID_hgrc&64#Nbd}UT^FEhc0yJX0*pgV+(hmeLU+1F9x0NQ-mOd%P;D&Pljm; zp7B~2QMCXqS~5Mr1g{~FEqG#Riq+Jyn!_1D_WD2x@dehJ5?}(cFBExO^!li8Pb_); z{HPbX#yBo89-ayAX>#^RApBmdhqZ+N8hu5U_81{f^ zfp-Ty!!yU#w)`&|#_M$aXg*LHGK?6=d_5ojf*Zf6Nxh28L-TrDr>%I948{DFK=f1b zXhU<47qJ5Yy3hBM=Q_D5NiVFd9CgN2+QA;cehdwi+T7VpDqY$we0xJC@*%#wXW0z> z7II`{4dcS2cc z&=U*8@up5iI|~;V#g@5Ud>|D|Nu;f`xZkN^G{mcK_q649ou~P$MJcbgyBE-sfPki_ z@!vXoE?8X{%S_)K;t0xB5_ssw6J0no_{@#xt@F-Gcrowvo}8{f4<87npRIq(eN;ld zl2FY>LkYimtaM}Gp7m;0P4ZQ5)!p9w0BKnQS!k?-*Fn5falQ*{cAUVLmt-?Z=ZV^c zxeCpXYf=cqhc|Kzff})QjeQHdRz?N1mE>#dsC%o13&%^c!?gCIA4F5iCnjxTRCWSA9}D&xvPj=2dPg67c3I z1;+B8$*Cj^$G`0n#!rF~ICJlbmGP;g-GmdlpN(@$h$fkE#0;=Bzc(SFX?s0CuYA>w z;~~SySAmh^BQ6ar>7UfxfjAOZ*Vyv_I^muynl$kxyU?v6n)q1sTsx6@zZD^ zq+hpDt7s~>1<`x2V9MtWp~)*GUFN+GVkU(5dmKI)&T9o3E3T>W*x~#7O!(3e#$R8v@IDLydWvtNrt)DO#OQu-;IYluT2E>Dr!pk8 zO;LK)GCFAmV_6*0Bb%ZH&3@8+c)NkxG(wq?FB`jy)wRg)vpeQUMGY-@ovCdh11i*d z4oM5j4z@$u@(g(NvJ99ff?^vjn%s5OynQW=L-q*7Nr-5tNV;;)(By*7LCR>_r;N3;JE_a)VU-ygMkPC}=$P1Rb-P6JU?9FeL%w?Jh7z8S0p~W3YU~H}V zGLPwV^7sy&VvI$+!b>-N=mGgbBsf1j_TBrz;dm+S8kS0xoDTYN^FA4 z`_pB{hD+1O~5f3?km%~@MFc*?!2pFiKRA&`>lSmuhk=&ub#oyP?D9awTBF?dB*nG=2B119{+93;!i7e2__iI>Me{1VN zOHQ^q$ye`-T(>he9AkpAX{>%33&@z2-6Iu&sZ)0*#^P-h=%GCZ#H{k*^z9n6r0HUr zxj+*8{s(=qy4cR(=ia)8Uxg~u3~vp~X}+bCG=JIZc9j3*voF%PF;Ez=K*TytJW(HW zOjhB~=}=e?e$F;Qcv1P7`C`C+&bPyHmFLlaLk#B%y+Il5ZL@ukr#ZDIvaW&$hjWMu=@N{1dq4n&FlmCeYgo{Sc!oTh`#@WCsW z*6?C%rn;JIpD>}HcBF2rZL8r<-7h4j(#o^Y7+$WPVA4e9^l!(}f9=fHC7$B1q4Iy( z!{1A{v@4mT{k8{h%+1<5S%)j3$%vHcRa|vghMeFmuAJ+)wVqN6#I?|5c~@L|f?Ptv zj<)HKFTv65oc++f$q630QsbM%spht=+;b=^ST3aKPRT49N{56{&*DkoB5G! z#U`RuAyy)s)W_McJDvLjomjbY>s;IQ;p`zTKz>cL7(9ZGY>9l>d)h>RoO|uNT&kOU zInjk(VucU;`yJ-O zX>R{C6A_=7cfpdpKM~Gjh8`c@Z@4N87+QDWyeJl|R&?ru-?9bXe>XHE zJ(g@>Z0K0T-znG*4R=-Bj&77iR1fXOz*>*P_qA;o?!Vy?hjDALk;D%8nH@A`3x=Ex z z%{Q{jk<1`@uJ7KaNr09hGRKdiM8YrT0lhAVQ(GXIct3H_kjc2g9pd)wuA>^8x77Ar zBSP#(q&u&}26*VW7riXl#H1T0m>05wJB<4!c%wE&hjGbV(&-aq`{Yc}nIcdGHdzDEyhWB? z>p|io7wb74+HyogcV?q>tCy(7G<;e$dyZSYEwC~}UEkV7C-pi@FFV0x2oz*sQi7&3 z9AD{3$30u?^{FH=eq&JUsAKi5QAYhe`%}KNIMa{UJer>&)Fs878=$S%! zpRY?DJh=|YUdDMi-naYgd|S4$R}2hCX-_2LE(b{?4c4t^`|NEvO2 z7ipgx?BGnd-ZQLDQ1ZrKHa%4Vglzo?dEcA#OfOS2t2cqAEmJv9TC{Ij<{f6vMUYF| zJg;A8qeJYA=~v-N63C!p6J+Xd<@q*g$2+K$_npRWr4uM=SCU?5c$pU7uv0uz6~tj| z^TBJ^VS;m$5H7edrmsIPURm40bMfqm4Fy86~U9IjyYt=~{x` zjC-?3?p9@Z&$XK)lLLJ#Is}02$cnDW?N#e8GcwO%zlm0FNKi=UOk1C;}dpL6`lj_eHMUPn#`&=!~1o2iVcEVk44&#WBZI^R12Y(?OHM9B4zv z=(|67!8VmoK!=`tO8bTI(#b8u2@Tns^-EQAXN^hMh9mn#zPIU??`%1(IM*Mpm(w^r zqV@Tb7C=)HI0H_Rbwryk4kg|Pl|@a@?rjYp!W2wX`ChBq$6JUbwCQpZ>7b>(273c^ z{K^}UWF}W^L^WHhUk|CYhZK)qpOm^gxGge;yc? z*jKO(X!6Z!b#I+ft1GFae1v-e^PlpnTDDgkdGRhKudFFA>)pmghWW|oF3OCfn`M3A zkh`5eLx5#k~0sZ|AYqntUf z-eJJW#}@~!9!-E^GgJ#CMqhVQ`7KW~_EqMse=etN)G1S$qi+CpOY``B$Uno`M(@va zQuujAk>0duu*wGA#RZV=hGp^wtA_~bzjzV(lTP(Ih0Zrm9B-gus%ZhVde4sT?7B+m ziz(9NzK#P&@0%L-1rb-3hImpeuE!(^(kN*0O!@ldZ*|&jZQj{aa%P`QAUklPJPuH&Xt4vW=G&yLWzi7X3rC%N)GYL*mpnlKCps1AkIMO~Y7 zDYhms8IaB8EJ#Tc|HRs*G!VNsaa7$C=RCw@`K;@DNr|m+)2kKRfP;d8(NWO4ixGS0 zi7wZ2P_ltN5n3;;8=oVZBjI9@^5X-p=u|(}6uB%^$Klj+%6*$hn}{W`MW2&iI_ESQ z);?eH>--WrEv2!ANp5u4ws)eGPG|A(agIb<=Y=%%Oj5N{rNz$)@!e{B)*8WF&6{m% zd{PgC?Mvg8!!L|(DRt2GT|Wg%ZSs4}dQaXzZS7-S^jDR5JvNFDUvjKykfiULO%~1z zw$^Y;gUD3;CH`R8Yp8haf^fobZ}I8=0P!OU2g5h V>V|Z2y9^Cn3?d5P=2p^D{vVWCysZEL literal 0 HcmV?d00001 diff --git a/test/test_manifest.json b/test/test_manifest.json index 320cb303e..008196a58 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -4301,6 +4301,12 @@ "rounds": 1, "type": "eq" }, + { "id": "issue14048", + "file": "pdfs/issue14048.pdf", + "md5": "770026875a93dc44a187905f4dcd3de2", + "rounds": 1, + "type": "text" + }, { "id": "blendmode", "file": "pdfs/blendmode.pdf", "md5": "5a86e7e9333e93c58abc3f382e1e6ea2",