From 0fe62f02624a63caf938d51f5f85a587c59afc33 Mon Sep 17 00:00:00 2001 From: Ivo Majic Date: Sat, 13 Jul 2024 16:16:38 +0200 Subject: [PATCH] #682 Fixed bug #2 in previous solution. --- .../pdf/internal/stylable/StylableTable.java | 22 ++++++++++++------ .../odfdom/converter/core/Issue682.odt | Bin 13670 -> 15014 bytes 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/thirdparties-extension/fr.opensagres.odfdom.converter.pdf.openpdf/src/main/java/fr/opensagres/odfdom/converter/pdf/internal/stylable/StylableTable.java b/thirdparties-extension/fr.opensagres.odfdom.converter.pdf.openpdf/src/main/java/fr/opensagres/odfdom/converter/pdf/internal/stylable/StylableTable.java index d97687d79..87e099d14 100644 --- a/thirdparties-extension/fr.opensagres.odfdom.converter.pdf.openpdf/src/main/java/fr/opensagres/odfdom/converter/pdf/internal/stylable/StylableTable.java +++ b/thirdparties-extension/fr.opensagres.odfdom.converter.pdf.openpdf/src/main/java/fr/opensagres/odfdom/converter/pdf/internal/stylable/StylableTable.java @@ -86,23 +86,28 @@ public void endTableHeaderRows() inTableHeaderRows = false; } - private void fitCellIntoSpansFromAbove(PdfPCell cell) { - int rowSpan = cell.getRowspan(); - int colSpan = cell.getColspan(); - // skip all the cell places already spanned from above + private void skipSpannedFromAbove(){ + // skips all the cell places already spanned from above do { if (spansFromAboveIdx < getNumberOfColumns() && spansFromAbove[spansFromAboveIdx] > 0) { spansFromAbove[spansFromAboveIdx]--; spansFromAboveIdx++; } if (spansFromAboveIdx >= getNumberOfColumns()) { - // we have no more place in the current row; finish it up, and start a new one + // we have no more place in the current row; finish it up, endTableRow(); - beginTableRow(currentRowStyle); } } - while (spansFromAbove[spansFromAboveIdx] > 0); + while (!reachedEndOfRow() && spansFromAbove[spansFromAboveIdx] > 0); + } + + private void fitCellIntoSpansFromAbove(PdfPCell cell) { + int rowSpan = cell.getRowspan(); + int colSpan = cell.getColspan(); + + // skip all the cell places already spanned from above + skipSpannedFromAbove(); for (int col = 0; col < colSpan; col++){ if (spansFromAbove[spansFromAboveIdx] > 0){ @@ -113,6 +118,9 @@ private void fitCellIntoSpansFromAbove(PdfPCell cell) { } spansFromAboveIdx++; } + + // skip all the cell places already spanned from above + skipSpannedFromAbove(); } private boolean reachedEndOfRow(){ diff --git a/thirdparties-extension/fr.opensagres.odfdom.converter.pdf.openpdf/src/test/resources/org/odftoolkit/odfdom/converter/core/Issue682.odt b/thirdparties-extension/fr.opensagres.odfdom.converter.pdf.openpdf/src/test/resources/org/odftoolkit/odfdom/converter/core/Issue682.odt index 87fd77b3632b443b6d23332c7a2ea3dd22ed03f8..a701f816dcd8688f1f5bd9bce5596a9385e78e1c 100644 GIT binary patch delta 12978 zcmbumWmq0d(=G~x-~n?(VS3dTqVm*=Jv8 zUuS+ySKCb2Om$cFUDZ40xlV|3lJ6iW4xzxVvBKJwr7Y=5;|184aw#f0GelU6A~aDfAFgeutI zuD3CPSs6L%(Yjh${!kdSUZh8EzNJDSQwhl?kz^&Jss^Yi|hDTe|g{>&>V@i+~BS3m|pja#a{x%@DUk$H=cr!dfYe zH}n1;&(SXR&b?OmRFgHFB`rs_IB8_YKN=O&oIOlkN-)&qq(J#$w4{H}xv5*wDHq!S zeZwu3;S`s+ebY@3Dev_M{joI+gO?69m&kVWvcn7`K=273e#uQ_tq$5qD3gRxjc*S{ zTCG`+1TKp@X9~LC-cvAIvb{8WN^&+lJA8sZ>(ErXnZ1|E%JF?cO4}Wuv-6(P%T?wn z^F523XQ9qumyW!khBZ$)x$BnlulBGXGz8Nt9g##FBOUBR9eXeG`zO_pE#fX_m5qc) z*cRIS06Q+|u`IRF2w9r!^ttC{5Z)@4pu$O_7;5R<3(=Q8)%ktsI7}gN8G4k|ule*; zp3LF*Alk(3xb0y*TA_Z${U32mi9?QdXP)c7X}vbwkdIGGcqyQ*Is6u)Kpkd}C**X>Lg#RgMTg|z>%`+j4L?^+BmhNiv_qyO#Q8mB1E0pc zSAB2qf)_hyYl=ifB1u}K)U;SS#8sw0gR5N2PiOy1C{xnm)j}M&pkgAuo-{Js@KUEq z$eY~H+dn5a=-uwTyu7rpZ}ObNyu2Xn9}z{z=iy{$r`&DRN&C>oiZ`bpucsS!S|;V7 z*{Hst$MIYg)(vQ0M0)KL5iK6k(1I!lKYeI;pw@fPubC*k_4eBR%A-?72t`Iib9(0% z>JmG?IWfIIe!ee!-x51aTBol!AuxOku#QM$=?(t1Nd%(|2w-+$Sp=AzKSt zNl!FG(!XLhmHLkF?~$cv8V->msj^~Ro*EHfs=?%BYXa!2l6#TFE~-9xf1dCvFi7No zT2U=prf&A9wb@Pn*^JhPRd}f!Q_-IlS*tTpbK>IYZd>0n=X7qb%E7UuUJMd^PksK0 z#G%U-c}atSGJRAwtiKfJRJzjrJ<^xB(M8x-Jt;;$c^fZl{bD*TJXBjY2DYCzm~o^J zR;H&C?#n=8UTXJ^M-#K~)(#YRtpSy27&`vjjf?P4TF+p{Ps1Dn-b7V~)X(IG8DYUkO*8eVDlzRt z{N6~x@a>C^f-K`?6z~X_^Y^yZaX>G-{FxEP2A%8qqQ*V>C%U zWF1IDUhxR+7jst@JKS?gz-Xxpk(W;#s2hg#T}JLP=oscR_%#R_78kfLom&iuhvv>k zMlz3w>B-ndhphB@FEi^KinIPCx?d_rlOyM?OVrnnBOv zho9_m{x0qBT(_F=DZ1iJFcZ<0ecY{q}Ev?Bun!OvnW0^srCL^fuhq|odYhE7&p?pf;wahN7eRt;H!FN7Z{`G;A^{00cJ z55qQg$2YRj;eV|O<5FgBxB5=|`Z_cH_)Zdgja!rY8<&9}c~;=UP_Z!g_qWrvkMPB@ z&|M!nt&Qu+)bm*mpr#^sDhNom0X_j#QreeZktlP|V}T+$Zh$2gZ_- zGo4^An`E})X%%xnZ@C-vKFhul(_74TNz&CyBkNO_W4AmGtF{*gpEmDgc-e+6fGx_C-@?^1<4Uz6LiD5 zdJhh2NN9(3=I!gi3Ul*I3-QSFe-#xG6O>Yt`lhZTA*L?-P3N14hJvh`vWkGTo`8aZkdnEmnuWNM zk+_nXw3?BOrj@v+?KgD;B~4RJEhBjyM`=B0bv<(hBUd982~!PKTP+1+9bGG3ZD%7@ zBO@a{LknZT)WY0Q-`v>T+SJg(!otwP(c00|-b~-l%F^9R-_6d#!NI}a1@LfkaCLF> z@bFNx^wqKpG;sK??-Xk27Gde+YvvMa;TmA!{=?iG-RvJXgd2~G6~ zO7I9xaS6}xiple})(mts4Dxb{_Ob}`_ecnK%LoTta-%){{rvm`LWBJSB7*(HLc;>X zVnRVFvEc!U(VhOsR@XN*)mAju*VNb7Clt3Qmv`sZ_ZPHIRyB6iwDmW) zb`-ZySN$}j*Sd040bL|42+MDPtGh%EUYX}k1fwlE-o&1PHhd&tPjp@^)DVx zE^iO7UrcXoPpuy=ZEP=X9j@;0&H?*(E9Z|JQ=J>L13Pm)Tl0g5Gwmk}-G@s9n~Rg1 zD+~K8ljqC*$Lqt}>x;*mQ%75ir+bT6d$SK`%j@gwn>zXIhZ`5idpBp>*XM_i7aR9iM=$q>=jZ1aH^BYXIh2vBtIR%y0UajTXHv{m;@_w}wo-oNvvY)b6-iz7p zJbI1tI8?!QdWEhcE)`?6MG@t682!_EgT9M}V-YJvx7VV?q>|mULNrT>lVq_`dW{?g z9`^VhGP1UzLCk8ihu?Bt6ELZUxw>v&fA3A(lS~hC=nq=GPrck+@_77+9O!)qL->vl z$`Gv22LTK#3Y_pABbXr{)c?rzfklC1fieDR>4WgM%v(1YH!STs_xkF2R9-CBEMb<< zMm6dd7DTlEswj7J}?1ppQ$kTe^_Q!nFz#UavE#)QC_WU;e15gTt>}Sn;NIw~!4Plv3 zI2Z{CDz2ejVw1-4lyez*rjBGth76=M*+AXO?#XCgEMmQ9Ltw(8M7|71b#vcZWRP@1 z6FhJ#SweBGj8$cFxb@G9BdM|Qss2T1FcX&%sMbg);`POL1ZJeu?RNgvu({z?rI2O1 zwmEW`snE|r8c26%T*9^pH5p+SEX)|kVsA^)lN=t2GfJj5*}XZ7Czdrnw(OTTNPhB1 ztiXsPNU%|WeKJ>Alt^`w37T9lRCzg_AI@N&-2CBaJ<`qlgqRQp7{pI{Rk8{v9pzeT zS|~&j4Vg+*MXx8QBH9}rNN3(=ks1`Sq@%&5Z}C`D0|DWsMk$5?2{y@XY4|C=y`^7R zqw_+p>Y6tqa+y<@9NSxvv=t4xOhfW%Wr(XXYz@&*`&;oivYHs5!s13>F6eJt3%YZE zLkX%QP34YBI|+(>k8H*#e(d}?AY%UU5266BesOsE2h6!BN3WJ@Ap% z!_m$L4z}3>%eQ+6O^78#{1o}vOVPb@VF112eTNM(qdO5}={R4e^J-2(JJwxhvpx!5 zMa=VpXESt^qU4-$e$v0{Rgwz4qQ@Knx)4d~F0j!tT<F>60CPeU|{BV_aKVxu%h_R7q^FUo##D`WIK3)*rdetNok#hGM_y+ODRd$&L z)=pr7C7l;J6{-ZN_Di&Uops#HjpxWVGRaw~k!M{lk*oYzKPq(wa5?#oENNBtOd*mb zndu2p;k8;no%Vqx^W8fMP`uji)2wYLuGS{Sh)L6D6Gt27>GR6j?QcDbY;#$I!q(db zv(tVl<2aY$56XZ28Q{;a8As~@#hFKkE+}GjEm9p3EJo&^j|Qh?3|qr7LSiqNJEuiA zT+w`vq^2S+L@A=tFlB4n_XQYU1&A68N{zZyzVNCK?{<$u%MxoO&Z<$Q5Z*j9Re#x> z9#~Vm+m`C-L_?YTTw6nTJe3>-=lO~-Jdn@Tf5Oin2rnf981>)^i)_}`AQv)8dpA3d6wvM|1Uq9dJ=TFt>p6{~)fr?mFiSqiM^rwf17&)mBm z9orkLg|>DGOtEWYY&K^ONFka)NZEX5iWftVV|`zfR2kk{cNtjiZ7^!hg;9Z~UU%KvI@SG46u{ZkT+IdO`B&vZ|2l% z94b?mJrY|JGfpLZ#OxfoZ(Vq}ZmH5z!K0UN@xL0e2u7GT(!{s?umW3Yh^5hW(|F<; z60&vW*}|2N6`j!-UcmesDRd0mx^^*wM8K@W4iz?mF;)q%}G*(3Tt!xk<^Y?EmdQIHH(r*{@XfAzmGy; zqR1ae&(VpVP{}MDH`q(VB9iY?!l{+sOsyU5&OuzR4vN<6G?hrMDTty(P18#dK{|WY zz!p&emQ5wttk1VdsCNDG`o7*|TqRg*GX1oR|UsZq_D8Ef@SsbmxqeOE;l08>T$ zr(U5EtOdLUnfW_hc{h`c^0w?(M;n5A>NMr1f;I%b+tD*`9g6T_I+-k7Nzh71lN`|J zkd`rTZLWXOR@E}(H}Yr#2_N90yl?ZPr z$IbN|?*asT?V-rLAf|J_EEVca87csbZ40r(rt)Dwq6=A!u=2DO>?lypt61M;c#KQ1 zDtcUdofs~KtAwkln!tJDWpf}+=OP3bOC4{a7LgaFJ3iQOM1jmJl0yV-sR;-iV`CaO zXS?pV#GWrc^5V|A#11$zCfnI^a5rm~UFsV%XWLG%egId#6XP6&3y6Pj=?3f)_#NiH zEo{#z@{h*sk8`KXyqg!YXjlx-QmXQEIE*LFDb2aYC#BHoVk8UGuh;J_7}K7OgY|aW zycl9Gjn3(l4zv|q=APqJLt#8$8zW!0=l?32Rr+b7E1bbDea^M`rtgJQX;jjRl@)4f zKn`_tm9N&IDu*hE?G%8fAtiYrVpk>kf>W_mZGTT%^JuXD+3K)ycJ!8*5aHjZ<$oKY ze=JhlS4P}sx>a4&r{_C@HAHJhS2{7%I@_1Hn5UH0sN3}3@6cd3qyzq zn~P1UXy=TyU}G7x@`_FmZ(1@cPVT*YzSAzvBz9K-TBD!mZ!D_OKr*$X32sH3GsPJCHx@(;`o{`qns?%l%$RY z^X&=pFgpleG^`kEKbx4^nrdK6WEDgunLwfoNrq%hOWOsUauL`1;07ZQ*$4Wg4@;Q` zzEL7*-8-q~XsUsG%c!dwo!vW+z;bvWGLZ@U6AtO1JAq+v6q8KQTDI(5%16HIrt`@6!~oAC=|q)nE_*}J0^@;MqT^zkzJ#HCN1 zj9Z~PfM_yG%l`X;Ruic+$Xs0UY?SK+X0@ywp|bUa0q;juXCJGAg5H`hS)Ncd)a5&% zqBqktmS=syVTIwdlY%s~@#K?E>Ertbb<=8%5KwJ0qTWJmMM34$`j5usnI|e6?s43- zoF-|HczM??Ou%Uqb1?tv75_wQns_j#Y2UC_rHXIY^X%|Hhs3 z3RMsc8F6)E!BD!m-D!4NUkZz!Xcq=bVaN^A$ASf9^<~t+T8f}w$q&ALcW(9q7oP$d zRxpXl2UZJp`3)jXx;|sUEG;y`H;r)1|`09ud1Z z#|vH+sPV|qeC!$K^>qV#lv@F=kg7Gvb< z9(^RIU@Vmw6t9b4*4zM*{1^b_jMw~i(kqvfPF?nFM9Qa$gqq;LALL5l$C0&wiVm^(?yIRF)E(#KU#RZ`@RT#w|P+!YV(rJPN~SwF=X{(rp_8G*8(K(t;}-5 z^FO|`Hm^>uAe;``eTm z6K6dq6$Mz=_aB?tEk934`dZ8iV;5sC+SFrnJ7$S<{LVepW|Le8r!!+_l>6|J+!x28 zwp?0yE{1p|9?vZLO`B9YwDIz(DW}0yZwnEulXYqlu{*CLjSc>vrZVssp7B5C@*CLk z4?N?)mCpYS^6@W>UqrY6J#~O!` zi}fF0SK2zph@QzbYHy8nSc5(bFIs?5>$i9aOhanta(QqVb-ANmTCes2ks(8$Bs;T+e{&Q|@TFw+yw6F4yrBT*YZa@g9*mY{JOese7$2GebtC4SItUSlg&hDpmK6+LAK2LViaQ z=ob8_3Wt7MiX~2sJx)*Fv*4EtK8Da!%hpGlx<3@66NIV|^D?5OVmehR``|@UWJG`U z$cV1k(x#}nL(PS$Nw})pppSZ9IY&2CO|2h&gYIXJOXJQ<3fF>n>&yX8IH+20=4U)> z)Q1tKtE{`{gip{S>-5)PMi*a%dvA^>=K@j>YY>co{$NWqnyEyu!~%i?Ia0I~?*j+M zEl{Loj&;9!Z_?YyfBmAWZ?JE#(wkY552p&dkpL1omHdJg1H(2sLjy~0%7t2wps-hL zLOuk-x^R6-9b#ND2_ppDIsEG(F}q#D@x9NO>RmfnQ==h2sY4N8fTQg&tp)Gn^>i?$%hZIf>g;yNynQ#~%Jc{$bh+A#^h0vMvp9s%h6+C~CN3*0 zW7}FdqGiNGc2ML)wg?Ke*x7`p$mtV~J=NNAJt^f6rX>68lM*Mu$K6#wUA|;-Pd4Tw zGE5oNXcUvTWlv{;ScpqC*d38!(L060Zh6L3h!Gdaoy?Yz5xQqzUt%1GBu}z{1Nn`} zY}A9^59xSM-i5w>#}vy^cHiy4ZDqSg*r$I-hYIO`YF-9&Y?&wuq@SXo{%or!qx+7rFjBvXz^)_JHZQkjyU99z^Vqi+uee0Ird>Jd zNG{%BVz%YB?4T*&nEQ=MY|hR_Lh?LLfUNU<^8lc#t*I3gX6k1{6TFf#8++Jop6vH% z)%^gLsV{Giat8Ntvno0Bh6E)Dvsy{9_qOhhp;4Qi;=LSzKz1KH<^VH>5xXcRJ8HSd zgJ_=3_Y`xGyN$iqE679A!2AB|bg$;bBnU$SI`s=~P=})B8#E2+QwLRT)OWf=!#6xWNLJgj zX^WQ;XEW;p{F#cTK&ScaQT}be^%r6AKnSE+>XRXnLAXlNWPcb2wlSJ?xauX!GsJG(&uF{Za9Rx3i-xriy~tpMac7dYoEw$C+>uYns_^+Khc1Py?0*{&L46^4ZO7jo( zXdFG?K?|QVt8x*0iAYp!GOV)#5YZ7VGrboG2Dxd57Ac7wQ$r3SdK5 zB@F5wCrxXzrS8tCVh?wGdZo%SD(;Rr;C6-{3m{Nu*Bo>5PWgvkO!mY zG}uhayLb^1M~4jHx1*PHVczssg1dT*T8Bpfo@&Ls7lV)H@@53VnaDpupz|pwU2Pl; zK>i9W|EO*-oF)ZIHbPGMW(yak^Kr$iYPMJR6R3lP>^ni9JU4196ht&7oEPrHvqgt> zUz4e(7omBLc{wNt?-0d;f!B+||Mp7cIiq~ODNpetL3==?a^Wg8ME#>HF5M>k%l`ZVX9fHmt(i^dgemsEM0>-P8Ntm`jR)kj`!3 zWfYPm;1yS5K0xDu_Ums;`msLUQgc2mTc)(mZ!_HPKDA8 zH#-`a{kF{neP50-M|@&&%njl{1XY!40jg8DH6|B8#B#VKmA~|~V_nI3;4RbC>MfnA z^HASc3uih*!q?96HTc$HdVy9^HYS~~?m7Z}tos+9b#w9<6XHctGHJ*V_^^`X8YhC= zSg_ZG50L`BH_+^hzS6nX^g3b3;ee7v)iFa)3^Y17AIp`;`%!<7G8@QI^+0o2V8tY` zujUy$aD4YlWpRMJqVFS(PL<@hY!4y>FKV;Lt`p}&kA$1GQ_r@PEUHc}5+ytUj`_nL0COc}F7M+phzD~+Uv6cr* zEVAyyuDw>r=6Ck(<84PQCn0^{1A?!(!T88~!l`;>L6ApV!%xyan%tV{iF&pAO+n}} z-}Q6Lz}maBp{H(r`l0%ID9;9s)8{^ffvlkF{2c6j6qazUGGWlX!Ia9Z`SAPIS(1C3<=p6T$FOQ=& zhZpsw+f?UN!2#m-Z^q^vcc$xMb*6=@GibKm?02r5fg31vJ&gwF-y}O69T!kqTN_$2 z4`9Ebexd1KiPvFkqjPaXq)-*df}e*VYGB1$|Ldt{f>5ClcvZQ{pJn` zcRPbhyy?@m$nWuDAu_;U1Ak46!u%YfOvz}P5zDl+jR)Cvs!cciawe~dwp-)3}VhI8`8uH6k<3BS*300 zH5efo>?czo44QcaI%S92D4L;WcFDcpqR!5eeBBZQC?Ngw`~nx%392gZm-f}wPh>Uq zQOFNH;M#Tf+ICJ>0<(2oKArY9$>J=AUQR}gTGB_b3&<$8M7s}KBV+J*Xc0lu2J^nm zY*d^CBymH_msTAVzsi=ZJmdUv|KDU;?M1+Xffcg6x&IOV3ex-Ze!ou(TDZ_+7ll0WzU0lJ=z+0XrD1;z9<(%pW-u2? z+huBJWOn||!E+C3Dw;m7!fB($O}I6*8>>?}TieOY^_@J9%j&A9i?9ikWmbXUaZVUl z#{3k@#c71)@wu6*BxTD9E%5y;uTjQpDV0h_ za8M|NVoH29=RSfPbW|13t?{7g^2=udF6+9fzT22+sfA{!-!K!preZ&w(Zyj|i_xaB zoBR4#*d3~sXIJ?JRt#lMrLRcp&%m6=@P|n&=t-X@Q_BeW@}!5=bbyz84t`5u9vWk8 zk+H*5zGIcoq%TjZYbGKU^HEX+f~j}rBR?GV>~Px8auYg2lxY7b1N?ikqu;CS`IE7B z3plMwDppj|M&|WAsCOa19LYcU9~QPyX#52BcfMd1vZ~bX*D}%_f6{+!L<~t~r%Hn@ zJSt@zL8zg{GaoLON&)7UgdvpiB+ZFjq7ca!!qLB%dwSn8U4Hc} zVq&PB0j(M;3BG49N%;U~cgio_s;=c-}^ZyrFRj8&M3Ve1J8Vij_M=c;I!pqt8a)Q- zW8up*DfHiAfOY{Zx5k3P@tr=(CKszm@_`)9*=UFw-hSZ%OU8ag zj#@d^rmzK)l%ix)Mt~O)+OcJJuo?|z% zHx(q~DgrRO2eLrHrBi!l4)IG7o02IG|HiYq_XQ@L=mrNx+lO*x>E0K2dS@~VaiT9@ZY}&U2Sv6d9Rkfjrp^LS{e?1>H`}p~x zP~^|!s2LadB?($sPAkccH33BVoey%WT`zLfIzYjkKU>8py}njxyc+o!W6>-@AXpe= z2SnC-ekq?S4ICu>(6bt|`7h*ct2(oq(bAIU121+gQSzXbG_e%I=I$?c3%1%Y)2VC-|~T@Wa6;Gow3(1Y?>`I*lA) z!BLK`xjEuXTK;7U7lk65N_$=??sJpS%FQP(ojKT0+#xTBbe2X`UvkJ2{I)?1|%JrI0z#HIEb4%W6;_~&E{3v^j!PU&;Ps|(xk%LvxIQ+!N$hgoETx8M85CkkQmRg9&Xsvs=AL$djf z^6_tM+oelV3ryU;X|2jkgqGu5ND^JgW1Bzy# z_%}WKPa1+z_^+}hMjVh4BlTZ&?7z!I|H_jw{iBUF(_cq6Kut_+h<{?|{~cBjdS#+i z`&07wK*B%K^#8en-~V@Py__UC1S;6SPlNm|(C{tT@IT$&s1uMcGr8)Yr~lnf`2#ck w=i(y%JLvSUXa5VH`updC|4*kk3W6qv1?w*!aanL6nwUWxEaXsBtbf}4F9x-yTL1t6 delta 11546 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 Gt@K~j)iZ4X