From 741611a2e119f9e0c172152159d130814ec141e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20Schw=C3=B6rer?= Date: Wed, 7 Aug 2024 15:34:06 +0200 Subject: [PATCH] v0.0.496 wpdf fixes and wpdf test.go --- goextVersion.go | 4 +- langext/array.go | 10 +++++ wpdf/.gitignore | 1 + wpdf/logo.png | Bin 0 -> 11219 bytes wpdf/wpdf.go | 32 +++++++++++++++ wpdf/wpdfCell.go | 33 ++++++++++++++-- wpdf/wpdfImage.go | 13 +++++-- wpdf/wpdfLine.go | 8 ++++ wpdf/wpdfMultiCell.go | 19 +++++++++ wpdf/wpdfRect.go | 8 ++++ wpdf/wpdfTable.go | 30 ++++++++++---- wpdf/wpdf_test.go | 88 ++++++++++++++++++++++++++++++++++++++++++ 12 files changed, 228 insertions(+), 18 deletions(-) create mode 100644 wpdf/.gitignore create mode 100644 wpdf/logo.png create mode 100644 wpdf/wpdf_test.go diff --git a/goextVersion.go b/goextVersion.go index 40ae010..b9f1d8a 100644 --- a/goextVersion.go +++ b/goextVersion.go @@ -1,5 +1,5 @@ package goext -const GoextVersion = "0.0.495" +const GoextVersion = "0.0.496" -const GoextVersionTimestamp = "2024-08-07T14:00:02+0200" +const GoextVersionTimestamp = "2024-08-07T15:34:06+0200" diff --git a/langext/array.go b/langext/array.go index 9ab975b..b8f98d6 100644 --- a/langext/array.go +++ b/langext/array.go @@ -323,6 +323,16 @@ func ArrMap[T1 any, T2 any](arr []T1, conv func(v T1) T2) []T2 { return r } +func ArrDeRef[T1 any](arr []*T1) []T1 { + r := make([]T1, 0, len(arr)) + for _, v := range arr { + if v != nil { + r = append(r, *v) + } + } + return r +} + func MapMap[TK comparable, TV any, TR any](inmap map[TK]TV, conv func(k TK, v TV) TR) []TR { r := make([]TR, 0, len(inmap)) for k, v := range inmap { diff --git a/wpdf/.gitignore b/wpdf/.gitignore new file mode 100644 index 0000000..9b1706d --- /dev/null +++ b/wpdf/.gitignore @@ -0,0 +1 @@ +wpdf_test.pdf \ No newline at end of file diff --git a/wpdf/logo.png b/wpdf/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ff9d6a24a2505cf41765909ee08bc16384b0c374 GIT binary patch literal 11219 zcmc(FcT`i|vvvx-3P=|a(9kJ<}Md`h_i1ZF3y#zs2 zFoYr<;hy(*zrXJH?_KMzWUVA;pEH>~GkfNlXYUw8eN9R-7BUbBM5(Q%W()#>fv;c? z2@&vN_41<=@Ihp+tEmRM`S(@O^&tfWx(m`)duZangv<5Iq5pb}>1oiVLBrMiPYnGS z1kGdEq!<`dA5s#*e-GsK^<^=+&N9&#^)SVY!OSXa&5J0=D(nZ>1Vk%p?Nt%cT<+^v z*R4N>_mOMMCrCe}?D}Lh_5NCRrhH3I&|ce*Jm{PEy#L4VnYP+SGC4-%FE4U|-;{2o zZiF%_$_NJp6v0-&IK{?GG=mXGkk*1S$b+G?psyGTEM29Sji`@t?p!Sy=)N{IbaaD3 z;Byr^9~zFfMqR74K$KuYkPS8j%RViqC*jw%#3cwn=v_1WpM+)T0*4HRjJea<`v<}r zLi-9>umM50w5Fv7A!_DD`QJiybKfBFAe0+*OlQ(bk0HnW#e7EN376~v0li}<%@h~5 zP^i30wh(9ld_xwDS9O0#57Idz3bn=RF`w=FVxE44!k`XQux!%)mEMD#x@ zXG{xEsOic;KPkeM2^FGcv)5^y&p)7a$U808EvH5v9eQCIG0cG|EkYG%rmGNC8Rmqo z@@E4o4C(+~zqGJ4b_eNvA-=J|sIs~3hY?vhd}_7uoiqg(NG7h8R7W2CTJH(Jea?y{ zBLR%AJ=#QQ3gQ)l8^CkGISb%77Q`z=R(H85FypE88H znzE*%XEJ17gB)l=yU5K^&;}( zho!4n?(=yy5ITG?DQ0k)GzL!@IfXI$ziy@;T{UNL&|gxVA@IEs)r(lS!5OZ}Vwx~v z<^0C&+=Y<4)8RcWl`gt;7JVQlnzJ>Z$6d9Z^-k2-F!zt(J{JOKQ`2IYtAVTHn?^E= zK6O&|D{}P4IP(?Al)lVGMRv-D>Y*hxWkkSrPq3zvZ@RjaMP*7z~}WG z8)PcfWfbsioC+h+=*jh#8Dj)ID&6#>j40`Lwcbyx0rUf-{eCQLU&)CF;Vs|&Bn*3g zIFjYiv<%!4u^4u1pXfZXshQCMvffcUB`s7_$xIsO`NOXoDoi+FVp=RY{m%;!ZlIr( z?aK7lb(^V&RdOH`-9(2XUz+%p?@+{|TtFGAt|nR;=FLy@YmczvSV>$0KWORY z2_AYU74u$^*&@y}MM^{c#e@B5g3boQ6%!k{59&mZ9^~FXeNQCqCJ`e`zASoKO>c3^ z5~SMkg|f8=u6(HXVcc})wl`G4_)BE)^;f2v&-c6@14fQo zdJGH>{PqNM15cJ@>^tBzOx4R-n9`FjenPDZyG#MWNf4x-c_zC%&b>$DkUH+tn^vX{ z&`cLs%?~0QPa>H6nybyLrgf&Y|Kib3G3!3he-DI`3QW4`U426S$b1uOXB?62_0EI5 z9K_4il>-$*;0ela1n8cy2n65ROiUsOOd7*k(1X|-UbnlExaHN_D`pn=n#Av%sv1ku zZulRQ8-fjao4MiLH?env@1u{m?tc`tq^)m2TGN9fX+hfG;xYM+GA^l(nI9i&%N2!X z{AU1x=pB&|N^ZI>&Xz*R%Xg>J`YE9br{UPt z78fQ&$$zGQ3}8^w@k$LzDyVHE zl6PB)!$voQ@ocS^;OPP*FzdOcXuzs!P+o0wwvg<7vItOn^LrcAhheB>IwEba_N)ZR~@X-EFeQ|r!@ZT8BMW*|EntEt>3*! z_QH~3PZLn1qyCqZ7yJTrX14qw6Od$f38{dA-`A`xH97PnD?*j%PxhR{F-Yhzxpp^; zs(@>Ia^*W00Ta+i(DPvk!lTz@>G-X+^&g!KqFOaVAd=IB!QBRi0S|0CZtS!@8hlaJ zr2GbkrpY?4(q`bP&b7@T7lg*^H?tMGf!{AktLtwMi?@$|wW)*@l-&D;(q(+>Cnu&e zqk!+8``3ykoq4r~Zt2+eC79j!%#u~W=(+)sjyQtfZ-Hx^cHa-0F3UmBX*kV%d*x=> z??3bSmSZ`>GyCdsf!Bpq5MU67x~cpOqC73bWTGfeRvtrR4??%30@^AQZ~>&iP*2Mc z{sw(WFgKkPk?O2(lzW`}A9rJYu?+;NKlXuv{oUt9PW#swa`@ssisDqpKvyBlJd3TZ~NZy6-iqct^(_( zunC1nSI`>YA(v4Gf0yAw|NTjdtKtV)#Ac&UX^k1?kt@jT5Fqr3Kt;53O0lR9joE-z zgoF^xUUI|#Og^Qsa+k+#Gy9XmpayR<%uSQazvh)g3Zx=2u9#F(zKL5)oOB+*BA&oZ zle*;vHAVwZlMjGw9=U;~0gXE-iNnMO?q)T99RA9wH(gx@DG+KzrD6{5adX)4dHJ#` z;T^F*NZrzw^UJi#j%^85vPsb#YJac!!Tsm)xYo~0h!YWd9FL3OJ@^`sgywE>iqgq2 zot5Us8dI#e$a_?jNN~t?mkJDUzg#7F&~FXoX?&9=paeDNKBpH5$ANa@M&wxUH0x+= zPJQD?tP?!=M2ii?#Q+KI2}v;IH)ZFS33cYUejGBarQqNkFhv4*LihRcx|wNmR#lfF zp-K=rdJz+f3CCHzE7J0@F1&&QrQ;;^*q8QlG0`8i#77ifvUPlwz<{d z+*^UuMBssGEH8zdfL^f#y8G0cHdgWyQb33x2_zB6pls7Yk92So#t-9$XcrV%BM+__ z9u@_h&<^Q=R^M$)yQbjWUj`&pEjgHgD!nV8$cKThmSgQ^#|FxYKhXWD zWr^W{UYeN}Z@V&V_%f7=;)(S7oTfE;IpM~x zo@wtc}gSt2Ra{o z3jQTkOZEtHr?!DA^ebr2oXY=sn&~@Xx!bKSlruyxPz_(y6%K#X@Ez|y1sA+~I=6s{ z%xE}Ml>6l>4D|qC8=EFu6jTA7MVSc6h-i$a=5)Z7Xe zLSq(B@gJe<(CU8!x3sDpqTgUxgC1?M5b8}L4R+VSJBA0PXs0Va5LFUn-@RRh9ZZ_Ac- z({;-90;8jcdaJI2>i<@5RL0RXcU#@)f4t@R-McBD%X@_F@O&hJt{*kZ-Y#)>N!%P*$gAPi&UWoAa)lq;oU|Vkd0kwaLV2}{8WkIsWR(kPSwXJEV8+pS z#R_X(I9(dZ6&wwUHaGv`HmJzA-xbBx9UQJ5Mt?uI7Hvxr2c9T781(3{)BnNdA;0H? z@dUaY$?Y|HXtq;G=iU7-#-(4@EyOwvN;b4-Hl}&5RI%r0MVM2k>f!KV-aUs5|}dU*;)~N z{V!NXe78XwZN2;})qr?n=%SJ(#j}=u^^#Hu!k&1(V}*^93VwvkFY-8n<{6ZO7FZT& zmX_q;E&W~r;#hVkoC(?$Q5y;6rUGs zXuRpRbS(v*Y~x|ZPwA43qu;S&%U&WVsr&mp&96Y)I%5YtQNmU~4XgkMX=YUQx>4Hs z=^0X?#_fgi4)S|Hhi*RDy>-5m{3E#mx*l|YSGMSgUTo9tnf#u9<;#H`j-%zg6y4lNYKSI%Hb+c?nnwjmM2RnZN00c$?{GA4o)A*K3o3Oy zZ@QfkzWDwa(D%XQF>$goc4rH)%yL2pc%M~I<3pTGBdU0^FI1JO(2-@;!rIc!D9;5llKUdP@PT1?(0ptoGKd6?lra}BE4NJh^ z4sQs^!BJj#(w7SM*euEcrCF~uT1rcoMUHBE;8R5ustl!j&x$3${#NM0v9`_A>UH)^ zWBLQCWo@nE^+P@DVAx>i=rF*rM9J=X8!>%b zP6*P+1})Of&}86ttX3T5_tYbY9>s~PToAy{Vm=i=6!N43{^b(v0m=zl=gJxKD00>!L|}=vXl^HHHS^yrBiep z3|V;|di9@DK< z&EWyY(NXSh#}y$Bh}>DfvgmqEDFc)`HCCkojDsdzzCHT^Oh8AXiJ9Y!ce^5-BtY9K zCwM;W*4bJ}va(1^rWntsPpfW&e|^)CNs};NXYSAzVJ~xuH}y24K#0HnEnA7+6`m9W zk9)LPZN0!2!)%aExK>Tc!Yk!TqnifuUtu?oSC-6(2EyD2bGeYOzdY-jGyJfa=db$h zCE|7E-%(LZ_r-=0VBIL)KC|&ToV4cO@q5q#7FkHRgn2RU8)Adv<3nzEMJ3)>KdYJF z2HnJ8-Gl=fbfn!|dF(oH4emXhZo}(3+lA6)sclo}FR!wGx+XLdjMX^z8>l|4yjmVH zc9Bq^>})T$y_rpD{@C0mS^Yu1f1R?SXtu*&~On@j4Cgn8%%d1O^wMcxJp95ORQ*DHw10hg7EK|l>9Y1ZA(Fkqw2bX==6NW{LA zwrFRIG+BS;wh-26*}G<-`1>0N#&e$(TXnm{W0}0q|a8*tpM9}T0KIXe_ z-)u7JsRbIs|9JDp|G5$vaM%~|{ab~}t9A^I>6$Cq`M5RD=SHX1)((U!*dXbxTFO7e zcAsS)01Gg=`3~WV!RO@IO#%$xp$)UbvNyh8O=69Aw}rb10+fRi%r28=vp|e8YlBwW z`}{YhGeUy=7fu^-JgQhSz8m2-0zjm9g38nW&e2DRe9Y-u?CfYL=3V7MZ5`8-K_ZEK zGBG9od?0~@=><7u+;e!wJm7P@sFsImVDnSOPG!_wXS$yQe8XelpNT?qkC#=mxj|cb zjLQj^nO6Cua#n&3I2+8m+h7&J^%BX`pHlIyxp5ZQKR>bQf%$hwE7zq}LBV%;Zn+PJ zh&nOL*2dsP8JU3c@CR~oaQ%MunFLJk?7L#=Qo`k}V?`}$`fwKq8TC%D-Kw^?L+DvQ zEl3KIKS4(M;-L^9>i4B5;mSRJxT*$FwNKp#yKI_$=KS3TaXKNIVvgtUTmv4|B#(}> z6@>}LX2Ap>cbp(sN*$lH_aueeGNo-E1z8p*PA0HkC9O!Dd0V=;6lCLCy+yi0bN&L! zze%mjwffc>mCPt|rRSf*Z34tH5y7Vbj7{?}-N-y8$tO16DI8AGmKd>>TT^?!?~}>vt0OjaNoRX$D0(z3CF?#1lU2$$LOgcR)a#uUA2VCENWN}0eY6X!PF!Z< zc5-m3D}`%;rzEx;ILQ5L)PNWotY7QYIC&?+;Gp+FmGp}y0x39W68QbBvp>tIre3x3 zy=VySK;6eM;>v8bKL?M?3!Ayt-sX%8h(QX9i^p(g@(umobenO8*77LOncUzHs(lR!o@@^c zT+FtMgn}~I6F!Gec>(=6!O4Vw$9>`cD7FRMU-$iW>%%*}KI5IZ3RxxP_iQXLMm4Uh z?`=0o7L(gOq_S7iZPKi1s?B=e9j4zIzHlwX+xtLv=VIyir+lx{?-@y&jn6pWSje3D z_51Vom%U0C`P0?zv=&G<0Kb<#x+UY%E$%M3<{oKZvt~)r!s72lIzW9ld-8>|QfdNx z#IZqN!YTG4ZI!<-pUDn`(fVI0j=Jx4(tZx>0l$6^a~>?~?Dh%9r)}Tb)*MV#tfv^& zoP-HW6E$x5kCgoCZ^F~{;SH_b<@W+9|Fn$v*?fgT3V_mgIFxS(fD`~_6mj)`b9x`c zxuH0ow--nD%4h5;D@0@|L4HM;&FoHDQWKDH02<=PK6r0Z2vL-WppX0)T`F1DE+nz8WhQ3@Z@IpsnWNR z2I2l3xbZf_a>BCp#Ip3O@dIEL3@t>s4UV@uDc?F;Uc=mrX}?N=xybLyj4`+>z0BQJ z7CF=d^uPdmfIe)SD=@aa1`RctC;;o}7$-zk2aK6qoGE;BaPZ&^3D)v-HaFS|nM*s6 zX2=j8-Ai+Q^^z(;B*~y2ifa0 zQ4Mh){IEZHG(Sn}bc6~; zp_k(q8J~sQPC^*%gW2095t#7-HEPftEn(Et45;DnKJjveE? zMWxttyFp-zd$MZ>vc3zM8kOzi=Tgk}=gDYeTEDTGNk3ZD_P}ht^amWKs2;vd=@Z2j zWM4^WGmyjBDwZD(RE`GLIt2mJV3At37V3dQzI4?|`(LAqj$>*~^;uKzUv21lmgwpA zK#}POsjFeTecNwII}goFpsf@#bt>UE+GBRPZpR@ZV;ixmJ`|y%MrNTYMkTi7?O56HD63d2-o4M&jeQytn*4bn1-|zu<#fd6 zZAs-mPj*Il%w&LJ!f*xCW)6}878kY=hw4qo)Xb>&M-z54-qy)~8!i>}#lK~ef_;0) z)hF*i9JX;itaif-UditGohl6EU+x@sN^}T+z+pB;# zGt|>w8I9vy_$$fncUG!I(^(pn1xc*KbPxG^=QHB;t2RcmW5qB$k3VL&h@yRzJiqy{ zmqrSIWd_%(I28|EX9_^C?`Nh)(O5h~G0u8&D3IoipUlw;-?r1DN zi7=OQ3OGcKt=RTao&W4A?`oufc^fvnlrC%X!xF`|#kA)jyTd5~7jk)YQ|VgZ4rQM5 z`yomuJUQpzSLjCk%M~vzI(<#IAhzGd4O!2oE9)6Z3)4;$Dt6#xm~l7v9SBy!0;HCy zfN~4@z_Rz3f3i#kb{aSUL|4R~8k6fF^eagMvOdcCqP%630S+rwae|$TMD>fyH>SN5buj?4Npz+TEGo@^?)F{b6@9*hi z!gT&Z6-0=;TUzGyH~41w4VS#UJf|_IJh#FEYjj*|d<`j8Tq-{G)GfH!d}iYRV0R}c zwC~K%1W|ct?Jze6WwBu38!w7AL(gbXB$GN*e=8#RZXZV#Y7OCK%Rh9ok^qmle1xd{ zk{lf$*n1}k73SU=Dmee4eY*+FOWFW^XLm&$h3GA-%9i@M{#nL*mFCPQel7zbzkJ9E zST~>4y_?EnG%=uPGW&0q;T35C?|5+^vxl7#MMM(}UG-L->k8D@qnyQeKVBxDpz7xr zAiF0U6N~iWq;vyqEG$7F^5B2Z0_Zp2-VXqFjcW>b|0HL87N{ZWmX_GQ>=Jt@SZ*o7 zTHhDlO0}tbGdW;IN4uv!6r1r;E!?+to`-K4MYYZJe0%aQ#sraoYjtk^=98H6<7-fq z`yQ4RkK* z0*d(1^UHLx*rE{8Ps$7y`)4dGn&Q5ay$KN?-@*f&GykT8sheKP+Vm1IFc*GqP7wlg zT``@leNLuADsRVK^aD)+lcKZ8Lz-y2lefy`Lc48|5h?7QbI@i$4wEt_X3ds!E)OuIocs1uR9^; zMPtLejfNq`IYO#5=U_5D%0mwBJc28b8_Aqa#{Tl6?;l4=y);2`B<9X>uAnSK!}`WE zy;oU3<=-LRFa1ev&K3llVD6+}zpiYhpe6R=g^f(KV4k4yLX|xcOwA9>qY>|SJDFRG z>Cnv;3Y(b#0i)TyOz0CFzyjO;)(#|+_~4$3=X|on?HUwKxDOR|UN+zo;IXd43ngPq2ZvE1 zgG`B0@D2VdtWv=Cvy6z_(}-eIjF#->TD<9WTu*NVB`dXptNh*pCJe4vy6z0HFgc`F z_VRn)n5xROY^AFyJ%v`;3?`2tsDZ9# z&;8xd`{GkKL<+)LBVpCqLh3cs5a zu6tTS(ql|?bGs}tnQO>1S*6aXIpx7k^i^2gpWF|{)Cs+6_bv>^4t}_+Gp!WsqF}s` zLq8bVbo@kd{ zIz6w8Hro8$)!?*d3mh1EyAmdWur2#A&72B9@(ufa9vlpf9$B z-KQB#pezjycN_LPA}B>O+v(mA-V73QZ^b0alZEUn{h3W}Uy-sU(Y4fKxlqLn${^l~ z5g9%i_R^A7j&8>-r;dRRssSxeX-4HG1=7G}>re zzam$DRuUgeoL%2u<3F>ve=fh5E1ppb^xTp#s!dfi{`&~D)>>^ybNMJq(30SNi286} z|1SUWJUQLTIiD0rfayoamiBnWcel3h z1-FWDgNlz*Asj^A>DnGklm)zc&YGk)3}S};Je#;J$PT0eX8Wq;~rw8pGUi<1?w`OK-- zFK2dr>7RDH3;0)gAFFv2hfPb`SPw?CXY_9dy7LL$@|xdVGz6Y)gOl+-U7y><8`gl6 zEXVf0l!#LjH#jm1k{cW!@X-~SzsjXJ-#iJUXI?lTQcLPmu+Mqp;FchF0YG-?k_6%L zv1{_~t6w04?Q2_t?v@a`Q%5pRKm0M_>AtU}0SOE>4Ua52mC%v1emtFAl^4m8=1 z`4Vclb;ohp{#P+w_x{QH;Y9iMPR`t6YB{=3ORWieI)rCNg$cbDuEZ zlwdei9+6XMz`d#+`)%-}?dFn(b%56gx9>4)K+RCq62HX^R9_od2mj-;A_s?vEmm>f zmIk)dcSEQZAO%};6SY|FT)jfn<0y9dPr`KqPT6k_JUh$eYPczE-jqA6JQmv+fITRX zQYTzy%y3`s#`Gt@Ob0;02V85{k=3Ov?EX27^NR1KdnQ0yYMCJDL5~p<0C40qV{^I* z3xkU!T1omClNdTiQjegRL1VRSr>2>lH(Udi+lQcv(##)4K^Xh{*Az0%|4g;8ow}d@ z703RuxG57&RAUusxX@bmUaw<2O&$uoHZwxuX&tr@ak*Hju{5Kn*xzy9eCd?X6dW<4 z6W7Y|NG7|ILKLBR*J9QTevFijH@GLBVCsFa9(Mtpu4|!f_}WgzEWzD($If29B0@XJeQ%RJ7+h8tVbM9oZ zO|vU@DMf5x#1*(AJRizG?@mtdbKtw6JWZ)dIV&Q4tX#vJbb;1^fJx(6En%(!4)d-3TJi`DZ( zx;-JNd(6jUPdmYr`K(I=s~GQZvbJeVit3llEN5%D{htJao1K=HD2-Ebp9T#TX@9qdB&+emFEnYdTKRovmftKkuSX z;r&4FlpmV@kMbw-m*Xo;8&V_K&;HNw`ae