From 661233ade9dfa8f739a3e2264a0f2508d2bd060e Mon Sep 17 00:00:00 2001 From: danfickle Date: Tue, 7 Sep 2021 22:47:14 +1000 Subject: [PATCH] Fixes #752 - Use non-beveled borders for collapsed table cells... with solid style borders only. This should stop them being anti-aliased and problematic. Unfortunately some tests had to be re-proofed for this change. Additional test kindly provided by @gandboy91 --- .../openhtmltopdf/render/BorderPainter.java | 64 ++++++++++++++---- .../visualtest/expected/issue-732-no-bfc.pdf | Bin 1860 -> 1922 bytes .../issue-752-table-border-strange.pdf | Bin 0 -> 4183 bytes .../expected/replaced-plugin-latex.pdf | Bin 16898 -> 18670 bytes .../expected/table-cell-borders.pdf | Bin 1574 -> 1600 bytes .../visualtest/expected/text/soft-hyphens.pdf | Bin 34491 -> 36917 bytes .../expected/text/table-non-paginated.pdf | Bin 7144 -> 7410 bytes .../expected/text/table-paginated.pdf | Bin 8352 -> 8722 bytes .../html/issue-752-table-border-strange.html | 38 +++++++++++ .../VisualRegressionTest.java | 11 +++ 10 files changed, 100 insertions(+), 13 deletions(-) create mode 100644 openhtmltopdf-examples/src/main/resources/visualtest/expected/issue-752-table-border-strange.pdf create mode 100644 openhtmltopdf-examples/src/main/resources/visualtest/html/issue-752-table-border-strange.html diff --git a/openhtmltopdf-core/src/main/java/com/openhtmltopdf/render/BorderPainter.java b/openhtmltopdf-core/src/main/java/com/openhtmltopdf/render/BorderPainter.java index 2cca61849..a4d2fe424 100755 --- a/openhtmltopdf-core/src/main/java/com/openhtmltopdf/render/BorderPainter.java +++ b/openhtmltopdf-core/src/main/java/com/openhtmltopdf/render/BorderPainter.java @@ -27,6 +27,7 @@ import java.awt.geom.Arc2D; import java.awt.geom.Area; import java.awt.geom.Path2D; +import java.awt.geom.Rectangle2D; import com.openhtmltopdf.css.constants.IdentValue; import com.openhtmltopdf.css.parser.FSRGBColor; @@ -81,7 +82,37 @@ public static Path2D generateBorderShape(Rectangle bounds, int side, BorderPrope public static Path2D generateBorderShape(Rectangle bounds, int side, BorderPropertySet border, boolean drawInterior, float scaledOffset) { return generateBorderShape(bounds, side, border, drawInterior, scaledOffset, 1); } - + + /** + * Generate a simple rectangle without beveling for a solid border side. + * Turning off beveling should disable anti-aliasing and work better with + * table cell borders. + * See https://github.com/danfickle/openhtmltopdf/issues/752 + */ + private static Shape generateSimpleBorderShape(Rectangle bounds, int currentSide, BorderPropertySet border) { + if (currentSide == TOP || currentSide == BOTTOM) { + double x = bounds.getX(); + double y = currentSide == TOP ? + bounds.getY() : + bounds.getY() + bounds.getHeight() - border.bottom(); + double w = bounds.getWidth(); + double h = currentSide == TOP ? + border.top() : border.bottom(); + + return new Rectangle2D.Double(x, y, w, h); + } else { + double x = currentSide == LEFT ? + bounds.getX() : + bounds.getX() + bounds.getWidth() - border.right(); + double y = bounds.getY(); + double w = currentSide == LEFT ? + border.left() : border.right(); + double h = bounds.getHeight(); + + return new Rectangle2D.Double(x, y, w, h); + } + } + /** * Generates one side of a border * @param bounds bounds of the container @@ -328,23 +359,30 @@ private static void paintBorderSide(OutputDevice outputDevice, 0, 1, sides, currentSide, bevel); } else if (borderSideStyle == IdentValue.SOLID) { outputDevice.setStroke(new BasicStroke(1f)); - if(currentSide == TOP) { + + switch (currentSide) { + case TOP: outputDevice.setColor(border.topColor()); - outputDevice.fill(generateBorderShape(bounds, TOP, border, true, 0, 1)); - } - if(currentSide == RIGHT) { + break; + case RIGHT: outputDevice.setColor(border.rightColor()); - outputDevice.fill(generateBorderShape(bounds, RIGHT, border, true, 0, 1)); - } - if(currentSide == BOTTOM) { + break; + case BOTTOM: outputDevice.setColor(border.bottomColor()); - outputDevice.fill(generateBorderShape(bounds, BOTTOM, border, true, 0, 1)); - } - if(currentSide == LEFT) { + break; + case LEFT: outputDevice.setColor(border.leftColor()); - outputDevice.fill(generateBorderShape(bounds, LEFT, border, true, 0, 1)); + break; + default: + return; } - + + Shape s = bevel || border.hasBorderRadius() ? + generateBorderShape(bounds, currentSide, border, true, 0, 1) : + generateSimpleBorderShape(bounds, currentSide, border); + + outputDevice.fill(s); + } else if (borderSideStyle == IdentValue.DOUBLE) { paintDoubleBorder(outputDevice, border, bounds, sides, currentSide, bevel); } else { diff --git a/openhtmltopdf-examples/src/main/resources/visualtest/expected/issue-732-no-bfc.pdf b/openhtmltopdf-examples/src/main/resources/visualtest/expected/issue-732-no-bfc.pdf index 8b0efd53cf9208307c86691cc9588ff92c0d6751..e4c56d31aa668cde3c6184273623019fa38ac2b3 100644 GIT binary patch delta 489 zcmX@Y*Tg>|pVQL7+{nn-(8y$CMKU9^shPp#dyE$X&5iX;j7${_jg9ooO%-yufHW4a zi2+D7hbx0Cjmykb&l02rB9_YqGXbh*@&hL6L<2ozuzFOr5dBaa49)c{fNBu>p#nK@ z0}WxOz;qz-C;KoS1{RZ7u^BrXo4Oj9SsFRJxj0)oo4YwVIyoA< knOPbbJ3AQ}Tbdi$DcBHFGFgFLip$i%f=gA^)!&T^0AdAaA^-pY delta 447 zcmZqTKf*U5pVQpH!qCjb*uZFGMKU9^iKWHldyE&1%uMwxjZ75`jg9ooO%-yuj4eSl zoSVUw#$|4-X97}UVxR}4awq?1lCC$`vjDPlxX`sDt2Z>zGX`nk0-6od59Pz{Fhn;5 zE&wtGRTJD0h$B?shM>6{*@(&KSQIw@VQyneGcZ>$00D(OUM?`hz|g?N5JSw!#0*o+ z!T>|e*w7eL%*1T+3pQhC14k1xV-rIYS3@HsS4T?|7eg0gH&+uEOBW+YCv!`4I|Um; VN+!p#OL3W)m~pA9y863u0RWo1U)}%! diff --git a/openhtmltopdf-examples/src/main/resources/visualtest/expected/issue-752-table-border-strange.pdf b/openhtmltopdf-examples/src/main/resources/visualtest/expected/issue-752-table-border-strange.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ab998668cdb111c083fee084089454091d6115d0 GIT binary patch literal 4183 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 K^z_`WdG9bBO5u95CV*&usE7Vw&5d6 zq7Yk&6e24&oR3H(A;}jKmcR&QAqrvnMULzbe??Jnr2L?O#ZSHxk^5dPUE={^$?DOq zbMHO(ocmtYCoe3V{n5gOS=F*aXKGKp&=2phoEN_LY2NmNDNZh&Uz`S5SZw08Tn&d8 z3s_$q)m_t>_(ot`rteaYF~jqVTX-o~TXbxENML=@z<+Xj-7$S93*5#=?$+j0;uE6d zn$v)u`C(w%fy0ZumAfa;O5?MfhKq$VKFhD;U%5JNp^|UY@414GMxlXkb`~tg*skdD)p!)4L>!u#jGe^7@Cgl;1j8fC#58sJJL zk3-@TYPE7y{8(AT&!xVQ7RT#l^0KUAtt#S(q)XEQ85s`g}>oph#R8Qfti@m{$zP25e4q-n68q{ZF4Pn>6a^otA|9Q+JMF|g4QwZqa!n_Ar@2~7AJWi-Mx{Qe#AIUB9m^KJ z-jLPU^)!Ls38*VFO?pF7@vO3Irv zG<4dXwkXVpc!P$0Xjv&ZeBn>ETR0>edlFkREn*!rksU^*1I}L5Ra|O{TdZNUVyVkt zlsp$Tb~z1f<9b)dL*3r;4pEu859kU$q$T`kw}FRSBCaSyoYmw`Vo5S%eBJZ;E-Ovk z)>4ZhT?KTfeqU>?vnlxSbRM0_l+I`N49_FU8Fr#vZY8@D@LH=a&0#ZK*JW)t2kx=m z8RHR6hNds$nx=HJwk2{!=hesS-9A*kuFf&pCO_zCc%~(r{7_^m@p0m-DwDvz0sIix zl~tT>DY)EK(Wn1!G-YhH8~mLRoy=OdiMzY0LKmAY{*Jc0@>+DLG9o2MFxx-&8t-WgD3`yah9To=ZLOZePLuMhhSJ2L(CrkazK*Otpui~#mX*qfwq_nqjW3bAC*%BJ%pHkDs0^E!3>6$33;5kY_L&e#YdfG1j=2=Rkp_}=wS&;KNu&qHo%xPb12~AK%`%>5Mhq2u3=-CY(`ozEAP`JN;p>V-;uze-VRY{*Z3->115oVKw3g8 zz{jKRo>-Fvk*3TijutAzA`Z}go*XE6dsV{0Q4`->k+u1-u`Qf3ezT(Bz^H<6kF)}7 z?BL;*md+?=WJ?)fW2_iyCC-$4V+Y9++fi%LPIF$oMZx)@JXbqPd-Gf4$?!Ql3_`v& diff --git a/openhtmltopdf-examples/src/main/resources/visualtest/expected/table-cell-borders.pdf b/openhtmltopdf-examples/src/main/resources/visualtest/expected/table-cell-borders.pdf index b05a35765cd7c516af50b09802d9420284aa5f81..84f5f386210f75c605e149f633be43ae2abacdf5 100644 GIT binary patch delta 254 zcmZ3+bAV?;4!@D1fu(`Dk&&^Xk+HU+!Nlr$JOPPCsd*&|MhXTBL6gN9l_tA0$}*c9 znr=>Kv}fcoH&rmS)Uz-K(z%n_ndK&%Fv(7Sz$C(~OPG&7EDHP0Wmq9gU34ot(^F4c*+Fj2vAJ%nU6Joa_{A2r7x? l(htt8N>#Arva{nVE=epZsVGWK<1#cdv*1!yb@g}S0sxxLI~xE1 delta 221 zcmX@Wvy5j#4!@y=p^=e^p_zfPiKVuo;l%2Blhqj&IQ0V(i&FDS6pSW2F)A^eSy*mP zXS8RW9LOX)`2v%^sEMA1vAL;2E*Fq6w1jYSCUY>$ZMJ8&WzsehHz{0PG_&S^xk5 diff --git a/openhtmltopdf-examples/src/main/resources/visualtest/expected/text/soft-hyphens.pdf b/openhtmltopdf-examples/src/main/resources/visualtest/expected/text/soft-hyphens.pdf index d42dc0db92dfbbc28b3f4a75edef4400e9dcc4be..3c0e2cd1b0615c2afb2c7fd1ff0d0c2f94e3c916 100644 GIT binary patch delta 4644 zcma)h-lYbQ;n_Kat2mk^RHq^(LJDIiq|gaoBkO1+^8 zkw8!qQcxdA6Vm((qE%>E)rKEh=r0Ac`m=RIPaFCEGU?rHC{3jAwjl z!b+>L&z$d^|2f}p&U}9E`0O9f%${71HyhnXTh|Sv)w!wJc=Y@41+8wYfp5+{j?V=7 z>iULev`w{Tv@}CE8%?#x4o#-kXp;%4fPyPCBKe2Ga#6ez;ghYlX6g1i*Xi+yh5*O& z?rOcIb&PhatM+h)5pg;aENnZ-Y6vv`i-hWS1BY5ALYCM00*tT35(PcV<00y2IS zC?dhKd{Z~H?w}-B+TWNa_C*E!F(TmHtc*-RxN$vuf-Q)1A~pr2X)#|56>&Hy<6nIVZV@f6XOGK=hM@QLI+1 zc3;VevLIx<6oY~W?o9&+m;(Mm3C~5ukpdOiDaUDfJ(R#x(I|e&F}Q<^<6Vx&3YWwK z)a%`$a@nsz*LBV8Kfs=~hqpNice4rH#TIZf8pJyKeua_83&S8&bqY`+gyIsOjb;#u zRUpQA)DuzKGlQSl#SsI?i&XzQlQ2^jK8>1o;`_jzc0|oq|v>JRs3T zEWUt4@w`LA^91ImNWA2gxZKCm>Agcp58oom`B>jpKz(6}xgGinKsXmGFKlJ57;4kcq33B`)y4%OhYutU8AZnnc?sLIG<|q#y2#uSy9L$)G1F)7Afk ziMlMMr?Z4dQUxr_EIySMaV(t!(kX07%3JjgAxX&jW}|27x#LprSX!6J?6_o_>WB$n zkkhEAgAJO^rvA zxtb@}H%vWa&zZ0|k3a-bZil5*$g)1BIsmkbP9X_>VQjb5Zf3yvB_`iP1Ip~q^%Z3ytt6T+B#2?IY&B;xpENOD8zNkI;$E`t0}xw z5>mR}*197qJ}T#MUd@n42-&iPCu=ND)`PL;h}Xx91|D3K!kZ<=(I`^#7o9p<^}AmiZ^OT8rxK^pKv;iam0z^z+!5q2Whc{Kh>fE z;th|M1;UhB^hsiMy`x$E8r}BNfwgbLTU5>E`O>Lc5WiiJaAcl-*NqgHN3gbTg2&ZL z9J}f)dbJ4D8lB5)3Y0bRJ}zg<(S?!h#G-vZ@NAUbwjsBewRL0NB7druol?x(l>()y zOb|)W;@p5;{H~tH1N9_csw=}SIZ%-a+Gxeg=pB|ln?3Tezn1R{|8XsOsusdm2%PCP z1-8HS&gsrVlB<^+^zJho3qZo}wyF0enXz0dxK>M9L9?;Oc zmN~xGYIZHC4;%ZsjU{7g>yo~-<+Dr8ty`ANW=n6GZDXlzZMICq+Nf^0q086Uo4<75 k_wG^k7Q1mH`|U$}4j%gM!F%X+?H#yO|2-_v=K#Vur?8~KeRPgp{PGfG?Y?E;@)SU*UY_OAdp#m z?e%?Y?QgBUPkyp7{M=*1>%EL=c1_E6?5=IrP5b0$|2^7lSxtO==o>gQl2=W`>9q8w z(=;5rWm@_Q_fhV{T+_vCLmFNm6%uyKXt|wc7aJpTm#wiacGGYjvY_|4h94y~t#E-Q z*nLO3;BIn@b~-J?>@fVzjPT~Lj8pssdLvVK@0ft$VPS+&!QV#2p&mXsD&u@wQc0FZ zcZ+O@gDCd6X2)pTB-Mx{?&3szk=JvP&3D7Kp&H)L3D`fbp^;EAHX&9mva{`OQ7zlH zjh2maqKH%J6b>g+cr}~C$b{^%JeigjdR)XVB0!8m$gs>WXUj18R5GkCbdulNh&0Ze zk=s_mBV#yM8gJG!X*oOG&^^oDT98K8+2+Y0y{`Fklhjx@*e{pB_a@myBJ{TT^LzJL{#<01%L&ML@`%lJ+U?s=lcuw_8X(kmf&to}(gg%6qMjySi=B$+cM0oN*1__Ih)v`QkK z7dhM~rts~Ogo}Cx-;_C|)dEgv65f*f6nRrA;$lI;1)W=pChsP2Zwd{9S2PW~DiS6p zHT+)ZQgLGIvVx?RdR$K7wu+1sg#sSbRMPsSw%%#ttWv7b#DYml&Ayg`aeGr!@X%zc z9t_z*TH)46FnF`3;ZwSZBa@SOr$#HXUsdozA%*7^9-q`DJRsB?zRtsaq0VELP_=lu zEaB}UkBxE?zbJEi0*P-dyq^QURT7abr?5cW4p%w+L6lUQh_C)WcGxHe%J%8pSFNgkauMa= ziSejV8zHFpSaksxWEC|{#7|3XqApkH5c@=JYJ#Rkaz{ziw0_;jBI3@fn)Y83KD1ub z@o+Vnig`V*$k0j2FO>L1z#mJsd8DTlyi$Da!0v zP0P?X50$VF_@~JlzEGnBa#>ffQsZz%=JQdTF*h=jt}0|=7N(eXy>jEET2lJ78_X{< z)y_>yxObAP`GttR5#r}bb`wvEeoEJ7f>%L+NpI~y^q~#MCWT}uEu5=K_?oKmVQUgc zwvA@nChz1GV$p44wMq4ZpIb)> z_pldokwy+}Apo{2#@PXMn z-!Zx&7;a1lqun*y9V{;>xHd~3p9@^ww&R|3Jg|GowyA3$D;ze|G)>GSOY4vFLPd-+ zixR-vjEoC&95OShalaa0HcH^$<#;iW}Fh?qQtfjUt; z{c4Dn2{&dHJZlK}^`eT?Mlu^!gr$X7iNo>P6rM3eY}7~bh?T_m7bpj@-~}51VWS(l zMe_bw6x&|GnaD!jZ@HtN)(;jnytR}ab{t%?WCF^?nR)r4Oe*o;CBb7wWQV==D%{yL z&P?Z}SRaH8dbrV0ajC&g_nkdEEaF8fW09{6`YG8a?Y_QU>@w+E^g1U`?lxXNCUB&mN`7tj7UTWy5H^^+86EHoS_YTfK(-Psdr=d*v5a=1|15pDIoy6l3 z;?Ymq#f)@BFI3VX$-bSQ+z-^Nqci~SUz)>vNRK_VkSBs;gZG?4C)h1kwH3t{G@s6cp?_w6? zrs&-`CoRe+ZO8e9q8{MG+Mw_BaLm;38`Bf@hF!sNlcP+Sm=BsVGG-dTGKC)(ocRN* z&92$eP5MVal;*sDkTzW44^`pdW!?ByswLvC~@K z?Y14eZJM^#+HG0w?ylW#v%B+lyLH>noy*p(`n&(13$p8ll;gJA+|11GeYbP}15Hh3 A{{R30 diff --git a/openhtmltopdf-examples/src/main/resources/visualtest/expected/text/table-non-paginated.pdf b/openhtmltopdf-examples/src/main/resources/visualtest/expected/text/table-non-paginated.pdf index 71a62ec936ae6bbf7606fa95807b7763874510c7..14df54df258528529cccd9bdd172a95286e541c4 100644 GIT binary patch delta 1198 zcmah|J#W)c6jf|P6RW6|KnyjlY*3bh-1lL>4@81U;<6P45*tVzLP3fQwd5hsMw7+=Te{p-)0 z_mAh((}hobE`Y7`8>>a{=k`D{>?8H~ zrx#rPg0PfvlOvMwHV0pKE-hu$JfNs8rkH1c(|RKsN!sEBYBi@qpr$Uu(Yp3pC3!?d z%aCy<;mD&W6DcQT!V@_jkK-hvf{l_yNP^g%@#rv#hyJbqN*=oh51+r9`UJVdq5EQS TJYT$=Pt_t~=Jxx^y+ijOX@~%u delta 933 zcmah`O=}cE6lCYaWZHxnH0Zi3c94j&(A)ibr$0ahcj5*?G2qpUs3C#bD3Y6pkVEd8 zhjVGN zvKCGHn~z>R-QA;rcUl|xuEu<9T?xSeew#bQCjq->bV?0p3R0SrZL&qcFyVk26tD3V z8^NR-%{{JpCb*c#-$6g%26=dC#h>NMG2?9$_ZSbue(2J0C+a3u41NjDU-yR&^h}Y; zTvaI<+>BQ6L39;+@xp>XW9q_#Xmz<3>lHkRJ4bQvlwvMmjPIj!_$E3-eOy76x30pZ zDDQpzHr@zAJ=xSwa(dB639bq`$7l1aXKPudgrAc3Q4-^?`O6QLVchT4^>@kBMHZ-9 zqe_{Z$VoLj!Sz2eV|SZ$&2xO7TPYG=#yrdO55O+7&JJe8{PpI z4Nj$8{`KzRNqhhMBlYZ~SirKX)&Z)N-=6cKiN_ F`~lqq%Deyo diff --git a/openhtmltopdf-examples/src/main/resources/visualtest/expected/text/table-paginated.pdf b/openhtmltopdf-examples/src/main/resources/visualtest/expected/text/table-paginated.pdf index 987ed580a088aefdd8f8ab1bd755c7bcfb7f64f4..aa0c011178d1f169c529dc65a73eac196412eeaa 100644 GIT binary patch delta 1308 zcmd^9O>5Lp6eXRE+LsJE*fO2g8DEt`t0jFOd3i6|3XLwTfRV&4Fij3!d8Nrt>cNQCqvNbayTqD356QDp0hclzBu+_*q*7=3KFj z{CBhfuj~#@bNTXQ&cHWulbor5z#4@WX92!CLDtEsVGdCiCIto)fFv_Rvp!={@Z1(W zbX?eWXHOU2wDh2P41GL_EgaWp;hWQdxAi$&^Wjr{-Y=OA4cQz{Zm-)DBy$cHIO1Bt$LaQZx)NQRwPhRib3 z=0cMJCEP-b@D8oE6N}=_NMwibD`q^l&tEi`A@eFoq*nl5qxpEn8!$%hf4SY6#_#44 zV-yqp;JpSie+Xkjlrf+2u!>1u!8i%3*k5{mX+6i&_Pz*KjS28LuNV$uXiM5L+Tt}0?o=7%w^z#|yINHUN}*b&2m3!rb~ z%CLZVfLRHLFkV0|VAya0tID2coL;!MlS=A+^}Y9f@4f!iJ!_rzA5cRmWsEZ}(`8CO z9$i3!;_B+=n}ePG!bMyKs4^YdcC23J2exYS6WQzFva(bvE2iNZoeXxX&yb&&QO?>` z@My{D+Q|9Mjr-S;*iR2iK{nm|c{qq17_kozgF2iCQ})at3jJ`l?YB1EOg5u@FPml$D_hR za58>Pj}5JMd=-O2q$w-IzqNpPj|Y!)oK|ndW7(fBJFjO bc9b?ozKEayivl-u%|I!m@#5n8Mi2i6p;Y-S diff --git a/openhtmltopdf-examples/src/main/resources/visualtest/html/issue-752-table-border-strange.html b/openhtmltopdf-examples/src/main/resources/visualtest/html/issue-752-table-border-strange.html new file mode 100644 index 000000000..52b25cc17 --- /dev/null +++ b/openhtmltopdf-examples/src/main/resources/visualtest/html/issue-752-table-border-strange.html @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + +
1234
5678
+ + + diff --git a/openhtmltopdf-examples/src/test/java/com/openhtmltopdf/visualregressiontests/VisualRegressionTest.java b/openhtmltopdf-examples/src/test/java/com/openhtmltopdf/visualregressiontests/VisualRegressionTest.java index 18aec8735..6126d23b1 100644 --- a/openhtmltopdf-examples/src/test/java/com/openhtmltopdf/visualregressiontests/VisualRegressionTest.java +++ b/openhtmltopdf-examples/src/test/java/com/openhtmltopdf/visualregressiontests/VisualRegressionTest.java @@ -1450,6 +1450,17 @@ public void testIssue551PageBreakInsideAvoidDeep() throws IOException { assertTrue(vt.runTest("issue-551-page-break-inside-avoid-deep")); } + /** + * Test weirdness in table borders when PDF is zoomed. + * Apparently was caused by anti-aliasing selectively applied + * to beveled borders. + */ + @Test + public void testIssue752TableBorderInconcistency() throws IOException { + assertTrue(vt.runTest("issue-752-table-border-strange")); + } + + // TODO: // + Elements that appear just on generated overflow pages. // + content property (page counters, etc)