From 05cfc849dbc94d37052b9756421fbbd84275b3a2 Mon Sep 17 00:00:00 2001 From: Fernando Cerqueira <45797410+FRACerqueira@users.noreply.github.com> Date: Tue, 18 Mar 2025 08:23:48 -0300 Subject: [PATCH 1/8] Update README.txt --- src/README.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/README.txt b/src/README.txt index e021d59..6a69b87 100644 --- a/src/README.txt +++ b/src/README.txt @@ -68,6 +68,16 @@ Prerequisites - Visual Studio 2022 or later - Playwright (Installed and configured for your O.S) +Installation Steps for Playwright (Windows) +=========================================== + +dotnet tool update --global PowerShell +dotnet tool install --global Microsoft.Playwright.CLI +playwright.exe install --with-deps + +Note: Make sure that the path to the executable is mapped to: C:\Users\[YourU)ser]\.dotnet\tools. +If it is not, run it directly via the path C:\Users\[YourUser]\.dotnet\tools\playwright.exe install --with-deps + Usage ===== From 936f2be2144c2885a34b5a735e21e5ad4878804a Mon Sep 17 00:00:00 2001 From: Fernando Cerqueira Date: Tue, 18 Mar 2025 17:49:37 -0300 Subject: [PATCH 2/8] Review docs, images and relaxation of Package Reference for .net8 to .net9 --- HtmlPdfPlus.sln | 6 ++-- README.md | 22 ++++++++++--- docs/images/swimlanes.io.OnlyServer.png | Bin 41231 -> 60621 bytes docs/swimlanes.io.OnlyServer.txt | 30 +++++++++++------- .../Commands/IHtmlPdfClient.cs | 2 +- .../HtmlPdfPlus.Client.csproj | 4 +-- .../HtmlPdfPlus.Server.csproj | 6 ++-- .../HtmlPdfPlus.Shared.csproj | 2 +- src/README.txt | 4 +-- .../assemblies/HtmlPdfPlus/IHtmlPdfClient.md | 2 +- .../HtmlPdfPlus/IHtmlPdfClient/FromUrl.md | 2 +- 11 files changed, 50 insertions(+), 30 deletions(-) diff --git a/HtmlPdfPlus.sln b/HtmlPdfPlus.sln index 2ec94a5..b448fdf 100644 --- a/HtmlPdfPlus.sln +++ b/HtmlPdfPlus.sln @@ -29,9 +29,9 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Docs", "Docs", "{501D5A85-0 ProjectSection(SolutionItems) = preProject README.md = README.md src\README.txt = src\README.txt - ..\docs\swimlanes.io.AnyProcess.txt = ..\docs\swimlanes.io.AnyProcess.txt - ..\docs\swimlanes.io.http.txt = ..\docs\swimlanes.io.http.txt - ..\docs\swimlanes.io.OnlyServer.txt = ..\docs\swimlanes.io.OnlyServer.txt + docs\swimlanes.io.AnyProcess.txt = docs\swimlanes.io.AnyProcess.txt + docs\swimlanes.io.Http.txt = docs\swimlanes.io.Http.txt + docs\swimlanes.io.OnlyServer.txt = docs\swimlanes.io.OnlyServer.txt EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "XmlDocMarkdown", "XmlDocMarkdown", "{A9894106-2EBA-4867-AE60-869D39CC2294}" diff --git a/README.md b/README.md index d7af250..f0f3a4f 100644 --- a/README.md +++ b/README.md @@ -59,9 +59,9 @@ The current version (V.1.50.0) of **Playwright** supports **only the Chromium br - AfterPDF : Save file, Send to cloud, etc - Disable features to improve/ balance performance (minify, compress and log) -#### What's new in the latest version +### What's new in the latest version -- v0.3.0-beta (latest version) +- **v0.3.0-beta (latest version)** - Added FromUrl(Uri value) command to client-side mode - Fixed bug in server mode for multi thread safe when there is parameter customization and/or no client mode sending. - Moved the BeforePDF(Func> inputParam) command to the execution context. @@ -73,7 +73,7 @@ The current version (V.1.50.0) of **Playwright** supports **only the Chromium br - Added command FromHtml(string html, int converttimeout = 30000, bool minify = true) - Added command FromUrl(Uri value, int converttimeout = 30000) - Added command FromRazor\(string template, T model, int converttimeout = 30000, bool minify = true) -- v0.2.0-beta +- **v0.2.0-beta** - Initial version ## Prerequisites @@ -87,6 +87,20 @@ The current version (V.1.50.0) of **Playwright** supports **only the Chromium br ## Installing [**Top**](#table-of-contents) +### Installation Steps for Playwright (Windows) + +``` +dotnet tool update --global PowerShell +dotnet tool install --global Microsoft.Playwright.CLI +playwright.exe install --with-deps +``` + +_Note: Make sure that the path to the executable is mapped to: C:\Users\\[login]\\.dotnet\tools._ + +_If it is not, run it directly via the path C:\Users\\[login]\\.dotnet\tools\playwright.exe install --with-deps_ + +### Installation Steps for HtmlPdfPlus + **Client library** can be installed via NuGet or line command. ``` Install-Package HtmlPdfPlus.Client [-pre] @@ -406,4 +420,4 @@ A: Yes, the API supports asynchronous operations. **Q: How can I contribute to the project?** -A: Please refer to the [Contributing](CONTRIBUTING.md) section for details on how to contribute. \ No newline at end of file +A: Please refer to the [Contributing](CONTRIBUTING.md) section for details on how to contribute. diff --git a/docs/images/swimlanes.io.OnlyServer.png b/docs/images/swimlanes.io.OnlyServer.png index 5c510d68236c8e99d361d4cf3181e21cb6e43f51..0de699dbaecbf53179cbf75148f9ed37439fcb87 100644 GIT binary patch literal 60621 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

9o2*=Sn zbiux~s7T5yi69%|SKv^YW5GW#=K3_Qxm0<2)3|2*qX1hyBg0*d6XY)W1a`53D|&knNE&5 zKRG4EHp4F@CI-94W37wbzJBKwW6N3E5q4IgDL*~3$upClDCuWv_V6`L%M(be9DYwc z*CP4mD|#B=m^_5B1B517xstI6C(!*AW`_JFcVN$SGnyV_6YFGf>u|^hQlnbh0{Tt7 zFFklqx+F1nD&h~=OAW`Wl}DN$ZuVYDoV6$Jw71eLtpzXGH4NPaJpt|Rx3_y}1HS@t z6RK_VW*z3t5*(%3-=01F@uWP+%+(e2J@>XYaT_@ha{y`8+g@dX+kugREU7FjZEbBc zGc!NVDqdk4fN%2FXsT^rMDmps) znjFPzyJYNCS#Q&Y(#tYrdQj2QA}UHR=JQ1O_32O5w$72y4Gj&-kXXL2Cf28?r@d(M znU=#}U#_hl9oY-=EM*A~W*&EaDjTvPmwSmUK`tyJB7c#@_SrDHZ0!^2s+qmvjqxX6 zUtcH!Eu;TA6dDy8TBf0ux$ON+cod$8_Ng2aVG3)aCE66U@Ks*)7Zc~r02}k^&@c#K z2Bsz_*|UnUO(5)klKpUw;v|1T*lLa2>?H?@tJhFxR^spho`Kx{ni|BochJc?-w_`KiR-@h&?v$%iLC-uDSH@#d@ zlH+{tSD6A@X(+`OZZ-impqH=>^aj10R_-?WjvCK~dno)CU+LQte!keR99edm(VJ$Z z>ihuLB+Ck3sOApeXg&24B!iP_9sBzsdtax#diXQi-%I|5I1=73Mwv7vP)}Y2-8#9r zxF{-y=Ofu1$XeOj78eycJ2~CXvL#|mq_X`Fq1Gf#|Br_ok~2huv2V^?xZrs3Xek0Q z9!ASa@zKCe5KwjhcQ0|$5Q8o*FQyl~nIWK62V@!`wK~5%7gIO!sc9AT zIHk?@x;fvOk83&1jQial;O`&&jL5hcaE>P%-@bl*tEtKFw5ik-a_o}-Sh;SvXa z(ff>6iABO0%h{|`rRj#A>h3OxGUoS zo$kTG!8FauMbFrn+H=N0>_?Njlk}l{*UlOEyo%!DA?+*E;Z=2Q&st5`yPtb=bZ&k2z88$o|ToC#K6Ra=GI(CM<))+32Nd2 zC`OeG(MSLcytkWxR@~d$E8b$Qqoktx+wypC4^||WMi%5}F;X#K(gAh+9;jn&yITp~QySuv;6`Ymu?%dM5ESqVhqTW{^1*`!Uw5y)uqC41ZY!UY2qYoYv;f$%-RO_&1+1j!Qv|5g;@R05=(lFE6PUF) zO?zXSeQqB>?_sVEDxx=64VD+9v!^hyq%@^?4zkPq!hy3WzfSh`$(d*m zLN5-=S*EbMwnnF%+-WK+E6Y{QoEZ@j0mw&i+tPYK+3R0kq*-pf zSm(IByj%yFulmvhqaW4tRW8oYg&kKB74}B6BnK@uHD^_QPrpr0zMH&H=CP5Gknr~L z>6-$-Tk(6m2R-`{UiiiwFSQW{u|`lHI8ny`QvxH|0{9yWiD zhKgDiKf(t|u(PwHk%<7ys-mDk%w;|ZSl=%a5`<>v=CI}iu()zR{Qcnr2^RJO(Vov< zbVrfx9Ul6w_u{yAFsSEIrq8O*l<0-e8Y4u8hN5C%_<;83?*2XmgG6S-t>sp4QuEzA zJpUa~tIvbm2>$WA{Av9RBb3*38yiWBdA*?fO_Kk^Yk24l5V3#mg)x;}O_ln- zc>cU&k~qPpivetS@B066g?WPH-|y&0^7pt->$ zF3^>_9xWgI`SWLe{Tx&dsYs^tcmT4RSL^EPC_f#xJU##@Z3M+XGc#nl(F2k^k*{iT zDP?|tn$RMp7)dU2^Z0P|I7>bDyry)zsIXA0$@2ol{}EuuHQv1=6?Vsd={&$vTNa5) z$o?lgoV6bCE_2~9Musx|0gz%jBje-aqpG0oq$1e^1>GCP-l2^9eT)48;jNLrKJkS} zQUToJV1All9-HYmSdg|E1Hb#3bGl&9&{pGN=>A+ll?0OgVjT`q=Uq}lVItu<*m@{m zL#coLEH58ho%GlhTDiuYcm(B8PCPL&@!j3s8$;MoA<1Mqek{L;>bp=f*~#+sbT{>y z7V0Vl6sSc4@6xOQZyk80-MV=JvctCnthlw^-Tr1|6&00D=G~s5p~&J$gc^w)`&o;~ zC-JHESF7PCX1~lN&reR;B7EYh3AwoO4@{t-UHDN|g@>TsaJ`vgOB{7D+tFdt9*726 z1RQyeOe7;KtNEJwmd|>uEPMB#UuVfH1eqbIMG+CtULkk+jEG!j`r}9fYIY!jP1aal z%=^k=lYx~Lvn|Rso!jc`i3BrOIKA00CNVdvqtE&F7+_?#wzewq04W)(o){DuSoQ#8 zE~;Q$teRm}bfO7Sc{)HFP1ihe7)1V3g+Ute4YDmr-CeA~s~&*H0$Xeh1!U?oHGAToulR%cZJ{wS%=g|waw;mX9=<%M(;mop zjfJCWaoYJ@m68U+rqKktY*3FCn5gep!%B?K$Mn+VR@|+2t*1rlXH=K0i(uVAk6(k& zTK8ujkhI6`=*38|#23o;jhv~hv8ickaj_@}o%I+DS&om(@L{zGRkM<3(SL@6{09G1 zxn!`EiJqw+|0`dbLMmfrz!Rh`3M;B?!?86ryvhY2K}Y}XzO8;xpfeiLI?TbArKh793)OliZsdVNbN24*d3Q0tD4yZ9d3sS1X^Y=4sz zIUGX~11m~Pk6>lUnRF2-WL`H{R8}e~C|K6ZmOMia@@Hmb42z07j72bw*Lv!6bN(eP z>}x$PsER}im|Owgyseo`uOCYl^%3Oeo}8Gdl(l9CM?FJB`w|f$oKlNAqF{J|3>Xgp zjZKDa@UR#O#Lfr-kVwR3esz7VHPA%jvplDuqeG&t{!twU74V57RVaSrn`i%O(f{jG z?|&;8c}c-I&hKJQ8#dAH)apRCzOELq&C&4ejTWh`;&!Q8zzDp)&o!D;nVaJm6pa7y zy{CsFjmyF=zgzJ3ySJ_l1%kzsfavPlw0mdKAK|KENEWU)<%A|>e78z${3-Eb_B0eE zgGsZE5%+XNehP3IANyqzx(|dlG6&|kc8vX^Qk88ooOi!@i~V3AF&MmbN)wq#BxaAx zaE7dL=~QkxrB%NWTN*g_@DcklG;)5gn`&m0iu6o$df62^as8cD^d2vDZl}jMqHTGf ztLYC!`=K$?8^Ug3e8vgQFuh}V;@!_cqDNeN^gV#pVk9^GUaNh0Zmitrwx-;q2MHOm zrnYurSFE8rI{l-AvxB2!C4TepIpXK3>1hq^Q~(WjuuPA=x+gCwX_6818DRDF=}de& zRhhQU&yV*A2%{sQ2>_w*ec<3wz+8HKvbVLq4k^B#AD2Yba51xco!RoQUO(aKZp+GU z9G_{SLuK~q)q^em|1wBVB4;ckB@=wqie@q4j)wB{Yd$*eertZ{Prb(rc*J;xyl}FW zO%lL2ccr8hoiWaqzrWyk7by0koX^SO>NwgL1IjWxv9n<+q6nA4>3Zv1E;cdVT*z8h zA93H4ey<6M-~6LaDj>Zk>3IBKIYX@)Rqy917Q&z?&>m=auftD9#)D>q^_+ML2JM;! zbk^CHBSR0Z>ktIKL=znxi1e+e69jBFfw|u(P>NUSCCI$YU1STcpz5Sp^s6hX8k{d( z(vpddPfni|0K6S94^MIULTk?Z3c@uNE(-{uy9Ihw6w-B2Pjp6EMh@A6+sxFI)&ie? zJlj4!17qL7P;tr6>>x1E4ZK>TDCaB||q=I1o7hcy=tSZil-SB1!gZkXT?7V`0Gq9wpetpYUk(cpCA}7E-mRKC-3g< zUiZilkdqS=Zu@OJG=_x8N=a$T>M)fkM=GZ+qz6H3pznW8+t1ZItt?A=cpwq*^J{zW z&5qCZl8_LqL2QeQU8-H&)#k<*{l#sSSy;+wc=>pyrd-MSCUu$$iV91N0&>3+lPVj; zuZBcb1t-NilO2#nUbvj=hiU$9&HDX&L#&idf;90Uez`b4DoSdALnN7MR9jEk*2Kg_ z$vHP6;e(A6m)>X&5pk1AtH~`&zy=;NKkp>pBqs9It9rvI9G5>6Ztq{>lyx6f$jEGRox0m=P{cPBvE7GJ{$)&d$s%EPl5K zZmJo>9tYKK6{=}ZpP_Egu&w$-UF&&sY-(m}YpLDmK`#uZzeH?$>zgk?Ayes`NETtm z$VPWm{n!YKjJtWiWr0ZO?mOPd_!C|(Bc>0FVn0i2J1XphZ!;H+#u^d@b^E6|^Gyxn5 zRL67&?K+37i(?z~irm8Tn+`T&7l&TaG%scjkJDTZ`96kx)h*B`UAKPj@VS*?)^5x$ zE8G5)b@d6ZrLpmDGk$t-P#vg9rg%cb1kb0lUk-#|knQh}U#}`?Y!(gE8tHeh(n%rsIyD;a4 zRVcdxe>}J8acl8{YgZ55E4uuiP8k_#aGz>OBUMR-%yUy3NVHA6`s<2{)KP@(q@6#Sgdy|3vkX8OazlvCWexw$KPo|7;r z%MZyZ4~0hT@9iE2ztyU6mKGOR^S(Rz?UZ-4;FpNcYdf#6tLs1hv(!Fw^G{ojxcEaa zNw@U!*RK=CCfTSi`?Im30TB_*4_%#7wu@C5*I!dp1>KKZLqkJ@Z|bjddH|p0&rOBP z8I$qBf%;{!K}&NV-P>II;)mCp*Kr``gJ}DVdX{PBs6j z#goRnem^zlXH@*OmILu*sAA(m@Zq7T798uQTV`p(Lk`P&^%a?AiBUJ_Xr_3CF_N4y zUz3N~aWt)VlA4=E_xK>vt9-mXEPC}{iRNl--PF}5qS9`Wu_D9|F7`;sg$y-qZQq-= zgmSFCf-KYoxZ*~qZBvlQ7tng2Z^wpU^;|}xnkbuZt&<7GE3JiK(ouF{YgYX^Jlv$n zv=4qR;k{HQoZ{ki>B4PK=AE{aWRKI{iDnW_t_*=djG3fA^KkRJHVaRTvO9HucQlbL z|58&`Q_n9{nHEjPWxd+zSZKB50fFEc*^#HmBaFO6_g-r-TB|`y7%_0@ z>VjDD@Klef-Lp12xN2!#rwUA{;l6nBes+|Bx0kbikAj59Yq!S4vJysGk-h4TB0nu7-W`jdGNg5lGPivuyrSG2T*JfC{e zF%F%^?tVY3`S~+Au&TN?l8EPS*QVs;{9Ni+7ab{uaDm@@7v-%K8-lv^^-U`NlHbrU zoQ{yH+S)ah7UiMdWYK3sD=YS|A1w(8Kt)qkQ&Yq6t;gUj(k9k%TTNBfjni*^n}hb9 z*?XS)tg^E8V3N`dPBRIetpXtfV#tx@<%#$YcdDmnXXq#xy9RoC;fr6Q!Xmawe5qdo zdZ3+ob2uTE)e;>YUD|4DYNocT%DJjGM>i*jrq5ML$yC#w-uOp$_Se3q&19sBd}ZUP zy009P@WFxSXwj$()m~y$7dy|T)O~2$cf#`|Bm=heoE=+y|Gw<{5h!SOD%ITuFBG51 zo#{8|!l$d~V`NlbSve7OX0DRR9*kyvwC&*N@+EAyr&X;Uwe$V2nYg(4ivto-=WR;! zz!!u#IJ}S90tG;ZM@Q9oiXH}}RLu1SXJ)()>TkdIOnf4-uczYWwSN5EQBqQ}-F3+a zN#}K;_HcFm$SH7ndP>a#I%cD;o7-DnK0Y_r=b+Bp`jXC2Hk*X}EL0#qanN^XW8+H& z$5EGnfMEHIVB$!NoAU$KKwjP}u}4ZQx9As4GZ^H;WxvbYDoWj?q@gB4_65JJtu2d6 zN{klvye$f=r%vzhF;#|#xp)8Whh*Gw; zONksba_=ofNy&B+4nI1bMUe{NlRURY-rGEsIVaSdupmNbH62{)XsR4};Lt3bNGE7F>Zy>*1{Od@#^g*J*HE(=b)n_occCj--%P^g>+T-Cb3XO}p9j$0Xkx zO8a7+)uSRZBV(WDnr6WgK_p^4u}L;G#6lb6Aa@ZK=O|a3nfYlLOG2ycO8-+T1{T)E z`Ee^@mVgEH+-zVbFW;ghav=~Rfm##WGrTFZOF}FxyvX4Es^?UNX|Cbsry>d#c}#qK zAAb~?;!`XvaY>ze%aVd3iI)=)n=P;Y&Y9l@F$0?8<`$d`IWf#FPkDMAbf;6xaBkWiHX(cI9gcbL!+Q9I&MIW_=IIc;n(3IB=&4; zgn^kEv^~<>ojr7Uxp|k-k$po$Vh+csPb1uC6ZQ1;=E_vlg@;%VS63m+dtkP+yTIrD z=hJK*k0YH*u6pkH*x2V!XeMj7M{D70t8Vd}xU_0|dQCY2Ci3!DzIK=k%suoe5fSRk zqRZ~rH>ca%tNRhu`*)phx0aXEQ&Xpx=T{H*0^~d|o8FV~+DVd>S6YCSw4IukCRDwH zMCQD{KKWY(l*5Dr<1Yt7z0V8&exr+)?J?Y6WVo8Axs`sW@!o#EF3I=grL=NnWP|I0 zq|W&P!QYL8AUPI#`qPUO@k>+FRNcnyrrBBgT)Ho(Cs44V$H%TZ)$=QHjBx&D?X6Cm znWdecpVGb?Z*S@Dmf?PW153kE!>pituVWvW%XjJvkhXAsqpqu4VZE`tCeKi5p$rB+ zCs3%8;sC$rxu%?4%mEKO=YF?5PXmyP3=I^H>@_4yDxQ1Y-9v^F9v8c|1XLb8*6WhT1#amyh#~04m-_ zMI-afW2^XwseS)C+N37#va7hP;#NvTr1E-WMMao4o2n{jtM2#j@we9%Re~FZut<~` zxho`1KgsbWoedEbbYG2bXD>yps;+j5_)Ns}iqu(KP>@{MAvY__2)d|6va%xVe*9^B z)>8X->sZ$B^0Q+68j~WH@pX8D4<9DK6pMGFER}Dt8Pr%GXFiduA10_3WpDizcTis) ziNF0kDTvsRNt)i-t`-s!FGsJvdf@%}ARu1Ipybc2X0p2GTUD=Za$0zEpc+7Bo}5}Z zYIIw}_>hD4#vXJu9}Il7R8;gOB*xvEozSCRQJMEz7UIwZSL8fiM*a}H-N6!xwM)x* zuv^7jaN6>+29T+vUKJUen?&7%*s3{*POBX0uJ?(+!YbLRP6zSRx1I9p>Nq8516CG`r|yT_PnQxre>cfZq%t?up8JO988+L_KfuM+Tw^JZAcgOIK9WvX}L|a zA6MC$6$_0~AtNd>`=b;n4<9*EinJH;JPj?;Q1C-|SF4mXhV+8NAbl@p+nar18?A2I zd@fu?gS55U#JR1-sy-THn~~)Jbo{}DW?TvH`)zTtxQX93+E^_$seAS~f`a%j@W=&{ z`RxytYVJ-?!&+P6_K=Y`TdN>`i%8+9sOabz7+44I%%RR!e@#+uzQ>DAxoDuLkHbdM}Df{H&uI-K`q&k-G1xuNq(PvlhsjAc%n56mcX1R2} z2dp8H9i*}F3%b6Svyk87!>TrLXl~vdgEq-V_?K($TqTw}H(!~~eHDZ5fA}_xM%}Pw zU!446eEC|fvQ!Z22|NzX`rAF}Uc~z{`)TH?H|@y*_`^By+xttWBN1IUM{C^@8~LgC z*5d*NXFmy*G+OYne`@ss`fQluzh|^cSRUbJd5kk+Zw!9H=D6Nzj{jkYCM?RDi7Cta z6)U~H8%K=j)BF^-x3?$FudQYOu}J!wZGZifljmDS?_ZWRDu==vcYk`s^1LL$<-o1ObKi_owlc}@{HWfuZ@z88C9~va$f`^AM+E|VhUAIHZ+PP}8Z->!S zt4>+ARp|eHN&kmq=j;V=Jq0BtHIMDfU^)o|p~)u0VE$1FiX~vV0K147likkR+S!fRxayW<3R&Kr$Oj5xFYLEj zSy|h3wDVwaFfcHH1!PE1JW+Q70K^UbNYK}Q^X3y{e_!8Rt^Eq1^s{qv#x$?5uThHt z0gr@^A3@C1KQ@Nb)vbl7)#7`v?|1J)+=HVSCMP&gD`ARHMYRM*oZr5Ed;a{n)o0|i zv=*q?C{^dRe|V@6+=vHk`SsgyC7ekLsL5lMg-w9ac)%<{FL>M0&240GP>L2NIYK~w z2A20VE$~LzfjKV0BiQi$f2=0g&+N#PpA%w;2$$riMjErtv$j0{MN6L1;dByUmS_toQ=)5vnc_HReEY3WhQ7$i9Xz zBOo9Eo-Nj~%Hd+_1I_RocQ9jpJ(VWxF@6qq)>bGi5WMK==^b2MWljPE1COQRP5Aiu zPzLyfYHMq~JUu@SK9N?*3c=H!Fk&ejKOs%{C4CsT68lQ zUOj*DLOK$#r$S(>gdS3Xs{iilWNd5B1gB2?d-*P9Hx?xR_a3*w0n`0B#<$ zfJKh^frW*X9-zepBTb+_>KPaacLmO#vL_ID1Ozat0=L3}qX`iOiqp%aQs} zic&dDWWW^bWTKh_Un0~=N{qzxM`NQm7)Ss)D!Zz65OziaAik@<|MusXxdCj)n{_yC z=1fC=I~yA=-2P4fmlxfMm3gsHsB0Ktw`LP(nwamMr}=n!-&&nx=kw<|GON8KRo5~w zu%{(1PGV)x5z=+2{SC*eIlr$wBM~}+p735*msC~HUEj2LcWL`YQMBP&| z#vp8q05!Q96LJw@;TX0}LbElX6sF;w%ruWka%>y7WQ&RwO+`|7c5(U9O-jOVrjNj7 zE~EDMaAU(P>Ip(UuTK)IduK3$7r`L?{DKqkh;2n7PKPAk0!99&J&?fGE_)8({R6(F z<2xx;wf!-jKn+GlMqazc-qkB$RB!|nb)YuCjFlxXPk#=Zh~)dH&H}Oa{#@k+ewH}= zfP#m|HLxl*S&n4`Q%@bZ-*t6?At5>=FqO`#x)lVnztZvuWWD=aTNdCNRAD?b#Ffmn86kng-zFlujVBPt>jCJadaK@5l9Cm=s_}->di`>_zPU+CtJSGTtYz)f_+B=PTfj$GIe;OzU~Y0BKBX#p>qfbc>&# z&rl2Om|-$BW+tGm0E6a=|BU>GpP&^*=a-kCn6!-KG&MCfH>U^W<>i6tzPd;JR;>2cCUpe7NT2)s)B`}-gR06G%PdosX?j)f&Md2mo^cyntjKQHg&;@DVh zLc$D4B1DIB+`AlQJC#7H5k^Y+^^HA9OhEjFx%B?sJIcm_HYNc9BKZ)E;xU4LD-bQ9 zgwe!BZla~7%`7SF6s4v%21s5N{MmzNZ@ur^dW?&tRiY$KGvE$90B(3S#L#gPSsgoOC{0pyN zEgF`VmgeTKewqPn1kMQ{i`jfnkt+}G6yOCj#RGydNC4Ug;gN`Xy8}r}G=R$4%#b&7 zmNc*1lv4RQI5}|@&rWeUd*y0ZSB-}O^*=#CjQW?y{n#)W0~3>6(3w8DsJtA^^T<935&5LQzo>=(9zEoE<2ER>dJZFJM;J?2wbV=bH3Cfo`%BBY6k7*MM|u`zH{O zX2s7hET{=@F8p+dSXpHS%c`$`_c+7kk;LI~I$f6!qvrxceUph6zelv^uV7{hMJdf< zq=`_Ufb*#BCt>uoo!HdTa+WdEsL{>*iZqD9sS>*z>+6QEW$DWVoHj>^Eq3r$E?4|k zy1I~*&Gm08kb>_dvLnfaTtU**gsHN!d;U~8{FT`I`vKuRq_);=rP&AMBp+{YY8o0G z)=Ild+Z@#6bM$mi=o3@;*GYmKv zKlu|BBS9!FB?V^CNQj7Ute8D$pJj4_A@M0FA&9ZX``8 z;h4V{R0ZZwR==17w058X8B7}fH4i*1Vz6m$HGn6_r?n2?;F$YM#FDO-*UU6ciM0 zZf>+6%*=iSY@lQfT?zqMW7ThT2U%8C9ztoc-* zjZF0d56{&4&4)=qD>y9n!0(0;>)JJ4Op6B~XH^O6fFTc6Ab{ljrBe}|>2|HPzkeMc z?=M4wgS7|#ZNH2E(OlqaF14;ji=}5|*n@%@#LW!NXO|LZXJ>#^+)_AMj@7P^Xr>~L(h&4uK~GnAFrnq2)bbNz{0qbh;0|L0HfdO8 zBP*NIKRG!Gvvhl{+>-xf5)w*DHXDdv0{+02o9S9|zdJ`nA|NfhCTO_|5?u%STnSW? zn{o>#ux>#21l*#xK!&LQ_N~9Ugak1CCd9`lW0@xz&~|2)ltg9!`eg&8Hu>}bdUWRh zT`@y1+Wl;$h$qs(QzjZ}>ec4kLrL?Y46&B1tj`KyUlkM-$f0jurUR{N!RN9vcA!l} zjGv5y9a~TN`GN|>@9^+25Cyv5U(9R`r+GpD>qZzwBTmb*+b7CMNi8~bU|3v#2!!24 zY`vJ^EBD+I*omJ6#YVv1=>OAipNc|ELSicx3(~W`mX=kNE!e@;RaKhk6hDBJ)muI7 z^V-?z4@S^VfKelCFL~nu-+pJ$8(rN-tBE`y?;{m-?$y4~f`!S;m(?{j)Sm!}>n{u> zxu);m$6cJu&egl@fgCmDC@$Ux#?}4({h)TL^ElfC@-jvs#sPYn2yuck-QOR72;@xw zb)9$7DBurss{w>18W?Q5V!LwNH7`j2yDcvRuV8L|5JeWine%a7E)X+&3t$3Rr0rth zlzbM$22_)%G`X5UpQ)yX69`d ztX%&2JQ24gHp}Q(C=ShZsX<0k5)nE1;o4fj5tx?(Z|9gT5L|^uN83Xn;7Wm%D?dHP zA)m}TMrd+0*6O*@CD8SOIXWT|5>P#4K~aIY_4mKRMpQ&3t(QnH8EJn9-bL=^0ZlJz zT!8~E1asS;TrDye2_g8?15mtj#U_#mVYie2ySYFE88{63lh?77HZa3gqGq%A?}mn3 zfOT&^0LiAf3l&>DtKRPF>M3x4P#eP?z=P5nBu%i2R8+9Q2`6C7tFxYBe1}(oT)4i! z4>{;N)h96zB{VQtDJv@j_WW!sU|C7c$cTQE!{DD~1{3V^+Al}2J#lw;FVbs>N8L%I zoGI3k6(L5)kWJ}iw;Im{zLcz4&}HyJX5RoAFVKX2r--U+0XBwCSCH(rbC5Y?2>@A| zT?Z;%P?tu5CTs{D^6Nus_w3Y^3lLpfa-J<{$-VZkdIn-s)F1R=t0oQ(4wkmI(l^JU z{zO8q%+aW6K(7p@E>s*GIBnd(Y4&h`3(yLah!gQT=;1Xol>wYAEh_O#VPR4RE|7%* z&Yf7ogwbrqV>l@M;}ttI$ku4Dz-lpOi$g%A9wP*LpI!#j382)KjU<+S*^HV4Z1mYN zq0^02p%_$2d0-0wx!9O(ReVxXA49ODFyaU{H8r(@qGGJVWCVp6`2g_dJFazeuvQU> ztg0LV>FG#+zr-6*GbH1OhV_o=INN#xp!I@D@hK1#kTyPl1e3K5LV)jYNI)?N6Y@T< z!i%HFItv|s?dtC3rCR-oLz?zGjt=3(t7u-YNwoGL1xSQMHnMHtJ*=%)b$>#PZd3*O zU?41B3#w})D+SS-HU9P6w=svjJs`NJ9fLKWN`%Lu!V)T=J2WODBb6vs;i=FuD$@?!Me6j3W(VL$Ow}<0N;W8Ge)*5+7a9q zPtP0RJ&V;yZD$q~oOjO(88wolXy;-p&Z-5XxAyk-ZL(OY)Jfoo(b4B2>E(zA?eRxv z=XK_<;o)Q^yzJ;3_bJz^=t3C=>|X*_-hMA zL6seIb4e+|)s#}Dfdjl;T;LK;K)%udbwLTL*ExRH3yp4}qedfl0~Q6)3%i0^ z{ETB3=v+aNYP^5{l9o0Rsq?v=o7*Lb^3C=2vUZ>~1_J=S4<8Z|6KCh=6*K?|Lr6}p z|K<(g&HjRdZwM@ku&}U7D!-bxwgP&0mv_DjKxQv5FEBJVH8lk#xq?F2H9`T0NjC`I z{QP_ZeEf0$gam>}(DDC~Fg(Wv?xGhjy0p%gBHV%Tt-q(I=iDFtkXzzb%1(4JTtpwr z8j-xU3I(N}Bgp?vilDRy#y(_I!_H6~UIOC3i869{BPJ2yXc3jOvki%=q$z*b+6&}4 zSxL{2R$2^Nd^a{WKo>#BNcoJ*dt8pDj$M#g%y}ETqsI)WVF6oLok39I^feXy-HDVG z8(mAp0UFt;7;DVL1fY!1OCcRcD&~l*bBOL880ZMv2jy{mOca@r%uh!^kQgx|f~mWy zE;}VVZX&S0MkWzRaIRzrqC?#|yz{;md}1eTwq+C%5wQyVVXSNU?Q_f%^9($rXbhsW z%S*Z~)8#t$INGE(&MaO69k$srJJ9v)>unP#=8Z4^C@PBZD0eHzdPbna5!W3gZ)67K z=l&~33HBsB(|C^o+cIniTo4O6T29_kp{ z>fx|C&R3MpYf5g3=dIu!uC}D;g{sb$G$~X|(#kSq=&Zb05_di0arHU7uWT7QXXQOw z@Qq{Y!j5SRm^N?TzAainA}!N!O$eCR$>Lq6#VlV~qwUU1Hf{)QW%M;8YUW+g;3b@N z63MxE3oUvv7pf9f_o?JNCg)bf6p-tyN6kZ7J@a>4TW@{P(?|EHS>ezkXrChMt1YwG z`D;#?v1^iOqy$Ry^WKf zYlD``l>J;8-X}r_A4yXC=eOMDOTscZ+wzVPwCGedgGuD>KqIZ{fQqHX3k13yRapO3h<(^F$f6btcKGRZR(SqqLCrKk7Uh<k{IqJ;(3v#y`=8F2TkhF5DGQN#qtY*UDQbww z(AbPYbpkH7RmxwP%>Oa9(ko5ZS6;V@QDq-bHkIE?UnIWPL?wUy`&67X=e4P*lq(ss z!__{TRle>r4*mRFRpcF%C~D5W*x$w~ybWwa+mgyGxsy}d60KzYw1cKSr0s0HGPl~Q z4%kO-KW*i(%3F$-vy3X6jJNLmu}i?6`D00@M`Fur7p3mvL*B*p422Ab|?L!Rl1}qAM$V%+6_?vT3m#y=dcsQ?cGi|F-fxijY-p?7moo#lMhHK_C} zEqaP+hud~N(pl$IQRw3@ex!L26!bG`k7^Ues0z{=BNlO0&eY zW65Hn-gA~vsQH|MnVOf1GIYH%xklzTFCl-++JA!{rs^O?n;Z|b@fu_shpbHGKTpzB zT4fuX##NJ~$Y$6LRZoo7u@W37*YcCg1~zL@EpJ^*BTLIV(2r`7>+PM>MR${^oX&I; zu9SI4gOVJ1Eq%Hv`TV7`Eom}KH}(alu9m9S%1^k%C5nl&-zHO)0107$D|hn z0PRE5iu8NGe$GCaeg47O$w}(r>7!44A+_gzyTN~nWT^sLtP64;=crUF3T+#f*C0yE zt+Bdtf2^1vH?H6I9I*`A&;63h%hxpQ+%x^B#~zBY)nm9RN5%htYV*tH{7}8W?hlWq zvj<%-aIs;a!^&R*|NM?lzKk0el=WXouKyFTCQU+{u?%gUsZK8AR zMisWSqw|!|#M)w2>RRKdh;8Luj3QM-Be|nlc(% zTJmVD;^E=Be(f6E0zN)I2i)EF+_YIvCf{{zN-QfYgZ%++LtcJ6P#qh#?JzPKj5`(( zP>Q%RD7tI_?{P{(C5`dgkyCra@pZ#owKj~-*4U5w?^#_ zfWZkghY%IW9AJI~^oKMK^uTJil^h579bub7OwxJ1V}W4UR@x7vw>#$LRfs$YfXc27 zH8tT!boyj8lmGb@a5ruqg=?P~9jzvs2l8{%o7la#j(fPfZ&)?+^{Xw)eAm4LXC6E_ zzJC3QneuAjbO^HowB@k9v!q_tKOo?9)SLZN1e*fR@#^Uqx7(gYIWy^VMI z>Z!7~H;7sowC3$=PqX(F=8yhHO^4`~_x!yxxZ9Ll!VD5uGlcf7=QGfP3$HUcB95k?`B{R6A4K8}{!%{fpLk>y>{0)O_>) zw*&5(SBT6)C}}(|V?qA57c0Rj4?$%9zkhDo{7I+hcreIZDVw=5T`YxuQ%b68@2J9` z4VkqJQnB&TQ4>?sQsPwmQt{#9kL`8&`|iHS&Us?E-Qdq5Lg08C0JvYrZ$^Ar(2sAQ zk>tjH47S)$b`SQjsp*2cXV3PQ2x`L3yQvk=7Qq~A5mwi>JCOg+a~S0Y^qYQcx);1^ zW##&Ap^}mkC7XL+;V;d3anBfB-uLg5?GJ#KniOIGAAkxgJ@`{oW24EIW$WexFcZSx zcvv492HQM(3Z-Oa9T5nJq&_bY{>ZK{GK%=@_hG}I7nijR(7`*9XDT5dV-RbC+wf}2 zgRnoQrKtCrcwC*GAAu$ksWyOP3T{^{`SWu8)X{)o*FG`4Y4rayqS7xHe^O~_DOP1} zZrvZ~%a+;P`zz%BI)6D}V0&E;98lYzZn1aoxwJGl-m()v0DJK~5`+Z}5s9tdWY-So zC+}z@Xr@)P9KmuCA(@?L(da*bJrm4Tb7Lc-;e>Ho-MshdA?_-KEnWn(;9kJk{_B>3 zFI1v;b8>QS-TH)kihkGgIZ(~N_Uw7>T$OrwPVW?AZDi`qR23E9B94mPBR+H-G&t_5 zV06Upe}Nzw+6h$$o$djwwsyXbGM&{C*i-K2>N+5-57Y9GU2*(qiU8ZEuReUh%WLA> z=eIZrFJ8O|B><5^<`0{VP5F_7U`PRu;eelh|NQOPSTDS*w|$%BV6Mo~(be@fIQYCw z=zL>iBS?^U{iRDC#7=ucqHLG~(xAYyNE-c=l2Xg_=ga440LB47?D%A>_VZoV*2jiw zPa%&Z`*FukE-o%h@wNU5@1g#{$GGd#E`EkDwoA#mWbEC$SUGQ4I|Bj&1Zs%z7(yrT zX{1R{PY)+Pt}d{EOgS3O3-<>U8xR%bm7&H)0+Vzn01&@#Q*PW&)x$cHk{pjs{57K3 zH7B;|mILEL*StjP#}H-dQiq)@j1EOAp4&oj_`nT_L(6DS!seAy8k{?2^!1P9gLdPd zl{$tutEQ%g9fGv05ol>1JyL^ArDRdo!gse^JEeCuqMz!NBceo7Chj@Gc?&b3h?WQC z05{(hLcHcRg(cwhgsVLH!2|tuT3T8@9d@DiFt?7C-M=sXYS-Sq(ORPG0yS3iE?0;9 zwrs=N&f$$@YYhOYxb+4>+OUvqBe+PZ$>mUG#%^L^HEJMWMxUm>DJA8#&tF_ z-@t#6F=Wsyc??HZfpy4)jg<9-rH#$|H*YpmG-A{?bmc>AV_I_j*H35&&TU-Vx#$^> zj_0964XKr*QNo2+1OhW%E%aSkz`H<_M2J#(AHwr2-T8>TTq?&k?TBlv4ZNL2z;g2o z3Y@++8m+Iu(wduc{YKeBzCgUt;trfzvJ9`j$mdJM!gYvGpeepI$rWg1h4Ym%b>12FXH6SRm%>JH9 z5fFe*1!r*HSj;QeiW-ofH5*Aq&~$n{y(+}sCn9vzy3lrxwx|19{t6*M-cLM#)&2-| zm|A#?`(kMQLLQ#=+cVS?R808av^MWpnS%gOrC9E)(<184w8^z>Y1Y%~!?j&kKq`2f?!6wU4YmiRu1>s{%)`dUQ6zv$*YEwT{~Co^ zUfE#H$$iZ(a}I!%aYsa{vHZf$zJWB;0|(wgt~Wcb-oDnt#-{DB{B_;p&&hg5iW|V1e5JEWOMmoN zqceV{wEwC7y3V(R>;s^rc;ILza5grZ4equ7NZ&!kg`lc%#rm+eUcSWz?spv9h(S$n zdF}EG*#uv|eZwa8?#$Y_HU=4p-!C40VYPSfw{DB=5C;s*A_dML{~7fUk==mHuxJL^ zWD@-Rh5jFhP?z80^e!EaTQm9vsZ&&tA}>D#zg~l_3X?Xwmt%S=Y>SCW<2Cs8Zdkt^ zABT8$fXE3=A#@$+d24k6Ab`(@#463@mp>8|A3&XcB?YmyAN!H~CSbJF+WN;x(ssPo zK_A2;fUvj5Z@p&j6iGTzY z3F;1+0*RC165lzts2Tf1FL(E4$ZWnW&c66^d3*Y$v^2uBFL3tybwvjNQx0Fj8eDz}M!aK7P|zAGz+$7X*%CioalqdR zkh+do5(%ihh~SOfEh&krbQ87g5Cl5Gem(YTh5k%aj%gBXYd@Yo_<1%@r*7BKEd<=6 zXNfl#`3a&jR<76!yAu8hHlqmmW(N;~h1;sr#a_U=1A1BP>lHDeWBxcaO zJ1s2SYWqDAL=h6%z8;x>;ahM#oAOiu{TvxYfYpPM#4P|&4H8RNiF`mfBYFAqtz;Yy z4oa-=Q&;qJy`A+{RN}*t*tjgk`iO{W$otaQUYS;GIW4Ut$V%pIV9|utj7OYf5u|!J z#U{`V@aXlpJm3>8qjCsaNCDANWE+*%t4&2*a}DaLU_6Wmh`6BeQ^Iq}>cIyh7cGAn zHpr0zaX;PCfrzr0{4`Os`22RAA4u_xV>0^-?ZVSiuzR{l^W*h@>L@2U3iG-%-JG~v zPd4bbI3_SaY-*EVo;I#l6vg&snk;!YSk1#xi&Do1t@c9-l>DtYi*z;oT|Pz zP<<8XdW_UE0DN^DWW;Pwh)}V(b&HB#q|z^^x<{W`1SnIsII#&yR)WRb)k+mQNv$?S zNRIVkp_r43QB*uZ3FOMKThEs!yRAh8Y)EOPh*AtE9w3|1|43fbh|qQ*0{R>fmcJUf znl~exrTWC#7B5y_shMk1fK(Hw@5F$?6RnS4X7#SI`#SJEMM#s?w???@>P&X^`w;Q4 z>{mFb5IQFPkybz?B8v>;O&y}Aa&a31Gr64jxO&~mEgnFwu|eS}eHyi5`VN z58uTJ7BQ__c+(^Jg?{+(B|1LoL4j9iiDVbIhy{W8F0AK+YPhyluSdj@1rTL{t#@#!Uzwu7XaPrA+$^P`(U4FFy)gEOv0{_3KS@ zTPLh$%=jj&cP$YrQVqUggv>!TV--&J@bHHE#ob={PJVF2|4fa6X*eCM#)Q__<3G?1(=I=@-2XSl5 zd$4M5T{73z*{N}q@BLGHw9?UA5A9zCLY_GCB7#(Cb?ZGSRI8hURvj!ayAJt^fol6# z&o=OSKOJR`g^_5LOzCS}Y_A!Gp?Q)FRYQR5vqnP~9S;b^`w^DO6zX zv@N@iZO>*TxOTDl@eFrH9-{MvOZ9Ef9jjv-?y7axpXE*d`p$YZrHEqS>|69X3{TrS zUiuw{{Oy%s%`aK<6D`t<`((OKp%?dK7R60x}&+sl zXGPk1y-ZPZlH;Y4!VjWkHRt+jhVutQ!@Mip5I){8zhR+fOsTJ9GAdbNOp+ZxW!c$) z@Ok9Rk6;b9tNg3wcFRQCv1tFIM3MUkm3X-5I!?ZWHdWL0VNy-?4B6sCz2(rydl!AE zV}Z-yTq@#FI8D7%#IfOU*_oQu zGrrqK&S|o{$FgvsQ%E&;W4Xv|hHM{QCx*||*~U_6YKzwBvlooPrQ!~%HQLlWHePnF zIUnhC8hhc;v)Vd6TK`p5sywZ4!dvQO&NH@sBpzAxu4im6@=}U|Q)3SW&xKw%KgsdE zP`@gZB(lLls7~)-5Y$wky@$f)lHea1%~z%O(02e4So^6_1~la}=nruR zO)X3|NU!?Fe<{PnlaOM$ESP0O<3~hW9se1OHV$R)+XYg8I((H#$Y>7UeJ;FgS#yz1 z=IGz3!F?WflI4@IuPgsF*#ECIw*eZJ$>{ zBJtz<_k4y8QOyI2xDOuHFSy{P@0s5?M4%c(14ys|!-n+mgGJx<*u54GReKAwfes<3 zOY7i+_n%7}+uIw+XzvUDa!E)^@ zTs}r6+s`-RD1aR0QI09*IBXiq$f7M;y!a(n^KbFe+GV-Wg9SFin~p|JRn@yOK?*f_ zw`3hsg6Mz!b=!N`IQu#XnL{DPVp2rzpL8ntB@m=tj~;RJQuvoF8G82)CJNE$yp?oX zA2^^sZ#Wu!_={j`#3TtM+ug7(hv@LsP9vE|3R~?wmJjY(QV~YLKvRwhTTPN-=|e8YudlBYxfFe1!)i(MddyPcOC9UYC^EgppK_cW<2 zz5?TQVe#jngxGp<^=*WGrU{9PZjNYFfr3$1)LfQ!X8*Qri#AMr`O+{RQ=vKY;19Gi z+9bL4+m{c=QQ&6n(rIgNmssuR3T@7tg$p!8zJEo^F6AtO1jE)EZn3M8;WmB=4U$x9 zA@8C^#0ZRzbtR_^^*RKD9E)?siM@7`l#pei&pl;<+vGOdgk!shk!McLo>#!qKhXprR1;%tl zzmP`SSf`9ZwivqX21DdgiEMZzU3COfFd^jV=;-L_=|Q)RCof%RZrGh2%DqS| zD(@MD&Jg}+L7u$9KhvXUB~&k}m4t+Lbkza#jU`NxV^WbFf1&qBRILfX<~8VKr+X3C zv~;I|!5qWr_soebu5R(7kEv(R!rGB?=~7&x`V#)2xfxZEr|wuPA%Vxc-C{cWonq9y zfV<+;p4ft*{>qUE^c&0?x>tzsE5YAMbeL+)-y7B#21w4okq*Z~N}vy#2;K=7n@g)?FS5|Dt>c zTeV;I-*(>v)Va8L64Lm6Dk?V*3&ZLRt&M-*!MoTz>t;rhV7P(o@@T(z1H`lF8-L;2 z@5i)=aBjX^cOC)vy!D6uxIjXQhYoNNFYgGYYGi0AF(sv8dUIz3VjJYSn@%SuJO4B< zLK}jYg_Z*S08!u*Nw`8nPHvY^N`^XZ{C&E8t(IItAd$#-oLsjkJ?8bLphYuv!XC3I-fD^ybY0t{V(JfvkF$@^ZYk@o0Bs#eq8IyWJ+iO^9!Z~rySaM<8K_nwPbGHkH9J8CG>v+ zq$HxoUjTH!cWk;&4W8uAHJG z>F{kF5V$gZpLk(N4&DZ&H*k<#N6gV)_c>K(&YzD_nGeL0m2&0`QfjQWA3p=T8@Mto z9-cp+DmVgl_Dv}8!jXc%N#Yp1vWH&iK~ zxqQ&qeI%kgWjl#^GUv{fc|KpQAsnW#W=%Q3?t+4MKfb&qf)I599<-JWjE^&;4Y!F5 z{skpqbQW?4RqSUlkztL30$S!)F<4xt8YQkK{b4yac^y8y9N+|?Y(N~Xub(VmzJ_aF z1L~x6G`qR>q`xApAWAR7Xd&m#n;#;?w1FuSE^;No0_x3v#I7v?K&HQH)d4&Q)B}|5 zX=>1IawDO!_1)<=3;+2l06uXd`va84?mcP=YT#8-K|#UuPfmN-9C?R4J>NgQxgY<( zy?xfqVHaL==M=h66K=e?l4@3NE>~0CoGZ*Z=A2z|xqae{KV_1hAv97C9{gH!dUR+*5C9IK{B2IW{r1JP*(PA@8jP%6_jEq$-Jre2s+{Jp)X&) z96fU6=YwCfKp<`c0Ru?}fPU+xwKE{O4!OGrA=({rQwUoO0j?6ie2tdA{x1X~m%d8g zhnmLYU@l0gzfW5oapBuT)q0-H%NLX`92^6%@X-q znUy$Zih$49+aAo@^zWbWpYys!Wg@7ZV7XjfM}ZI6{ZA+M1c<0vtgbu4f&VgXI#`os zW&eHNE)vrzJo>@rKj-aa6M{c+Wc`OE`zQQ3YSPrtZ|cOHdH?xOZ7a}wrs*9k`Z+)Gz}mV$ zcKQ77n>NRiA24^qN#yywj4*7K;(7ii^?bQ>|FX3F3drvldUxK13qSpPaDN-SA`$X+ z5F@_4us2dKV)#b;@t^9N1low?ZcXr>%(%Eqa1`XGT?!9D4HFXc+r&jCPExRMc<|E7 z{M&(PW5oc%Wus`Ge=ho9^wo-hHr;<{Ji^%=s3 zPp8=#;?8)9X;p~3eEsSbJRg?Zzv%s0VNzwG$YMm)v&It)4I*&Fz5n;|j68B;$W4I8 z*@~tA@NRH?;>i5p^KKtY-3}ePdyFC8fZCSbV+@nmienAppQo>Q-4#D3S0v#^&chlm z7S=lvI@x#?$SgIkJGgGXV#KI1zRRdG@V#0D5Ux3bG?X^bbtvaj)7=ZMT^s7zRUIv) zh?LS+Z`iz$w1txyg?Q}wm+dc$95x|nTXobBB2@tLE#3|e!_W(~pHVR1z1z5?HaKKs z6U>yj4|UcntL~JMI~Ds7|9~{zz4`g5u@G7m+W^VJp%?c`V=9ShNn9|ybEDqzKd1OSvW+6v$or|0r8pkQzFVMc)DK*XC8M9tsEz}FD-AO_Gjj;0(({W5rItfof~4K9*JUawEryOm~Sa0H3zX1Mx^&uxRlHfj0 z?%B%<8Q$mA!sW!1_?A+rmghz+JyZ&R_&qECa6cvj8fU`5ykWzCWQ*&6%-)FxQVbNLH?!p&CX@XRS$zmJZ-*9} zL0xT_pOKD&PUqE|H|LU*BkeatXC7K99k{z-FGDuVB6}m)hSfmM_MTsJ^alE@H;=D( zb#>va4Zoks#XL0u%e3^~IJfVZ%V)6Q-HVF8dz(*k7=EFx^lL{$?@zzyulmlR6uTIH zac+0VrP0yFgjML0UPoAW&0Ok~yUl8%l>#=O5Ev!IDQ1lYC>n&}9vc_NR`<3UD<87hc|rfU-k{uy z6BpRLDeG`L)qhKwrGD6S1tTP}!6dYZf82t}c3JSFLr z;5ui{90FKR6!3lmdpdk~`m0xq_D+`9K1vNeUzOSC=&@IMKYrrC*m-)Hj9eBKSiIof2Y``Lj?fM;HUa{=`9n@X@ z+O5y6qQtpp*Dc9`2zuq>JI9ZFg9IPlD317+mKM-Zk_!Ba;B!qD3NF|a0ZS_GHWn2E zB+OaR2Zx8%G-84oQp%Eo35(+5;$UQ{jNv}LTSF6y93!DOoM{M`Qx$xK*-&mY)UY2z z9~!*IbtBpgwYRP5tmPy5`cYXWx1{79G`vDZD%ChQGYMu=gLv0$oFVoTpFhh{x|f6- z?y75Oka-pr9cp_b)xp&Zf_I0?Ia@RR{bg-A=^h^W0_VVu0hn`5mXc|1 zs~VG_=5|I!Y}NayX<#3}E%zp(p@BwZWhva+bWKEIL+ZL9t=<|2&-RO}H9>wiNAPsc z8yuUTLVFr>yT9Cf;D#L$r|_ZgkJJfg{#QB*+DwlGgD0PUiH&sPZaVhV`lwWV{$Km~ zI?g~+N(_~1xxO11(54$Gd}}WVWz9bkF<=!vlOx{%Di0lSam9m|%^>~I`P!qbLny;t z;kNmWDJYH~L29%2=Yh%_7(?Ir$(Ag#gy2DzU@6^2C`&n%=|GIfkX3*0gDu1Un$>+6q zaC%hPP;u>3I{Y*ci|VlTD8jPDWKGv!rei2NTLq4aLLv%f>=BjY z$B*~j;}DVA;%rkWYqC#8zR8+iD3z;4K46yUCNXd4KOp%;(WK$5S*~{`Y4t5W37+t; z2O%`YkJEOO-0NR3s+K%B2tZk7?1wDb14;mBO3GQbO}n0z_tbwXqDDM4@btXlt?FQR zkft(CohE=_*=5kt-%nlGVmY3~B;9qUk0}Ns7 zn8^R;YSoE=qEedh4T~hzVf)DA&bH7`pci8muA`87nIy7aiax~eg5Gu?)q{fo&YwA0 z1+As_qt@&^DzgN z9GMXVu3K*5r$?W%Qj2<4^gf9>mZ*D~JLmvSvI)9id0Jx296SD&URKBbnWfvf-C-kG zz%*Vtchb<-Xrl)Je@Ngdw4GrM7e%8lr~wyeOr5LrpgOBaHYtS+8v+z(8>*Pe#Ycpa zxbykw<3WJMJ6|w5Pe-)BHN2L_HEd|hWH_h?T6?E=u>&A1;-knFKqVwI8=8Y zGO=4uq-LUh$-jp22tE}IxV&x^vg#4q|MLUnv*5wtN?UaF7nnD_&)pVS_x4E`x4A@d z7S#6(9IUatq8d?Kq;++PK64f=-eU2!I#79fid^4aK-9+JGE}xj4RC^fI1arApRwf= zPoMrsOv^z5y;gbsg!f+^13(*1uH=uQJGgay-RyX=5n*$uX5zdF3;@1F)A1VMu=Dz> zqnQ{oNs7>bB>S6mA%Mn#YE1z1G0pnFX14PZ^3EgUmN(4KlTuc;-z$Bp{vCP}0g6L| z9J1ewI+`JjYFhloXt;W!ba9-7{-x$rnwL~8J&zL>vzbPjc$)A&6&y6scP*sy215ZL zD?;Xu+T-V^QL}074-DLNmULtm(SoZ(fSNW^)(D46ZEn=9X&|EC=`Z@v{zUYInhK{r zK&JP*QDy!D)4frEoM@(kVN%~w*0>!Qs0?L!#mpc%!ic=)$T)F|QrG?%61R)g2NGCs z*d`+BP<5$@zXyoWp36&8#=5R7rKDwAEvdfTXy#2O#%*|KUMgQwgyo*bRJEzEo;Wpw z0x2tUABEaqH_E6?B?~SnQk|9MoJHB2C~@ZD?1u;2i&^~Yp+)9nXI9K(c_lj;Cwfci z*J=e$xq2Sd!nso8;+n4tmZlk9{sLyzQ1vt8%LyWLvm=WV9I10)V==Ssw?pG&mu0V& zcI?@p;1)9ZjBs)L^JJ$|K;~-oVZ=1przF$MBoEglt_^Q2PYRZ1Ch`Mh&D$PK*5=i97?j$cKMJm3B zC_v6uORC;*FM3wh>Ws)UODLuGRRccI5aEZYQ(<#lPV$OWPb>(RRp*2?!PhJr!w;9P zqS6T*bA?ZG7a~8rq)G}D;AO8N6QzY2k~u6l9AH_PEKHz=}&CgX3^rKcm}Xe#4Xb-wf{JonwV%sa%!3NLcTQ{eVfTa`Ky-LvoGpheF0T2^l^4>xEF#|V%^NLpr*KMlQM%67P zqzef3e=rqb34v~0Ne>Bx7=$Vjta^z9p(Yt;3BdV+9Izom#xXM`wDDc$zw-Zq(NP_k z_gtDK7H_sb{I}}%e~5JdpF&oC8|D9uPhXcH)_n7d6)D{;{M8->V#LCz9?`ZxH$wz9 zw5Iut_N>d7o#7dOVyL}?PQQ?vI%+%9Il8?8BSuk)vgi9T__LOE#;@BqcnYI<-Xme7 zjeS`u;;SHJE~Oa|8gx=o^fsnom=n-Q%%sLB3U#2ka&lb7C?O%Y10zBl^MF{Cl!#=F zqQegjjf@B+9B2rnH$-?7^w_usAvGIcjQN%@C!>)?snIzX1kVoBctCOT9CXMC7w?1B z00>1d5?kh^CcB-Kj+@#CUzzN;&l*UNxpDM{0z|)CrkoeucXBsvjJT42AZ5ToJlT4jXOkUPi1O&7| z0ecjaN~VOb#aZwe4CN^N``fe5yTKnYl(84%>`ohviW~7Rd5wA=%J&5WLmWlsc;LbU^njBIi0r&~PrJKquYQ@&;C~*c7w)tXp$=K)L_P%{-{&u1 zHi>(SiHM914<{ujqh;DpEvgEi?<=et!J9>)P)v?lSS+2tR$M;>Y&tO&G4|A{1(2w5 zI~-_nxn^z%@@Ln!R9dJ#D7Ff7QwzTcz5`4S{(U?;oWgUkjBx9=c6ChxBq=#nf`l-P zXe^o>gE4Cut#d~}au0)lzt}PEX7Tx#xCm=AT%>E=Yzl2d@yecW0}%}X$P+XF+-H{N zUAqE&H1HpFw&t7B6;_s1R3UJ~6HxoYu+WS1!K}BAvt8(b3io`f0tzCQ(^g z2t}v)ijm0;lOmVy{$mOL`Un?%DRfOxZP#PeBSyU47H*rfV#O5@sJ-1n{(*tSB zoi#PXEhKu%J^t5o_n03$_T%up332I$l;`)v0_#l;cqD-0R@pYpXtGr69b zZr%Ev<(&=3ixx56E+Fha>_4zf7cR`s%JRBeP+(nTzwz*4O)4hOLrrY9d-oI6VJ#N# zKwF(kIP&hJxN0Ktrpze3bjETz3AQOrRfWV^*uRPolmaOFAMnA`#z1Fa}f z==CaSXdIPV775q{f2_lOrLuCRKZK8`qMvx8wWC8S9|ZB3q0`rwU+c92T<~P)=eM+w z91tO6b^Cx2H>)2y%$8w&n;g`SRIH3MsURKIQ~+#Lw|9*Lk$D zx4^AVQ~SRb24mH?h^kW|VrYr6qU8ueDWoo}RT}LL%wsJEP zw)sgXjFDN#8ZD$(1Zq0x#O1LbQuIW!d2-G$i}1ZFAhCVK<4~K+Vo~<*CcRBRi=DXX zbgHS^(>2YBaid)1dc!v+3Lm@V71IZM0;^tqYF0t4mMYZ}f!j$N%4B?ot1H56ESs2d zFGSji{6f+Wf%76Hf?kScije2Zv~!yBS#vy-wD0DxH zc}=bN$6I?-QQ*2WZFrRQ^(E$^L(RW-?G1*nRWoAZzSEB375DR&j+!NYlyksMC{H_2 zD&D>eP#t9;@ywapt&l&(#65wMH-C_nS9+vnl#*{VdxFW3ay+&ZB4yFUc|{cT_R&l9vu_4cqNMP0`C4=gw7dKwQor7^#t4`aTF!7-F zP{>`R>Fyr7nTp4VQMDCy$#C_H$lMCjL7(tZ_)*JQ2swEV37fN0&gpaU%Skc4rw=s*h{BlbCVX0g= z%Xx&zhII^4xO{n-S>CFqS`ZB9$v0glt3}F9`-_m-b-d|C=HV%0ugu75#-|;gjl>;l zrcm+m^6bv;bW8L=-oR}3vBayYlaJ~cl}yrts=8#yjL4ueWe0g$lIo($Df>jTPBS?w z9dbYEc;aKT168S0)#Jm}XE(-r+ez~HMT?!6wWww0d7yXbTdh@6dGErQp$ex%z2O7r zDhheF$QII6@_CX=nu7XlJ%ib)Nj2kpzGK6A=daF6CrAcE)s|2x;)n987<`YDRWs^k zdwJ7?7P&vZPd47fp+&ZL_&Vk4Tg2sDZ||#WdWU)cI;ny}rXG*>w_9&JEs`w|s9}01 zwob2!H+gUvqQ}i$B&x>7)3O$aJS`w0RG%$bZ?AmOuPvr@+U;5lX0jgA9iI$12iKi~u4TXtpoQ3t7N&Ke3Du&}ZrX2^9!947(I%$7? z^9>U55W+|)=MTy)BdZGsk!OEnDmIqN^>~1EGh5!5iG^)YQ%?imP+GO6dUb;#$F%9? zdM4zTo7ip6^v1<=1`OBqIBejP)&oW7m-=6;7Jsv}i7dJF zw{Pxi_4kn#`e|xT3+D$i2=EX;9Pw3JM@I*N8~aE@*?-gx|LdWyQ8(AUOHNOjF`IH3 z!N4&Q{DDy_7ZI`u&=J;KNE2}RK(8n$BxKcoECiws*N(lcfiSRRhzoKbv^W(X4|_#1 z0vm^#2_4tR+;H*LP)h(nNli_)gnnz;vbV#-4t_h4SyuN}>48z4Ts$;DY$1i&VbuH< zT?j}#d-gVHS&Ns?o(1CO>F6+zL+VWIL^V2w(^|27@$A%XU`Dnf3N^SF`N;)dDStw7 z6JP_ry_u(TD|{Hxxq!6xht~!mJXp`EFJBP+VUExg_zNJCNB+N!xE5+HF|wdwM%wNh z^i#=09=MOe%dUaR0S&IG!F8!?wCT^El~q)rVGz+g&<$F`+*$*Z8$z4m&RwOb2y|IU zMC6pp^vYsjOI^>Au9$C!hT|+4*&90l^dCRT8Hez!K-%fvxPE;&19cSIKXsQjqY!H# zCOk?JJ0Mq_%Oetz{ORMzQe-2+H+R~KEu?hMf1w5(!D0fIm$?g!n@z62y-^+)=(i8N zBD6Ou6;nIK;>FiJ?7D(-X~8k$O)Q6gkpw)KG~&ho+?1+4?vZgANj4ytfO0DMJc**M zx>?E=bxhjf(4AeRB!2PG+)q&=OCEN2n7}lv$=$_uR?Hz>2^q3#$tCqx+d5%$#u`}s z+!Z77WN?{uXtOzzcm~><#CR6Ls~U)kh1}us^*zYF zv=>HQ1}PzuFz@lZ00u45f`$)4YA6nZU`P%$(G8&4>^^EN6EV6w zVd)=0pTx^sviq|qdVT((XPhvhM{~2YJG535V^f;g9c~J&`ve5cM54C(I;ne+s)5XwNLpZ zB+{wvsep=>h>LqF_XvoJ9>_`M&)PT8+YIpK$N87v<=3ryF1WRVqhg~gk)(@f11pDW z!`gKARazQcn6w$V?uUE5&cA9tti&cyM5LbW?(g^b$!cPy9@S>X1Vpx4d90LvPOIda zH@V5orOY;d&-GU~udfUnV`R;gs5Eq67_)y#%6xRIAVp<7tmxoZ>$$U*$V8}eDeH;P z#p&t~!8Ws(ZdN}&Po3)0)|^JAByb+k>-vrRZb>PsBzs9QsWrdmQoFrum+84D=7&&I zRDkCfwf8iX(e}eho&Mgw9FY@K_WHqbSBw0Ep^zTVh-pr<=&gIzB71zZZ3NPx+&NDp)3zdvtv{*% zU5bjT1z3lK=31X%*lb_=b!`P++D+U8J?&5$vLweL!MoH=`i-Tu; z)KysKwXgO(_$D-rh=xx9iSn9ST4Z_0uWC@6la?^33Izfw(m+*WxxOO;MY3S`Z`YI#69_z zp>sskr)!N9x+lgvSZfi>)8B3K32)ow38ki_G+_k#S3M%lm&kU0LK1OSf-_8oTMNcz z*}WO;$Yq`;TeoUfq-sv%1&5wjIBGdu&4J7Z#vEn!PR=9G4?q35>+Ct$&1pM*ZXsAT z&`#&U_g5-z$xYEQF*PRw>=rgs2EEPro|0x9r+>lwrK%wN4&#`Y*Sx-^rkEzO!l!=Q zerGug0)|H=S~;fh#kQ6=*lR>x#ex!zkFsbFI8P9vy;1^{n6CVh z+wM=7XjQ3mA}T4>f=-dFsXZa3?iIPcSiUKTF_Ms#{_Fee91?kFgVm$P=(-cNYBH1# z58MEnvgyU$3H#(3IjUFKhRzRZ8BT#!Cni#NAFxbjb<9m_>sA*&PqK)d6BALiG_{q% zh#*-xxuLyU)Lh9b{7$n~I7fAzM*rPiNEcD4Dn2pB$ocUx{&-F!N2`QL;ecBL^Yl_G z=K(VbH8^1DAS;rBptPiYa@2mUChmhiA2chx z-0K)0eTs9P5sI$SXvxD|rsg2!Fip*O^c--G6(I}jQ(Km=Io+%G6JEI`^F;iyn-##6 z7TQwu=4qT4tZ`BDdw9oCrJDwym@9@qAC87s7~$EYTnHHZD$F)t)nYD0!c!YUV=3S?soqf%D&? zz?W%AOoURubLg~j&g7Y}En$6Gb@wK%7fgXvb3@@s%$AhO0S9Z^do?hpO!#*4IlE$7 z8C>;h#ZJ6!kLvD|6I+(Pq*BFt>d~0UT70KdZ3BxW?x#JZiWG0ZB?8_iP`gi8v!0{m*pJ^h)N?I)24Ik2* zUs(jIio6}N*B2g=eYV|O*Y~SLA1R*Iv-qW6Q+@81dNY;u5&J}sa*-o3F(P^mOf(mF zDrwHsx`kVD)yU2yp}$KXvQG?tPn|aXX+~z2x5Ri4_9PeKPQ<-)kjiA(=BZMZ#BW%{ zoYZv47koFGq-u+TzAxxCO&@;->r*3{@r1hs2VBuHb`}# zEpKn~@O@kR>|}J&ZUyPZR~M z|7bY>4gL6^v(^6#_D4tXJAS?PDU;A(Ut868h{G?mm>txlpM-RXx2K_Whiw`)9+A_C zIEh2g%QV-l>4WACda*+Y)6mm<@x7$EA*>{DI9A)0Kuujju1m#%9W4AY&~n9hv?CMo z*+h_gnGp1PwJFso>VWP+gLEIMJ(xZ*wHrk@B5JO!1Qifqv=wO~0Iu^s6n^LY49p4+ z)HeeiGfQoRgoJo9;6pu!;S*K7vlxyLjMO2-;6kwsi4vkPT;BkoX1~gV_8yQv!pISp z(vM*6tpIQR4GqI)gtTPZXcP_C4m@O{a`hwx*&lNU-n@ZQFPgQ0k8k6i%pmi%JQpFA z2jgLTCVx?vn!E( z&~g;sHqoZ&|JmxlHA%Y}myb8b^7`<@XZJ7Ll zn0D;7w4~Tc))i{JLngE~VW;@Ib3F~^uOB#HlUzWXkr5FYKKvSu7ZKnm6K}4My!5Cm zABB-lQ37{TNhi=yusIz&N2QdC4DtqfqKZ*}cT?u?3JeU~d8!o+NvsYcpI&>Io13GV zAWE9gA6}-Ln0rK(Lcr>{8%B||4-?^QBqM?VE zj-BaU-@n~yJyt#feYXk&9{;S26M*#@3 zD>lO1z_Fl8UHH#P2LzQRJ+vgk`2;Ai}^U_rk8)mNdb4?SSKN@ z5npqJY2$SYL>H4e(t8B)qNfAlk$RP;t=zE)o4^DiW;2G8)lm@D#>FA}pq6`HAR6~G z@$vBmVTto$_0X|-6 zHtZuMmM#q^yA-L0rr8jV{*$7S+xe1Z(`-CyK*2y;>F;u1Z25v3xKwGYhhPLsXzIag z?AhOX&o-WKMm4>;D4nddfVpd_)a+`inYNp@MN`2X@_PXgl1My!w9TZ%^qMNoL8=h7 zB(KM$;aofvKzD{FC2n-IC`dHynP-Qc~A!fmv16SB6LZ7kapy>6tb>WMV^n+5X#ZJWx|Zb+WXilp(3!?fdPBt!46 z=Yq>T(Mp|HA1+bpLQfIB9T-k95Vl!8w3Bp{gO@c?`rV2qnGdL< ztIu6@W{_}tl35qNNe^nRbk~U0;pCY%l4&C!KHUuDqaN1Xoc8dPgO9=1;^R}*lGoDh zIMSbzYDVd|92aaXlW3=G^wwgWFRgU1X$UJRzA|1HgW%rKfnwiO^2B(gkz2%Smp@)) zhk|-m7=f8Bz|I86@TNc%O)nWxMq{@iWAz&#Liaz9T@ua)fyM7f1GL!)}~|+ zcnzPd3~O3n?eFMTu zuhzY0c{=g>;fpt$%cOdf$HJmR?Rw6QA#l_tt&FJxvKQ}h7P`|FPk~4f&i6FCv5R&R zS*zz|ZORtUhXyG$hwU0Fix&uZG}#fy8U1Ljp?H~x-%$1Mt~?7WzDWdz){Och$qjNS zkGoO<$2b|T20b!n<{&?6gbeAyqYN1C9olw0WWa`r%ux<54QleSDhS~sqgJ?fj%ehC z8YbKtO}0Wez;uhn^DAj&tD$Zk`!~N^#+D;T!$QSHb0o^{r^PUH%vMjg>>I518nn|< z7L@1%G=RX-gOE(Ps3$nnL^k6ljwLxk#nSU+oG7Joz63d8y?*AKzULfrT0@S_9MZ>Z z#)xs7;u}kP+C~+f%^u(HP4CdFC*ros3hL5(8={Y_l$H(<=?(GZU1GQj#U(Ixms^RFUPcllBysF$ z`I2jUJWW=W5h|nckt#3RrH-s3a|!9*BX7~_E`A_w2M$7{W%r2A?o3K_%W7ne z#*i*%6f$w>32t+_>IWuDus)cyz3R;kzh~!0vdC6yVg(|P6bpp*-Lru@F^04~>ehAg zl@A^_tHZWLN5#x2$LEcuXs`ajO4ey%g$l?4?2e?pOKh~?CfyZ2Rcjq>3Y^VAQ87Em zd}y zF6HkeISmX7)c6imW2M#izotu*8fY%{@PG{m)i;^FwN}}?;(&J<_1yYQmVa1+%{K{*3BYk9N~N7{ZT}NQj|@F+iL2Em>uYym?jY!dW%bZMYXo8Q zIYva!fx!5`Xpm}Cv@x3_wQ->;UW|=Qp6YvW=h-s|7N}iUp0XwpPK<}vK?e0~8R_YH zlKsy#1F;<(IdVtgr!cPg+#5G6Nq7|k#QyWWNY}t10BZ+P{s7;fSoxv*!x03OeRtT{ z9{7`fidbxPG`iiTH9ityfwzcWDj?F?*@NIP`yeI2`DHj1SqjHP`i^H;gW+q~OZi26 z4;VS;e}ve9wS_4qK4kbNl-Hw17;(_AMM;xJnE?^FwU1emj*$)dN{)5(@Kpo#hJ@tW z2}o-q?5&W+bs<-Zk1q$*IPkJ`09AlIkTMh~_5yi${h;Qd@`2p+V}HdNl+l>&x78-Y z(BzX6AAeSV&mN|y0El_i0g*34YzXlVTt_0%DWn5C@AQJ*eBt~XOt`GKnFinJ85@rd zewm&wNIos+zZ#p(!GXcSq9d=wYMG*lQoi4zR=4lpzmEnsu=)_QFzqEI0I*B0*#}1c z1^x}*G^FX!($OjSPH&Fge0Pr%2Zl;hEe_sGh+LI_e=N=?`oaadgsQ#?67ZG%h zO%_xIvX2lsz+Q*+RN%@OkfUh0u(j65Zh+NwC!+Rz*7=jj6d2o>)JA?QQ7B4h)qX>f zkt|~A1%*D`f_rO(Uq{>n`PJs38P1^K_vHijK`fHMIuL$a3RxO5VB7R^Vj2T5gw=usMXPXzI6H1qMDXlxyq4GS+7I zT!eP*+T7ppmJA>?sZM3{=CkV&35Z3X)&&t;=u{SxxKoVh=KYUBItnZSbL~24v?SK_ zXP-Uf^bHL+%6nu@?hw`LK?mCX@{im2+TF80K=f5W6n7q=y`qAF7%kzcH}zO7Y}*KD z!zQX1aoE@oo9?fiA*46jw&yZ3GEhM?y0-jd@1d)KI92ewl&$zmABHeup6og-)|%u8 zOb52X!l(KZoaapR0dD-gckdeR&txPR4JaN4B6ybDI+52sg59F2s(*3*A zGVHjB34!FVilugVjq3N6zq5Y>Tku@ye)wz$2uetj_Jr(w`fL7S1tT4uB}~RRJFuU4 ze@2Ji&9dp3YuL&lgF>(u5Q~!<8r4MTk~H0wTm3kS;g!rKL!$+!##^Lr;-QDL(FdH~ z(>H+j;b$s*ga*G(7wm$uq#gL~2z^H$oX{2D;6fQWxePmEpTY;|fNCNl@C=hWgpfup zkj)UWs}2hQsxMFL^3n0fLgd6BTG-=HB#`Lw6~Js006Ez3;ed(42H%gJJw4xv3|83D z5k5eKb2*G;px)i0)Wvf!qBmhf!7ea?kp%@r>yaE~TNJ}#=a9$71W=mEov@-U%jrch+ zK&6ti9S?gDy*N2emz9@(&6dPeG2#S)A{{*PUd^Dgrl7BP4oC*P-iH8yqP(%ytEg&* z`yiZ$9lVi4uYS{gI8o)`+eV@R!y1%Nq!Qs>ocuSi?Q+`$etn6Uvs*2zH!!&Rp&7J3 z40?omEVshN_4gi)q(iO7kMbOW+AaKzs*5uhetw%WPJp(_IKdLJ?nW0SZ8#S3)XJS% z{DrN2uak;N>jY~Ir^*g|za6&Z9jf{;Ix77$zYr=lNwEZXyPb{zh;(rKv{Raw9-bPR zF)<(AB==K8SL69wUbV9YkrVn%d(=hurrgeZ+4s7;)SsC=aaYvp_z~*|uWsBmcYkSq z>r#}qnls&IrqC6<6H2|$X?TA=6G|KiYVn(rA+s^j@HS5UYzS!mqCBd6$gh94St&6M zL{0~ZE>{K!h&#u;1^Q2p2hDCUzq;pY&=0qhUXG4~00iAa?NXi79lsmoTc&_FW&S`C ze^RN|qd~9=y%O$2>r}pzXOJ+?o}SmD zIGqv;8Y~Pk1=bxrFPU}F-C~z{XFF;3#V-l{wM2(TxN&fpleLs;E_og<2o@!qROjME zPV$`>f}?$Mf4&?HxK*ZL8?V|VE=$4IjApd;qE?~$Fg5%YX3n zft_UqV($8wu}?s8ILuNLvnt~?TdemZBoV4Q)kCNoK}s~($8eRg<{qDs`BnXx%b7_@ za{z5urNFlN``4&y!|-4Kh^NDbPUf0JK0QNqNm5P|g*e>{eqhTcp8t^SPEdf7s&BSU z0kJGVbT54K(`4#@#t+>cSnqa}>n(F2&hx^@DDy>@6qRyZ{g#3d}5^ zJ?QuUBw8wfeWxt1H(6`g!$D~2(}5+&Yz~z~g98wj=Z+KKm0`h}ncClpB6igEyo42{ zyKX{qeG0SWC<9LhVPOwAR+{N(Acc&zwUL0JSd?o<`v!8g>?s^!Wd&RFT_CvJFJS3% zwyG!*ds$_!<5hION>AFH5;U4uen_R!fyPfd5mMeqaJa$r!X>S#(! z%lx3k`>48bYle)}<_#~a??&CNj}7+@{<)FNP~5aQLVwe8?Fxpo8B%2aSKEGGS|3A_ z6Y=IB!Y5lDq@Crl8yzS@)Tijhltb4F*sPN2=w5yL$yk_fK|}Zk&i#+a!$dyMRS!29 z_EMiLCxr;4mWs&)ONJc%q`{ySTqP_fqj8~3!sJcE>+;PLW$h&=c=fMwst8y}H3GD# zK+62=3wWR;Hc-xcUaKujJ>ih>DB;mYX5AC3 zu@qjWRLekFjv7zY8-_c5D?Q=x-Qo&VPZp8VWqS_BIq$MR`l=2u#@yp!+{(_1*TrB& zd_RZYNS&S_*~-&CYQ#I$eAVNqZ7P!s#a%xl+DT+Bc^7P3?bptx6_%bW6pOic7o3P? z@sGJM(kbZ(lBs$H$DZJ0P9iP|vBU;WiAmcTt|U+&Hd*zNmA%G+mb!jgPa+_=>gHRU!^JjLGE_t=&MK5| zp5SS#hQw4Vwp%u~GG>SXbE=rm|5Gs7S`Sk*iUGeME5gpZg@{MsM(ANw@9j@-0FN$( zt6DGfGv1+^-q5dLk6J`j{Q%5(N)cDBrj(cURfEcpmKJ}uTo4(Ph$rDK0bugL$Xj>x_&${ zE$w`F@8eU)y}Z5vhDOF03oEP1K7fl5vm+=4jOp>izlFyjI>J5q4iP_?>Cpt6MGw>y zK)h>aG8_!iK~_c1jnE_Qhq5c?G=?fSqSzV|_7VeLMTY*Ytj!T0S@1Fl`#fI85A`2t z4C7JuEx<|%9V(0UZALk@O?b2y#OwbUdsY zJIL3u_L_!zoiDV^e$RgWWRb=fFNE$kup&+6>+!bteLNZ^N@eb7-|Dk_LYt3AO7Weu z&-%#ZJp7` z-@6>0Y$z74=k7Ifk#BQ`PH4h zAQq(`Gi{>_@9(}b$zS~N;>NY;=n?E4aHNu!Mr)b)(TEGAVcdt(_2m+Z43!N1oy83{K)V={NNp+i=}{HjO;Kt!+E7vV1T zxIeev482U5eob5zVy^Nom-JlBV@cBW{7NpA0mu2&8oYVV!tS3OT_*Bzb8x7DV3*G5 zALuw~`>ZYO8HL{z!JdMTUe<8wzXp5J8J*@V%OG}LSQ39C=EhAv_;Xtha*^x6y^sJFhN$p!f$S6Q0wGTcSzlX8dW$gV#Tm ziiPg>)jH-f;X^LvUZs2opHb#uu;i!eCuy8NH4r9R6CqtDFPO$6{i`(5ohrw0u%XhO zLw241c~U`ANzE1K;~U5>m|cJNVk$k&Ld>2HZ-RbKJ{iPkE7H?c@#E$F9zXYdtPL6K zl&4p0m_as)LeMXHGeV%XD~97@M#fJ>XL}kqEE=Er!FnFnbLg6)Pb)UXYJ7**IZk4w!4-)!WO_CM8zl0ox6h`u7W? zR~xR_+4+wPd}bzkju0=uh60ys5b~ghzC7;#jrV6-b!k==xKufa_5F5!VMoqecMvZX zeIEXng^sHqU*)*sJ4hFN}Zi)aRv6&X5|OgFHp zNma~n6ur9xfsT=rG zwT4H6TLb7=b#qxI$OSG1Gj3c<@q?r$a*8R&xnHz7Xq1#7M;I!_-z|_oa*W-(7?~IT4U%YP_>ft8hC?(-x_nha{cm(41&s3t~p~$5;;9 zIR~XY-m97O=$osezL;_L=~UnpcDSlA(NL1Cfs26w!@O^y1Neum#w({kE6j65%m5Gg z4I8V1fIt}Cz~XZc+8o4)7<_@0FtQo0<6eo}Q`n=4!fJ5kJUji90;{VXoZ!Px&9(Xh|-QM*9aMRj_Bu4RY@|%!aS{0-!w)hqN9icN3NgJ)H*r z;zU*!7Q4W&W}nC5RdN0+RZ zP@`|6g&qm6-QZ`6i;O0s605fTvaWY6*h+VSF7@edn+ zOdVLER2L;*Cp>OB^ZV5qNn2g&k*kcwSQhJ>Pc%KKF&_||CNkIs1&ioo!Ul>R%C=eV zGQXPYmPRvkkk)mzAZrRRpcf?}&5&!JC)eD}1T6xvrN>F8S?k&+3!9O1zftf`xjO=j z;z638My)uKfWa52gL<8?rwZoi)JiOUm)h`VQqq3&(hSd%y0}c;&U1P$yL+GFYajS? z@}XO%XwygOb?zLWYsw^S@t(PeP$aGmR_`Ek_lfTUsJZ!74QrIr^kmNw^3JhMO^t(f z=`0*ILM*Zjr(?E-a#@C7VAOvxZAlhPd%e1ld4UL^L#at_9Pj(;pv@94F<%9|=J_+y zhTmJ|tY)z&(kqj(P&ZPmuMV>3dNf*4_~@r3(+H1cy&^sK-8uQk(v(2kB>u?2=Fk5gu*Lu87uzbE#3OaFg0jFjkKO$xt4PhL^g#h7Iq3eC&)l;1`(yr& zMUX{!M1(3-y%@hRT64)A%e-RGsgiQ1y3PF3AHxWxXY%Crm-xDel}lNgiv1JC8iGPt zq#Y?+tIFgHv0<(uQsVx<_6&l+G5Sm7R5vc~F&grOhrD)J7vY>l+$)|Bco(1lVk>0Q zDB&a4mJ~jeDxehy*qI%Sn?RzV^+G~1B3p@qXLIv;=wW(IqOodX0G zA+CY6$$6);GSVQShSP1Rt$l+ga|rcejZO~1NNMzEjNS#03bv!K(FcAF+HXhD4Qai| z_pzJ{?y?zgkHJ}qpc}%4@zM)aRx=&>w_*-TWH3G8!UoZGK)bwx@|gnRs=-AF>p}4dIY{foZVg+}}wQd5A?(ijdQ-|3k9X?x&(7 z3TwH!-8)z;h^dhv)Z~rr&iww0v#G~jHpM)DFYmdR>%n6jT}ya^xCh$sz9FEmj|kMv z$hae2A_`Y7#6p8`!7;2`x68#+`_E6|BSzWh&(&-p58EOp_8F~CUCXcybvM#ef6PxJ z5&O0R8m4($W1^c!Ssbz0p-QQ#we{Id{RTj1in!mYg@3C5|-*r1-Sh)ow{!S zbtlOm2W7VdlyPABh|luU>!|`5otm23f^%l+Keyih)6-Z@H@3#4Z#nljlC;{5h$0Rg zc}tkE@jGRn#T|X;Q^kq88@~s`^%oy7|9Q)`9@idwxPRY1D9DpiQW8sdztDwOydEqD ze}487AF5x_>;%J+`J#R$8h~Qf!wh^kd;7f}%&efNUxn11O%u}>G7-?`22f$=>3RJATfDZ(%Fg4EN77C;i`g8$?I)++ zZHz5~QyZHb0^Zn}r4drEsL_k%kxqb&Chyyt+NhACA72j@H% z>5fH&EZ~iF4V6`0{5}Mi88o2&DCb(TGcf`FxYjDi(uSiBOfHH9f#vsO(nIf%4~s3C zo!#Ue7L1~zA|!lIptJH`Y;_H~=eZcktgO<=>~n`&6Y=Vol9ECV_+LYf6An7B5WmHY6;n;04jiO$H_@MG1Z z5Nb&);?f`6;LMut2JE71OU381p|$*639HlC$>az^dX^iVl*DFLc?5$p7*|m-F+rM` zc1eru9#`sBkKfvX@*5vN-^F(uEGGYZ2tgyiYqI&DKAor&G}&8x6C0ca#aqg;{<7Dg z%!?asaqySB(E98|&ssoxaAYY4C%Y3b&3Zb;k8Zg=Hi%1w5%JAX%G!sfpgVL6!?pPZ z1KWQe)NRyyJ}BYYlJIZ1Fy`qsH7$>TK+A&X^j;F_rB34CBqmgy)y zWX#f)u7iLs8%$Z@`@KJ9#NZV5(fR>6BgZs}JC?6YB5Pwztdgb2oNI^cMwWUC_4(U; z>U3>_!*j0hsAV{$v%yjKfR#UdA5UU`+hgy-J9|@R~C_#x#MI%wf93B(Uevr9>XGSu|16ahc>s&7{=OWKF;N~Ij zoc;UdP+$ZGWaCc%5+qpiYOr$=8WWlC?YnqP*b!$>-2~~~f6pb+$3{sVrsLGwqN;k;7s5XccUT<}3$>lsBra9c=%TDBjudh0 zQXq(aKsrKA%*?{-vq`KgF7B~F&9t?3wD_>Ei8k*8z$1BLAGkuYe$#L?xMRznvTi33!9ZPwKSA*Rw3ttvqz(_d^w%yy`1DOk1Dq z{p8zicHqGA3AdH{PCD28><&7IFdIxS+-%E8FHmo?S5uJO6Zb^(gkh%q#r3YN;@^RMTv~Qb~ne+Ht zpOj0N%%G6&c4wSrLF(>uyM#Qc))L?qj?+s^s(Z8nw5j=8E{LzJD#77~GW*aZvpII) zDeKS_cE@tz{zeQ@f8fr+C+bEMKyj&|$#zYvGz)<5T@Jztc*RSOU z7oZXnu-su~gxJ{m;cFs_8acYfy-4N6txS|6{z=uRo}IMZh=efPKleo?bStkC@20Y_ zL~ip)N)<_Efs7UBGi*GmcQxp$KzQsQl*3O1jlkW+dHSQkXVTy!C4_6 zd^daTxhnwRLYb=RvI^5*2V8uqFgQHC<4|j+{`aXMGTkzQYqPujq2octzk$MKNl+D_ z#?LY>?r-IWm;j(GNUzOvbN*`g_0ON){vZEO54XL+uD=03DGAt)Ws^s|L!$sR#>xl^aV{csleN`T7 zi55-R*A`LXl&I2hKu0~|u4QrV5c(OH?@ckb5Bu!w-Vu!Mrk(zj47n-9F!kfWu(iF+ zY=OH^_s-nh9E85^xK0!Za?R9|a^GA^V9kI{)|nKaZ*R<^BU3Sy&v0mHr8B z|DO|WH64bm-=mqU{(gi+@H*)CDc_3TfOr4Aw_3Y)K>}l)X7sn_Bs8&|9BVZet%FzT zW5u)zSsn&PM)TjkRebHXMuFJfsQX5E3*kmP_H4mr|0`3TL3d!w7@jhVF*0&O5sWM~ z$@wo|(h(kV-|lJm{R3C8TzS{kC4+(ud~KRpnqb0MY}$Swr~yX5)*(jB#zxBmd%{dc6*-617EKd>WJ=D?0pABAFb3>~LJN7QP;|qk z4U5JVzY$KER5}*Ismga6GN_hR$yJ;wX=!@w zs45dfe*S;Fls&R9?>>Pd00B=pDZz!Hg;V=emM`R!-kpYWU%^`d5(d!!JO_#$Ss9t0 z$$6s76KZ-)cd{8raYKVLkd&0fNzb9+^#OM#ggZ>uJ&9T5>lWY^@IamUl1LQrc2I>q zfq@WeYzU~fd>y;7BX2%-`CjUUx4!Aia5GuVCNd8#cs#Q1pyM5af))Wh>@k6LVC*Ie zX?-}7w+da~i%eD~hoqrJs9@0dksXh*3!}<2%tnX;L}{e5oE*75{2i{e8iaft#>ocO zw+D?sdu(;@z#8~ux|&pSUSzwd=u>#Was2cmce^{QPwq$j<1m#EVvyWPCqn#>$`8yV zd4oFy1Yic{W)G9ywskA|7>?`cgfDCf2M5i&$GVzNAmXdY*CoOy4L-Nc<-UUms?oFYOK-kpU0KhqAdF_J1BL5hDS^H2{e zpxH3J2LQ1e?A+CfDzJu(+3!Bhrx+k0#y2J1VO0va^7cMhS-FE9R*(94A%_l5}j3DG9m%?I4FvPyE2MH%&hOlz|AlAsC(YPm2icq2NlY?VTonqxWw( zV={px@4>%^zRhmC7@ z+$<-Tl7N6WT)mF?=G{H&!;Q|4^*;&^5lgKGcp5Y**gf%`A;KQlKSgGOCB~(W6~@NK z5OigU*&L zW0Z(hl#GDAk6FaN{eMvpp|jbC-Q4IH7>LseWlP_*IP# ztRZ;x@_#)tfoI9m5^}*tO#e6}((o8-%v#H&NNeFNcR1J@4KM^b%=ZjZqN-KZcaf|e&RcvBS;5cP!DC^Lun@!3ss*IEP7e)LTN*RnIIE za=58?M-RUU1K5fOq4HPLKv>Omi$>y%xnDinR<8GG)=RwriM>Kf++>#FVYrF zU*fkw+N9T*Gun`(OO?IW{-Wnij)+K;i}~gx%l;D66?0=Run@AhO~{pekfjelD)Y^zNAK$8{k!f?5{GN-buI z&lrV5qZq}&ymOB!C@3)W>q<7!y%SkeGlA!}xan8Ck%0j}9B}}LY!N~+&{`sG>+^AB zWFBBDGe;dxFS*vL zo5!I@1TwGC)y@MHjR;|rFNh^Y>1GpA`%(9;9z==QMTTJPD8aj@ zOYO7b2ePLsa3&*^boBb@w9YnwUnnQaKIh7+puua!I8!xlH1&MP2db#pZYEBjLNvZO z^E}Owju+OA0AtF+|08C7Wbw0S#He9|JAH;Plj_ zY*poQkR?K{e7CSDI)-z81u@UDnkA|pJS`{RA2ZbDhJ8aCM`~Y8Up(bg+r``n&M9?e zOpC6GhOVT~M@T8*BX#AO)OJL@s;m0Q)$YhAp!#KWFK9Ktky1=f*l!Lf!XM)pL##cF zgzA*%`M947wh};@&2*Y4(JeH1C)i@(`7Xb#5?ws7F`eXdb##V`kUH$&#}<~^-@_-^ zwl%Xh$-6$sO1}D{yzZLYgvH7UNY34B+OF~5m$zAgx1tfzN?1)GveQAZz-MS!^eI@M}n9RoXv$eCYy`#NiDX@u! zqKVJR^SU7elOKn~`jP%IRcZa6wzco8{Uzy%bUJ+ool{b=Jq5XAF4x&*IhL=^QMw4p z-Bg$Gg(?8x54_atS%S8o#|Q7}0{}0c3u>|7@5#BkXT`&}Ctst!7CzNuPvS+mKhSa| z8G;P4!<;@^qO-1jZLD`CpXr_zTiJKJ3c=_gJ`tP0GHwA|#^H*t2ZAUJ%2$1Pg2x)h@3iGe^kL=zm6k7$iCe!+ovpd`53r)0trXu|* zST}xmoYxynuOY#~W6@SygsX?Q3^(?XnXVa`D;lj8;oas3X>7L*a8}Q!^OO(zVbDBAP=%1Zv?fQ3nG)XHF4A zh%(~qeW8TFRLhZ}aD9hNKb~U?VVdUb&Wi}ay!L|FLciZmZQ#$W#cYCBdPwaxc{ZoU z@5T@}B58m$c27^qj&nnqom|(>(yKSD7+j%U=RjGQoSJ$;7dTi;m#)pa*;M{EU~-R} zWO`;!0C8~HPKk(-{z7GxEDI0oj=Srvg`0d-bBZr;qdh*=p5FMlF@!t|E9f@KbREY)@YE_47 zYN{;eCQB-o`mk=@_=6^qiDxZ?q24wz+Bc_hz{QQpS>EN)A!%EgX8H~lfh2Sa(w}zJ ze3FpWM&a1mA+mi3?pPex>(e(8-cEQBcjc5=9GtLq9h|*1KDW6CJrBTL#0W+t`)wh7 z64c4^Dxo@HIXZNB?#dL>l8H_p2~KEIPI;6Hk_xQ+59>?=)J` zG6&8><=1o#5l|Bw^kc5mc&cJ)k>}U@H6TPbzXoZ8wH(yCCL#VsEV?e8<0s@66UYHp z@=-&d%?Q;CTW$kv-S9yxAmGWu_a|?UVMH5M);3AoWqDngci_9Y2FQz9Ga6hazcIPb zK}rX#t^2=b?bfQ|uhzM6j#E166KQhpRXSJAXq(`4B0|?6RcOAl`#X7h%U3+CyZ7wJ zN5t^{$0RENTt4pj_Q`+BO7|8)8jiWh`ah5t*^IlB#$!GVe^~}$bz8kZfR2WI;t|Ng zfl@sD&xspKF+RS#|6(z%;0%uU79k6=r|D`eSSd&wEdKrJnP;P;f&E%rTJ~Z91rOcR z)#YrK8B3@x5S0DzWbSz__5LyN`{ z4>(4wUXRHGSrPr)l^4du!_(i<0TEmR$owhic57g`Sip4LeDROJKQ@4dlv3axcxX)q zzu%~i3tgTq1~nwNeM~=c&ks>1L>ImMZnV8UE(tE*5}hn%DWN+3hW91=KhQ~5p1Z8I znp&mix}AUoWpnZrMgI=Sf>`N?>SIZCbcJ6ovn<0e|7#6ob0oY0D2YTO-1eoHRVnK! z7rZi!)YZ=|th8c*IB_IJ5n$ao@hZgDW4;EGR*%nS3GNME*ZdCYz5Dk0Kx4s|K={Uv z_p6v%U|>eu3h>*USX~JHz?V< zrV^YWK(3!+!yE>uYC}9=G)$YqWI{MXGUwpWzvKw)WF8N&6X~sD^b8o4(QlnU|hdY!lx5$mrFFh57lf z}thKZ4ASQlsszT0azDf@n(c1Ysh_!Jpcc#K9;8G}_}M%&&&^9Z65 zaIJrb=_cda!`FI*JkbE2O90eVu#h!Lj0u&iN0|TYG*&Bk( zO-N1=M;^twm)Om_x-k&mw}sjZvTLN&JNl z5^rsq=YX;1_TESEG2qA_6t`cTe-MQSjpidgqYUmJMC&0&g#~FPHb-{)&#A2f*TE)< zl#?t#eN9iFK5fjtgZ~Dw9e68*fCSG2-P2S)h%gJp1RM<|Ys4lCpO1`GD+~({-%=cZ zL?&AN0oc7rA#|~PK90}~K@PT;z+cC+@p|WstdPcCecs~{OjNVq7|xI^wJ&d=6NxsZ zHpldF=F4t(0xTa5rtTIV6RkcIl1a75X7}LmOK1j;T_WaWjR0-_f zCD7l{kkRrEu{tvy3f1fcpw~qERC^4l(gb1DM3y@C2(a8(x{g)+K6%IJ&wp9_OS%a% zGy-$YZUrQ_n(7D=9q~z9KlML>LOyIfgrdjl1o4CA`DpX8Q$rE=lf{CtFHmBgfC5rtV7Gitlh7*vL%K4`SZKNej0X2KA0|F-$-ZF0W^I3 z>~Ln_)31ITiAR=p&FGd`{ygHn{l7@_|NF<`v-R9d1or^AI@lVE3jvTop!YdES*@!M z@dyc?$KBQ10zyajq2u9-cto(Ji=TlA7;@i%v69!5x%5~K%dtrJHMX`cqS!9&;zf1d zWRLDC>8U*Y?5~g#o`3>F$Eh&;y~Uzw5zTy+_?d;~t4Mr>G)FPxY=WtculDJ*&>U)` zLbp$Z=Er6v>)hbbkRD2SRX_ve-M|9N&(FWdv2{nowGmyB1J9lSqC%(eH8lIekVj;~ z5L*5*X;XcrtrA5%018i>cmS^?_zMNQtGbV+JaK&+CEc@-iJle^v z8pQ{I_dpwfjnRD3>jr8@!Bs%Igy-jp7%0d@V->(n`e;JLCcdYem_0EU0&?2v{G186 zpG^UjJASxnaDVkOLU1$n?5CJ@?W$Skmil=Mn`VgC@v}e7i$l|d0 znE@>lBV$W*^G|>i;LcJrGi~nXASY?)!IuLX4SvCw($k}ixR8ZI6)DnO-%a>n zQFssk1E5|LTW2JnGEa7CPn;4qFo5zI04~7RbcB&RGK|8$RN(IgKHJtpiDV~U`V*m?jqUI=OsQ;l!+14 zZk+zwHV8#ey9!c*zSr<%7vdJmzj5w0lIZt31Rkr3^a~wfO;Jron%K8>-^-yelcNT z^>VanyoWXwGl-n+LvcmedP>|_AFq56U8eI5slL4aDE??qjWlF<4pN2v+{AY}-qLE= zerIEk2dt88O(>qmu`_WEKsDKM$KP@Y*9>sHqd$-FfWz&?mk)Z0??bgWdCIq@Nk_Qv z+sC$>AVIDnM64;mUK2LrIt;K|HLNN@})6^DN`C$WU^vq!N|4ES;2 z5gkysAgIupWoKh!qPrUeb9+@t*CB!pUO%uUhJb{J-5DsCC zDivhhvY?mQ{DQ@HEo@uF73cjZkcKqCvVMKNUV|`-mZ73u5!d?Vix)zA<4%_tft8hi zCI43bt34zNY+D{}ZMb53De>Y--J#SgS6YSjc;{X7p)-&1RQ38mD~r1Dby9KL;#zV4 z5`srk#16W{f%qpN03E==(ZYKA`Z?5wI_z=C7-O?D&m1~bU_-e%_o5QtU{3zq)lCms z5f{6F0cn$hdl7bvO}l9e4;Ecc#*B_r!Z=-~u?Z5-vhUF2e%Y_MrKTx*o&vPiBnq%h zDRDk5FmwwOR&VVD>$GmU5P&ns4-&T)ubALQbNjD2uqSJJA|oR~7s2X6JlB%r1%G%2 zra?#y|6h_&^U*dTAm|6)?>;{;1rviCr3+L0HRNp638-zVuZTIM0=9~~L7TIjTR7T{-O6n9DC0IrlG zRHJX7eYvc9tQ`)678N)y1c^8-^71xYLx%y}5ObRu3TE(J!;u7r0(&3Q&xC7>5EjAW zzO|~J1Ddx1{k{@4vx5f(EH~@lEv&sLGaq-;oY-@~dk}L+FfW5?P+S?&RA;`I`27Z@ z>~RlbA=PGB`1w=Zsw59M1@s2JPyD01!prsVbEIpP?go6b4s;dA0d9m7{v zF0MX|shf6O^F?<`X=P<4jyqh6eA3d1+n}s@{PrDYG5nf*tsX-B^d`1g$(6)PLbRan z%?+f&c*a`_f(Pz5fF$W0XE&WsrX>IrBBOb$^la#a%|AS;+N#N(!XbQ8Ab7Bu@wXXc z8p6AC9YY@UYD^CJcyYdRoP{LM4y$pmJ^)gCgZo}T4} z%M@QZ(EhmFk?lJUQ`v|d$*Wnor7u*A>=RgVWgu4_v zSKz9+S!KK!GrX(9RPwJAr&#U6UQ8=_YV3Iad9|SM#<;_5hS_qYbBrG}9M)pIE!WDK zEPQzj^6FMghEnAS^P6BD6^Psx%FIQ3fQz3vgN%(|0A_)^lbTfwTL6~&X|zdYJ20`c zYagjqQ*fzW#gTKBcGb0T-)gDNn^)Z04_FV7+rFfQ(9<9?SGIA{O}KHNe&QNoG~UO% z@&#d2#p{D6Xj#4e|NmA;?9%^r;N0}8V_zao)qDs!Q=wwH0{`e~8)@Csun+!!0I9D$ AH~;_u literal 41231 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

&^om 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 diff --git a/docs/swimlanes.io.OnlyServer.txt b/docs/swimlanes.io.OnlyServer.txt index c2f72c8..aff6a01 100644 --- a/docs/swimlanes.io.OnlyServer.txt +++ b/docs/swimlanes.io.OnlyServer.txt @@ -1,19 +1,25 @@ -title: Generate PDF Client-Sever via only server +title: Generate PDF Client-Sever via any process -note: Compress disabled (via DisableOptionsHtmlToPdf) +note: Minify, Compress and Logging can be disabled (via DisableOptionsHtmlToPdf) -HtmlPdfServer ->App Client: AddHtmlPdfService (Optional Default PageConfig) -App Client --> App Client : Warmup HtmlPdfService -App Client --> Request HtmlPdf: Html + PageConfig(Optional) + timeout -Request HtmlPdf --> Request HtmlPdf : Minify Html - - -App Client -> HtmlPdfServer: ** Run (Optional Input param) ** +HtmlPdfServer -> App Server: AddHtmlPdfService +App Server --> App Server : Warmup HtmlPdfService +App Server --> HtmlPdfServer: FromHtml (Disable Compress) +HtmlPdfServer --> HtmlPdfServer : Minify Html +App Server --> HtmlPdfServer: FromRazor (Disable Compress) +HtmlPdfServer --> HtmlPdfServer : Execute Razor Engine +HtmlPdfServer --> HtmlPdfServer : Minify Html +App Server --> HtmlPdfServer: FromUrl (Disable Compress and Minify ) +App Server --> HtmlPdfServer: Input param (opc) +App Server --> HtmlPdfServer: Timeout (opc) +App Server --> HtmlPdfServer: PageConfig (opc) +App Server --> HtmlPdfServer: BeforePDF (opc) +App Server --> HtmlPdfServer: AfterPDF (opc) +App Server -> HtmlPdfServer: ** Run ** HtmlPdfServer --> HtmlPdfServer : Exec BeforePdf (Input param) HtmlPdfServer --> HtmlPdfServer : **Generate PDF** HtmlPdfServer --> HtmlPdfServer : Exec AfterPdf (Input param and Transform output type) +HtmlPdfServer -> App Server : ** Result HtmlPdf** -HtmlPdfServer -> App Client : ** Result HtmlPdf** - -Order: App Client, Request HtmlPdf, HtmlPdfServer \ No newline at end of file +Order: App Server, HtmlPdfServer \ No newline at end of file diff --git a/src/HtmlPdfPlus.Client/Commands/IHtmlPdfClient.cs b/src/HtmlPdfPlus.Client/Commands/IHtmlPdfClient.cs index 1e9bc3c..2dec1da 100644 --- a/src/HtmlPdfPlus.Client/Commands/IHtmlPdfClient.cs +++ b/src/HtmlPdfPlus.Client/Commands/IHtmlPdfClient.cs @@ -49,7 +49,7 @@ public interface IHtmlPdfClient IHtmlPdfClient FromHtml(string html); ///

- /// ;Register Page Url to be executed by the server. + /// Register Page Url to be executed by the server. /// /// The url /// instance. diff --git a/src/HtmlPdfPlus.Client/HtmlPdfPlus.Client.csproj b/src/HtmlPdfPlus.Client/HtmlPdfPlus.Client.csproj index e379ed1..6ce659e 100644 --- a/src/HtmlPdfPlus.Client/HtmlPdfPlus.Client.csproj +++ b/src/HtmlPdfPlus.Client/HtmlPdfPlus.Client.csproj @@ -61,8 +61,8 @@ - + - + diff --git a/src/HtmlPdfPlus.Server/HtmlPdfPlus.Server.csproj b/src/HtmlPdfPlus.Server/HtmlPdfPlus.Server.csproj index b69334c..ecf0ebc 100644 --- a/src/HtmlPdfPlus.Server/HtmlPdfPlus.Server.csproj +++ b/src/HtmlPdfPlus.Server/HtmlPdfPlus.Server.csproj @@ -49,11 +49,11 @@ - - + + - + diff --git a/src/HtmlPdfPlus.Shared/HtmlPdfPlus.Shared.csproj b/src/HtmlPdfPlus.Shared/HtmlPdfPlus.Shared.csproj index c465d80..2a6e3e2 100644 --- a/src/HtmlPdfPlus.Shared/HtmlPdfPlus.Shared.csproj +++ b/src/HtmlPdfPlus.Shared/HtmlPdfPlus.Shared.csproj @@ -54,6 +54,6 @@ - + diff --git a/src/README.txt b/src/README.txt index 6a69b87..7cc5b40 100644 --- a/src/README.txt +++ b/src/README.txt @@ -75,8 +75,8 @@ dotnet tool update --global PowerShell dotnet tool install --global Microsoft.Playwright.CLI playwright.exe install --with-deps -Note: Make sure that the path to the executable is mapped to: C:\Users\[YourU)ser]\.dotnet\tools. -If it is not, run it directly via the path C:\Users\[YourUser]\.dotnet\tools\playwright.exe install --with-deps +Note: Make sure that the path to the executable is mapped to: C:\Users\[login]\.dotnet\tools. +If it is not, run it directly via the path C:\Users\[login]\.dotnet\tools\playwright.exe install --with-deps Usage ===== diff --git a/src/docs/assemblies/HtmlPdfPlus/IHtmlPdfClient.md b/src/docs/assemblies/HtmlPdfPlus/IHtmlPdfClient.md index b5ff8a9..336d14d 100644 --- a/src/docs/assemblies/HtmlPdfPlus/IHtmlPdfClient.md +++ b/src/docs/assemblies/HtmlPdfPlus/IHtmlPdfClient.md @@ -16,7 +16,7 @@ public interface IHtmlPdfClient | --- | --- | | [FromHtml](IHtmlPdfClient/FromHtml.md)(…) | Register HTML to be executed by the server. | | [FromRazor<T>](IHtmlPdfClient/FromRazor.md)(…) | Execute the Razor HTML template with the data and register the HTML. | -| [FromUrl](IHtmlPdfClient/FromUrl.md)(…) | ;Register Page Url to be executed by the server. | +| [FromUrl](IHtmlPdfClient/FromUrl.md)(…) | Register Page Url to be executed by the server. | | [HtmlParser](IHtmlPdfClient/HtmlParser.md)(…) | Execute parse validation of the HTML before sending it to the server. | | [Logger](IHtmlPdfClient/Logger.md)(…) | Set Logger integration. | | [PageConfig](IHtmlPdfClient/PageConfig.md)(…) | Set PDF page configuration. | diff --git a/src/docs/assemblies/HtmlPdfPlus/IHtmlPdfClient/FromUrl.md b/src/docs/assemblies/HtmlPdfPlus/IHtmlPdfClient/FromUrl.md index 0772357..84e4330 100644 --- a/src/docs/assemblies/HtmlPdfPlus/IHtmlPdfClient/FromUrl.md +++ b/src/docs/assemblies/HtmlPdfPlus/IHtmlPdfClient/FromUrl.md @@ -4,7 +4,7 @@
-#### ;Register Page Url to be executed by the server. +#### Register Page Url to be executed by the server. ```csharp public IHtmlPdfClient FromUrl(Uri value) From d7145ab64a1d70d303a4356cbbc9018f74d71312 Mon Sep 17 00:00:00 2001 From: Fernando Cerqueira Date: Tue, 18 Mar 2025 18:05:37 -0300 Subject: [PATCH 3/8] Updated readme (v0.4.0-beta) --- README.md | 10 ++++++++-- .../ConsoleHtmlToPdfPlus.OnlyAtServer/v1/Program.cs | 2 +- .../ConsoleHtmlToPdfPlus.OnlyAtServer/v2/Program.cs | 4 ++-- samples/TcpServerHtmlToPdf.GenericServer/Program.cs | 2 +- samples/WebHtmlToPdf.CustomSaveFileServer/Program.cs | 2 +- src/HtmlPdfPlus.Server/Commands/IHtmlPdfServer.cs | 8 ++++---- .../Commands/IHtmlPdfServerContext.cs | 2 +- src/HtmlPdfPlus.Server/Core/HtmlPdfServer.cs | 4 ++-- src/README.txt | 12 ++++++++++-- .../HtmlPdfSrvPlus/HtmlPdfServerTest.cs | 8 ++++---- src/docs/assemblies/HtmlPdfPlus/IHtmlPdfServer-2.md | 4 ++-- .../IHtmlPdfServer-2/{Source.md => ScopeData.md} | 6 +++--- .../IHtmlPdfServer-2/{Request.md => ScopeRequest.md} | 6 +++--- .../HtmlPdfPlus/IHtmlPdfServerContext-2/Run.md | 2 +- 14 files changed, 43 insertions(+), 29 deletions(-) rename src/docs/assemblies/HtmlPdfPlus/IHtmlPdfServer-2/{Source.md => ScopeData.md} (61%) rename src/docs/assemblies/HtmlPdfPlus/IHtmlPdfServer-2/{Request.md => ScopeRequest.md} (78%) diff --git a/README.md b/README.md index f0f3a4f..da08560 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,12 @@ The current version (V.1.50.0) of **Playwright** supports **only the Chromium br ### What's new in the latest version -- **v0.3.0-beta (latest version)** +- **v0.4.0-beta (latest version)** + - Relaxation of Package Reference for .net8 to .net9 + - Renamed the 'Source' command to 'Scope' + - Renamed the 'Request' command to 'ScopeRequest' + +- **v0.3.0-beta** - Added FromUrl(Uri value) command to client-side mode - Fixed bug in server mode for multi thread safe when there is parameter customization and/or no client mode sending. - Moved the BeforePDF(Func> inputParam) command to the execution context. @@ -73,6 +78,7 @@ The current version (V.1.50.0) of **Playwright** supports **only the Chromium br - Added command FromHtml(string html, int converttimeout = 30000, bool minify = true) - Added command FromUrl(Uri value, int converttimeout = 30000) - Added command FromRazor\(string template, T model, int converttimeout = 30000, bool minify = true) + - **v0.2.0-beta** - Initial version @@ -284,7 +290,7 @@ var PDFserver = HostApp!.Services.GetHtmlPdfService(); //Performs conversion and custom operations on the server var pdfresult = await PDFserver - .Source() + .ScopeData() .FromHtml(HtmlSample(),5000) .Run(applifetime.ApplicationStopping); diff --git a/samples/ConsoleHtmlToPdfPlus.OnlyAtServer/v1/Program.cs b/samples/ConsoleHtmlToPdfPlus.OnlyAtServer/v1/Program.cs index e2defd8..768f20f 100644 --- a/samples/ConsoleHtmlToPdfPlus.OnlyAtServer/v1/Program.cs +++ b/samples/ConsoleHtmlToPdfPlus.OnlyAtServer/v1/Program.cs @@ -36,7 +36,7 @@ public static async Task Main(string[] args) //Performs conversion and custom operations on the server var pdfresult = await PDFserver - .Source(Path.Combine(PathToSamples, "html2pdfHtml.pdf")) + .ScopeData(Path.Combine(PathToSamples, "html2pdfHtml.pdf")) .FromHtml(HtmlSample(), 5000) .BeforePDF((html, _, _) => { diff --git a/samples/ConsoleHtmlToPdfPlus.OnlyAtServer/v2/Program.cs b/samples/ConsoleHtmlToPdfPlus.OnlyAtServer/v2/Program.cs index 1d8efef..2ecf9b1 100644 --- a/samples/ConsoleHtmlToPdfPlus.OnlyAtServer/v2/Program.cs +++ b/samples/ConsoleHtmlToPdfPlus.OnlyAtServer/v2/Program.cs @@ -33,7 +33,7 @@ public static async Task Main(string[] args) //Performs conversion on the server var pdfresult = await PDFserver - .Source() + .ScopeData() .FromHtml(HtmlSample(),5000) .Run(applifetime.ApplicationStopping); @@ -53,7 +53,7 @@ public static async Task Main(string[] args) //Performs conversion on the server pdfresult = await PDFserver - .Source() + .ScopeData() .FromUrl(new Uri("https://github.com/FRACerqueira/HtmlPdfPlus"), 5000) .Run(applifetime.ApplicationStopping); diff --git a/samples/TcpServerHtmlToPdf.GenericServer/Program.cs b/samples/TcpServerHtmlToPdf.GenericServer/Program.cs index a072fac..ae44f6b 100644 --- a/samples/TcpServerHtmlToPdf.GenericServer/Program.cs +++ b/samples/TcpServerHtmlToPdf.GenericServer/Program.cs @@ -114,7 +114,7 @@ private static void DataReceived(object sender, DataReceivedEventArgs e) var request = Encoding.UTF8.GetString(e.Data.Array!, 0, e.Data.Count); var aux = PDFserver - .Request(request) + .ScopeRequest(request) .Run(CancellationToken.None).Result; var sendata = JsonSerializer.Serialize>(aux); diff --git a/samples/WebHtmlToPdf.CustomSaveFileServer/Program.cs b/samples/WebHtmlToPdf.CustomSaveFileServer/Program.cs index 2ca1e74..41fd4f6 100644 --- a/samples/WebHtmlToPdf.CustomSaveFileServer/Program.cs +++ b/samples/WebHtmlToPdf.CustomSaveFileServer/Program.cs @@ -33,7 +33,7 @@ app.MapPost("/SavePdf", async ([FromServices] IHtmlPdfServer PDFserver, [FromBody] string requestclienthtmltopdf, CancellationToken token) => { return await PDFserver - .Request(requestclienthtmltopdf) + .ScopeRequest(requestclienthtmltopdf) .BeforePDF( (html,inputparam, _) => { if (inputparam is null) diff --git a/src/HtmlPdfPlus.Server/Commands/IHtmlPdfServer.cs b/src/HtmlPdfPlus.Server/Commands/IHtmlPdfServer.cs index dc98ff7..b006815 100644 --- a/src/HtmlPdfPlus.Server/Commands/IHtmlPdfServer.cs +++ b/src/HtmlPdfPlus.Server/Commands/IHtmlPdfServer.cs @@ -14,19 +14,19 @@ namespace HtmlPdfPlus public interface IHtmlPdfServer : IDisposable { /// - /// Transfer context for server context with input data,and custom actions. + /// Transfer context scope for server with input data,and custom actions. /// Input data, for customizing HTML before converting to PDF on the server. /// /// An instance of . - IHtmlPdfServerContext Source(TIn? inputparam = default); + IHtmlPdfServerContext ScopeData(TIn? inputparam = default); /// - /// Transfer request client for server context for custom actions + /// Transfer request client for server context scope for custom actions /// /// The compressed data from the request HtmlPdfCliPlus client. /// An instance of . - IHtmlPdfServerContext Request(string requestClient); + IHtmlPdfServerContext ScopeRequest(string requestClient); /// /// Perform HTML to PDF conversion from the request HtmlPdfCliPlus client. diff --git a/src/HtmlPdfPlus.Server/Commands/IHtmlPdfServerContext.cs b/src/HtmlPdfPlus.Server/Commands/IHtmlPdfServerContext.cs index 9fcda7d..013a7e4 100644 --- a/src/HtmlPdfPlus.Server/Commands/IHtmlPdfServerContext.cs +++ b/src/HtmlPdfPlus.Server/Commands/IHtmlPdfServerContext.cs @@ -70,7 +70,7 @@ public interface IHtmlPdfServerContext /// An instance of . /// Thrown when the empty source Html or Url. /// Thrown when is invalid. - /// Thrown when is invalid. + /// Thrown when is invalid. Task> Run(CancellationToken token = default); } } diff --git a/src/HtmlPdfPlus.Server/Core/HtmlPdfServer.cs b/src/HtmlPdfPlus.Server/Core/HtmlPdfServer.cs index efa4426..0447be5 100644 --- a/src/HtmlPdfPlus.Server/Core/HtmlPdfServer.cs +++ b/src/HtmlPdfPlus.Server/Core/HtmlPdfServer.cs @@ -41,13 +41,13 @@ public HtmlPdfServer(HtmlPdfBuilder? pdfSrvBuilder, string sourcealias) /// - public IHtmlPdfServerContext Source(Tin? inputparam) + public IHtmlPdfServerContext ScopeData(Tin? inputparam) { return new HtmlPdfServerContext(this, inputparam, null); } /// - public IHtmlPdfServerContext Request(string requestClient) + public IHtmlPdfServerContext ScopeRequest(string requestClient) { return new HtmlPdfServerContext(this, default, requestClient); } diff --git a/src/README.txt b/src/README.txt index 7cc5b40..d29c151 100644 --- a/src/README.txt +++ b/src/README.txt @@ -45,7 +45,14 @@ Features What's new in the latest version ================================ -- v0.3.0-beta (latest version) +- v0.4.0-beta (latest version) + + - Relaxation of Package Reference for .net8 to .net9 + - Renamed the 'Source' command to 'Scope' + - Renamed the 'Request' command to 'ScopeRequest' + +- v0.3.0-beta + - Added FromUrl(Uri value) command to client-side mode - Fixed bug in server mode for multi thread safe when there is parameter customization and/or no client mode sending. - Moved the BeforePDF(Func> inputParam) command to the execution context. @@ -59,6 +66,7 @@ What's new in the latest version - Added command FromRazor\(string template, T model, int converttimeout = 30000, bool minify = true) - v0.2.0-beta + - Initial version Prerequisites @@ -215,7 +223,7 @@ var PDFserver = HostApp!.Services.GetHtmlPdfService(); //Performs conversion and custom operations on the server var pdfresult = await PDFserver - .Source() + .ScopeData() .FromHtml(HtmlSample(),5000) .Run(applifetime.ApplicationStopping); diff --git a/src/TestHtmlPdfCliPlus/HtmlPdfSrvPlus/HtmlPdfServerTest.cs b/src/TestHtmlPdfCliPlus/HtmlPdfSrvPlus/HtmlPdfServerTest.cs index 04c901e..9b04757 100644 --- a/src/TestHtmlPdfCliPlus/HtmlPdfSrvPlus/HtmlPdfServerTest.cs +++ b/src/TestHtmlPdfCliPlus/HtmlPdfSrvPlus/HtmlPdfServerTest.cs @@ -17,7 +17,7 @@ public class HtmlPdfServerTests public void BeforePDF_ThrowsArgumentNullException_WhenInputParamIsNull() { // Act & Assert - Assert.Throws(() => new HtmlPdfServer(null, "teste").Source(null).BeforePDF(null)); + Assert.Throws(() => new HtmlPdfServer(null, "teste").ScopeData(null).BeforePDF(null)); } @@ -25,7 +25,7 @@ public void BeforePDF_ThrowsArgumentNullException_WhenInputParamIsNull() public void AfterPDF_ThrowsArgumentNullException_WhenInputParamIsNull() { // Act & Assert - Assert.Throws(() => new HtmlPdfServer(null, "teste").Source(null).AfterPDF(null)); + Assert.Throws(() => new HtmlPdfServer(null, "teste").ScopeData(null).AfterPDF(null)); } [Fact] @@ -98,7 +98,7 @@ public async Task Run_Resultfalse_WhenErrorOnBeforePDF() // Act & Assert var result = await new HtmlPdfServer(objbuilder, "Server") - .Request(requestHtmlPdf) + .ScopeRequest(requestHtmlPdf) .BeforePDF((_, _, _) => throw new InvalidTimeZoneException("Test")) .Run(CancellationToken.None); Assert.IsType(result.Error); @@ -150,7 +150,7 @@ public async Task Run_ResultTrue_WithBeforePDF_AND_AfterPDF() // Act & Assert var result = await new HtmlPdfServer(objbuilder, "Server") - .Request(requestHtmlPdf) + .ScopeRequest(requestHtmlPdf) .BeforePDF((_,_,_) => Task.FromResult("

Test

")) .AfterPDF((_,_,_) => Task.FromResult("Test")) .Run(CancellationToken.None); diff --git a/src/docs/assemblies/HtmlPdfPlus/IHtmlPdfServer-2.md b/src/docs/assemblies/HtmlPdfPlus/IHtmlPdfServer-2.md index cf30009..b4c4b12 100644 --- a/src/docs/assemblies/HtmlPdfPlus/IHtmlPdfServer-2.md +++ b/src/docs/assemblies/HtmlPdfPlus/IHtmlPdfServer-2.md @@ -19,9 +19,9 @@ public interface IHtmlPdfServer : IDisposable | name | description | | --- | --- | -| [Request](IHtmlPdfServer-2/Request.md)(…) | Transfer request client for [`IHtmlPdfServerContext`](./IHtmlPdfServerContext-2.md) server context for custom actions | | [Run](IHtmlPdfServer-2/Run.md)(…) | Perform HTML to PDF conversion from the request HtmlPdfCliPlus client. | -| [Source](IHtmlPdfServer-2/Source.md)(…) | Transfer context for [`IHtmlPdfServerContext`](./IHtmlPdfServerContext-2.md) server context with input data,and custom actions. Input data, for customizing HTML before converting to PDF on the server. | +| [ScopeData](IHtmlPdfServer-2/ScopeData.md)(…) | Transfer context scope for [`IHtmlPdfServerContext`](./IHtmlPdfServerContext-2.md) server with input data,and custom actions. Input data, for customizing HTML before converting to PDF on the server. | +| [ScopeRequest](IHtmlPdfServer-2/ScopeRequest.md)(…) | Transfer request client for [`IHtmlPdfServerContext`](./IHtmlPdfServerContext-2.md) server context scope for custom actions | ### See Also diff --git a/src/docs/assemblies/HtmlPdfPlus/IHtmlPdfServer-2/Source.md b/src/docs/assemblies/HtmlPdfPlus/IHtmlPdfServer-2/ScopeData.md similarity index 61% rename from src/docs/assemblies/HtmlPdfPlus/IHtmlPdfServer-2/Source.md rename to src/docs/assemblies/HtmlPdfPlus/IHtmlPdfServer-2/ScopeData.md index f6e8ea4..e40567e 100644 --- a/src/docs/assemblies/HtmlPdfPlus/IHtmlPdfServer-2/Source.md +++ b/src/docs/assemblies/HtmlPdfPlus/IHtmlPdfServer-2/ScopeData.md @@ -1,13 +1,13 @@ ![HtmlPdfPLus Logo](https://raw.githubusercontent.com/FRACerqueira/HtmlPdfPLus/refs/heads/main/docs/images/iconsmall.png) -### IHtmlPdfServer<TIn,TOut>.Source method +### IHtmlPdfServer<TIn,TOut>.ScopeData method
-#### Transfer context for [`IHtmlPdfServerContext`](../IHtmlPdfServerContext-2.md) server context with input data,and custom actions. Input data, for customizing HTML before converting to PDF on the server. +#### Transfer context scope for [`IHtmlPdfServerContext`](../IHtmlPdfServerContext-2.md) server with input data,and custom actions. Input data, for customizing HTML before converting to PDF on the server. ```csharp -public IHtmlPdfServerContext Source(TIn? inputparam = default) +public IHtmlPdfServerContext ScopeData(TIn? inputparam = default) ``` ### Return Value diff --git a/src/docs/assemblies/HtmlPdfPlus/IHtmlPdfServer-2/Request.md b/src/docs/assemblies/HtmlPdfPlus/IHtmlPdfServer-2/ScopeRequest.md similarity index 78% rename from src/docs/assemblies/HtmlPdfPlus/IHtmlPdfServer-2/Request.md rename to src/docs/assemblies/HtmlPdfPlus/IHtmlPdfServer-2/ScopeRequest.md index 390ec3a..7d68ec2 100644 --- a/src/docs/assemblies/HtmlPdfPlus/IHtmlPdfServer-2/Request.md +++ b/src/docs/assemblies/HtmlPdfPlus/IHtmlPdfServer-2/ScopeRequest.md @@ -1,13 +1,13 @@ ![HtmlPdfPLus Logo](https://raw.githubusercontent.com/FRACerqueira/HtmlPdfPLus/refs/heads/main/docs/images/iconsmall.png) -### IHtmlPdfServer<TIn,TOut>.Request method +### IHtmlPdfServer<TIn,TOut>.ScopeRequest method
-#### Transfer request client for [`IHtmlPdfServerContext`](../IHtmlPdfServerContext-2.md) server context for custom actions +#### Transfer request client for [`IHtmlPdfServerContext`](../IHtmlPdfServerContext-2.md) server context scope for custom actions ```csharp -public IHtmlPdfServerContext Request(string requestClient) +public IHtmlPdfServerContext ScopeRequest(string requestClient) ``` | parameter | description | diff --git a/src/docs/assemblies/HtmlPdfPlus/IHtmlPdfServerContext-2/Run.md b/src/docs/assemblies/HtmlPdfPlus/IHtmlPdfServerContext-2/Run.md index 98d7dee..5d747e8 100644 --- a/src/docs/assemblies/HtmlPdfPlus/IHtmlPdfServerContext-2/Run.md +++ b/src/docs/assemblies/HtmlPdfPlus/IHtmlPdfServerContext-2/Run.md @@ -24,7 +24,7 @@ An instance of HtmlPdfResult. | --- | --- | | ArgumentException | Thrown when the empty source Html or Url. | | ArgumentException | Thrown when *TOut* is invalid. | -| ArgumentException | Thrown when [`Request`](../IHtmlPdfServer-2/Request.md) is invalid. | +| ArgumentException | Thrown when [`ScopeRequest`](../IHtmlPdfServer-2/ScopeRequest.md) is invalid. | ### See Also From 7990f98ccb4afdd2d3ef9cfd1d8deaab54ffd769 Mon Sep 17 00:00:00 2001 From: Fernando Cerqueira Date: Thu, 20 Mar 2025 12:49:22 -0300 Subject: [PATCH 4/8] - v0.4.0-beta (Next version) - Relaxation of Package Reference for .net8 to .net9 - Renamed the 'Source' command to 'Scope' - Renamed the 'Request' command to 'ScopeRequest' - Changed parameter in funcion SubmitHtmlToPdf to byte[] instead of string - Changed parameter for command Run to byte[] instead of string - Changed parameter for command ScopeRequest to byte[] instead of string - Removed DecompressBytes() method to class HtmlPdfResult - Added DecompressOutputData() method to class HtmlPdfResult for custom scenarios --- README.md | 5 + docs/images/swimlanes.io.AnyProcess.png | Bin 83869 -> 83585 bytes docs/images/swimlanes.io.Http.png | Bin 72074 -> 72119 bytes docs/swimlanes.io.AnyProcess.txt | 10 +- docs/swimlanes.io.Http.txt | 9 +- .../Program.cs | 10 +- .../Program.cs | 16 +- .../v2/Program.cs | 3 +- .../Program.cs | 12 +- .../Program.cs | 5 +- samples/WebHtmlToPdf.GenericServer/Program.cs | 7 +- .../Commands/IHtmlPdfClient.cs | 4 +- .../Core/HtmlPdfClientInstance.cs | 52 ++-- src/HtmlPdfPlus.Client/HtmlPdfClient.cs | 28 --- .../Commands/IHtmlPdfServer.cs | 8 +- .../Commands/IHtmlPdfServerContext.cs | 2 +- src/HtmlPdfPlus.Server/Core/HtmlPdfBuilder.cs | 8 +- src/HtmlPdfPlus.Server/Core/HtmlPdfServer.cs | 223 ++++++++++++++++-- .../Core/HtmlPdfServerContext.cs | 49 +++- src/HtmlPdfPlus.Shared/Core/GZipHelper.cs | 113 +-------- src/HtmlPdfPlus.Shared/Core/RequestHtmlPdf.cs | 15 +- .../HtmlPdfPlus.Shared.csproj | 2 +- src/HtmlPdfPlus.Shared/HtmlPdfResult.cs | 16 +- src/HtmlPdfPlus.Shared/StreamExtension.cs | 26 ++ src/README.txt | 6 +- .../HtmlPdfCliPlus/HtmlPdfClientTest.cs | 81 +------ .../HtmlPdfSrvPlus/HtmlPdfServerTest.cs | 26 +- src/docs/assemblies/HtmlPdfPlus.Shared.md | 1 + .../assemblies/HtmlPdfPlus/HtmlPdfClient.md | 2 - .../HtmlPdfClient/ToHtmlPdfResult.md | 50 ---- .../assemblies/HtmlPdfPlus/HtmlPdfResult-1.md | 2 +- .../HtmlPdfResult-1/DecompressOutputData.md | 28 +++ .../HtmlPdfPlus/IHtmlPdfClient/Run.md | 4 +- .../HtmlPdfPlus/IHtmlPdfServer-2/Run.md | 4 +- .../IHtmlPdfServer-2/ScopeRequest.md | 4 +- .../assemblies/HtmlPdfPlus/StreamExtension.md | 23 ++ .../ReadToBytesAsync.md} | 14 +- src/docs/docindex.md | 1 + 38 files changed, 460 insertions(+), 409 deletions(-) create mode 100644 src/HtmlPdfPlus.Shared/StreamExtension.cs delete mode 100644 src/docs/assemblies/HtmlPdfPlus/HtmlPdfClient/ToHtmlPdfResult.md create mode 100644 src/docs/assemblies/HtmlPdfPlus/HtmlPdfResult-1/DecompressOutputData.md create mode 100644 src/docs/assemblies/HtmlPdfPlus/StreamExtension.md rename src/docs/assemblies/HtmlPdfPlus/{HtmlPdfResult-1/DecompressBytes.md => StreamExtension/ReadToBytesAsync.md} (50%) diff --git a/README.md b/README.md index da08560..4ffdbfd 100644 --- a/README.md +++ b/README.md @@ -65,6 +65,11 @@ The current version (V.1.50.0) of **Playwright** supports **only the Chromium br - Relaxation of Package Reference for .net8 to .net9 - Renamed the 'Source' command to 'Scope' - Renamed the 'Request' command to 'ScopeRequest' + - Changed parameter in funcion SubmitHtmlToPdf to byte[] instead of string + - Changed parameter for command Run to byte[] instead of string + - Changed parameter for command ScopeRequest to byte[] instead of string + - Removed DecompressBytes() method to class HtmlPdfResult + - Added DecompressOutputData() method to class HtmlPdfResult for custom scenarios - **v0.3.0-beta** - Added FromUrl(Uri value) command to client-side mode diff --git a/docs/images/swimlanes.io.AnyProcess.png b/docs/images/swimlanes.io.AnyProcess.png index 9299bd81426f1c205894e0b711301acb09f6a2a2..b8ef5ddd288609be7f0bc4e07fa9255c369c8b9e 100644 GIT binary patch literal 83585 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 L94s%Jdqw>(wnskb literal 83869 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 diff --git a/docs/images/swimlanes.io.Http.png b/docs/images/swimlanes.io.Http.png index 5cf6580f0bcf639d30bcabca228427bde2986760..770317da6f40551f770a9651ec2d68c08f116f45 100644 GIT binary patch literal 72119 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�(Q9zr9%3N>?AZ=c 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�KX3^FgJJdX~!kNIiaB(H#sy-X1Lj$`o2DSdE-e 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 C%S)L6 diff --git a/docs/swimlanes.io.AnyProcess.txt b/docs/swimlanes.io.AnyProcess.txt index a3df46e..45cc6f2 100644 --- a/docs/swimlanes.io.AnyProcess.txt +++ b/docs/swimlanes.io.AnyProcess.txt @@ -6,22 +6,24 @@ HtmlPdfServer -> App Server: AddHtmlPdfService App Server --> App Server : Warmup HtmlPdfService App Client --> HtmlPdfClient: FromHtml HtmlPdfClient --> HtmlPdfClient : Minify Html -App Client --> HtmlPdfClient: FromRazor(Optional) +App Client --> HtmlPdfClient: FromRazor HtmlPdfClient --> HtmlPdfClient : Execute Razor Engine HtmlPdfClient --> HtmlPdfClient : Minify Html +App Client --> HtmlPdfClient: FromUrl + App Client --> HtmlPdfClient: PageConfig App Client --> HtmlPdfClient: Timeout App Client -> HtmlPdfClient: ** Run (Optional Input param) ** -HtmlPdfClient --> HtmlPdfClient : Create and Compress RequestHtmlPdf in Base64 +HtmlPdfClient --> HtmlPdfClient : Create and Compress RequestHtmlPdf HtmlPdfClient --> Func.Submit : Execute Submit Func.Submit-> App Server : ** Any process ** App Server --> HtmlPdfServer: BeforePDF App Server --> HtmlPdfServer: AfterPDF -App Server -> HtmlPdfServer: ** Run (Compress Base64) ** +App Server -> HtmlPdfServer: ** Run (Compress) ** -HtmlPdfServer --> HtmlPdfServer : Uncompress Base64 to RequestHtmlPdf +HtmlPdfServer --> HtmlPdfServer : Uncompress to RequestHtmlPdf HtmlPdfServer --> HtmlPdfServer : Exec BeforePdf (Input param) HtmlPdfServer --> HtmlPdfServer : **Generate PDF** HtmlPdfServer --> HtmlPdfServer : Exec AfterPdf (Input param and Transform output type) diff --git a/docs/swimlanes.io.Http.txt b/docs/swimlanes.io.Http.txt index 16a587b..d07c11e 100644 --- a/docs/swimlanes.io.Http.txt +++ b/docs/swimlanes.io.Http.txt @@ -6,20 +6,21 @@ HtmlPdfServer -> App Server: AddHtmlPdfService App Server --> App Server : Warmup HtmlPdfService App Client --> HtmlPdfClient: FromHtml HtmlPdfClient --> HtmlPdfClient : Minify Html -App Client --> HtmlPdfClient: FromRazor(Optional) +App Client --> HtmlPdfClient: FromRazor HtmlPdfClient --> HtmlPdfClient : Execute Razor Engine HtmlPdfClient --> HtmlPdfClient : Minify Html +App Client --> HtmlPdfClient: FromUrl App Client --> HtmlPdfClient: PageConfig App Client --> HtmlPdfClient: Timeout App Client -> HtmlPdfClient: ** Run (Optional Input param) ** -HtmlPdfClient --> HtmlPdfClient : Create and Compress RequestHtmlPdf in Base64 +HtmlPdfClient --> HtmlPdfClient : Create and Compress RequestHtmlPdf HtmlPdfClient -> App Server : ** HTTP/POST ** App Server --> HtmlPdfServer: BeforePDF App Server --> HtmlPdfServer: AfterPDF -App Server -> HtmlPdfServer: ** Run (Compress Base64) ** +App Server -> HtmlPdfServer: ** Run (Compress) ** -HtmlPdfServer --> HtmlPdfServer : Uncompress Base64 to RequestHtmlPdf +HtmlPdfServer --> HtmlPdfServer : Uncompress to RequestHtmlPdf HtmlPdfServer --> HtmlPdfServer : Exec BeforePdf (Input param) HtmlPdfServer --> HtmlPdfServer : **Generate PDF** HtmlPdfServer --> HtmlPdfServer : Exec AfterPdf (Input param and Transform output type) diff --git a/samples/ConsoleHtmlToPdfPlus.ClientSendHttp/Program.cs b/samples/ConsoleHtmlToPdfPlus.ClientSendHttp/Program.cs index a0f51d6..1ff4c02 100644 --- a/samples/ConsoleHtmlToPdfPlus.ClientSendHttp/Program.cs +++ b/samples/ConsoleHtmlToPdfPlus.ClientSendHttp/Program.cs @@ -105,11 +105,11 @@ public static async Task Main(string[] args) Console.WriteLine($"HtmlPdfClient send Url to PDF Server via http post"); pdfresult = await HtmlPdfClient.Create("HtmlPdfPlusClient") - .PageConfig((cfg) => cfg.Margins(10)) - .Logger(HostApp.Services.GetService>()) - .FromUrl(new Uri("https://github.com/FRACerqueira/HtmlPdfPlus")) - .Timeout(15000) - .Run(clienthttp, applifetime.ApplicationStopping); + .PageConfig((cfg) => cfg.Margins(10)) + .Logger(HostApp.Services.GetService>()) + .FromUrl(new Uri("https://github.com/FRACerqueira/HtmlPdfPlus")) + .Timeout(15000) + .Run(clienthttp, applifetime.ApplicationStopping); Console.WriteLine($"HtmlPdfClient IsSuccess {pdfresult.IsSuccess} after {pdfresult.ElapsedTime}"); diff --git a/samples/ConsoleHtmlToPdfPlus.ClientSendTcp/Program.cs b/samples/ConsoleHtmlToPdfPlus.ClientSendTcp/Program.cs index 14c7623..4a9d46f 100644 --- a/samples/ConsoleHtmlToPdfPlus.ClientSendTcp/Program.cs +++ b/samples/ConsoleHtmlToPdfPlus.ClientSendTcp/Program.cs @@ -5,6 +5,7 @@ // *************************************************************************************** using System.Text; +using System.Text.Json; using HtmlPdfPlus; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; @@ -20,9 +21,9 @@ public class Program private static readonly SimpleTcpClient ClientTcp = new("127.0.0.1:9000"); private static readonly SemaphoreSlim SemaphoreSlim = new(1); private static readonly List ResponseTcp = []; - private static string? ResultTcp= null; + private static byte[]? ResultTcp= null; private static readonly object Lockdatareceiver = new(); - private static int TimeoutWaitResponse = 30000; + private static readonly int TimeoutWaitResponse = 30000; public static async Task Main(string[] args) { @@ -62,7 +63,7 @@ public static async Task Main(string[] args) }) .Logger(HostApp.Services.GetService>()) .FromHtml(HtmlSample()) - .Timeout(5000) + .Timeout(500000) .Run(SendToTcpServer, applifetime.ApplicationStopping); Console.WriteLine($"HtmlPdfClient IsSuccess {pdfresult.IsSuccess} after {pdfresult.ElapsedTime}"); @@ -90,7 +91,8 @@ private static void DataReceivedTcp(object? sender, DataReceivedEventArgs e) ResponseTcp.AddRange(e.Data.Array!); if (ResponseTcp[^1] == 0) //token end message { - ResultTcp = Encoding.UTF8.GetString([.. ResponseTcp], 0, ResponseTcp.Count - 1); + ResponseTcp.RemoveAt(ResponseTcp.Count - 1); + ResultTcp = [.. ResponseTcp]; ResponseTcp.Clear(); SemaphoreSlim.Release(); } @@ -107,7 +109,7 @@ private static void ConnectedTcp(object? sender, ConnectionEventArgs e) Console.WriteLine($"*** Server {e.IpPort} connected"); } - private static async Task> SendToTcpServer(string requestdata, CancellationToken token) + private static async Task> SendToTcpServer(byte[] requestdata, CancellationToken token) { // This code mybe not efficient, just to demonstrate the functionality of HtmltoPdfPlus try @@ -121,9 +123,9 @@ private static async Task> SendToTcpServer(string requestd cts.CancelAfter(TimeoutWaitResponse); //wait response to tcpserver (trigger by DataReceivedTcp release enter Semaphore) await SemaphoreSlim.WaitAsync(TimeoutWaitResponse, token); - return ResultTcp!.ToHtmlPdfResult(); + var aux = JsonSerializer.Deserialize>(Encoding.UTF8.GetString(ResultTcp!))!; + return aux.DecompressOutputData(); } - catch (Exception ex) { return new HtmlPdfResult(false, false, TimeSpan.Zero, [], ex); diff --git a/samples/ConsoleHtmlToPdfPlus.OnlyAtServer/v2/Program.cs b/samples/ConsoleHtmlToPdfPlus.OnlyAtServer/v2/Program.cs index 2ecf9b1..4cf1079 100644 --- a/samples/ConsoleHtmlToPdfPlus.OnlyAtServer/v2/Program.cs +++ b/samples/ConsoleHtmlToPdfPlus.OnlyAtServer/v2/Program.cs @@ -89,7 +89,8 @@ private static IHostBuilder CreateHostBuilder(string[] args) => { services.AddHtmlPdfService((cfg) => { - cfg.Logger(LogLevel.Debug, "MyPDFServer") + cfg.DisableFeatures(HtmlPdfPlus.DisableOptionsHtmlToPdf.DisableCompress) + .Logger(LogLevel.Debug, "MyPDFServer") .DefaultConfig((page) => { page.DisplayHeaderFooter(true) diff --git a/samples/TcpServerHtmlToPdf.GenericServer/Program.cs b/samples/TcpServerHtmlToPdf.GenericServer/Program.cs index ae44f6b..2d9ebda 100644 --- a/samples/TcpServerHtmlToPdf.GenericServer/Program.cs +++ b/samples/TcpServerHtmlToPdf.GenericServer/Program.cs @@ -6,8 +6,6 @@ using System.Text; using System.Text.Json; -using HtmlPdfPlus; -using HtmlPdfPlus.Shared.Core; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; @@ -81,7 +79,7 @@ private static IHostBuilder CreateHostBuilder(string[] args) => { services.AddHtmlPdfService((cfg) => { - cfg.DefaultConfig((cfg) => + cfg.DefaultConfig((cfg) => { cfg.DisplayHeaderFooter(true) .Margins(10); @@ -111,15 +109,11 @@ private static void DataReceived(object sender, DataReceivedEventArgs e) var PDFserver = HostApp!.Services.GetHtmlPdfService(); - var request = Encoding.UTF8.GetString(e.Data.Array!, 0, e.Data.Count); - var aux = PDFserver - .ScopeRequest(request) + .ScopeRequest(e.Data.Array!) .Run(CancellationToken.None).Result; - var sendata = JsonSerializer.Serialize>(aux); - - _ServerTCP.Send(e.IpPort, sendata); + _ServerTCP.Send(e.IpPort, Encoding.UTF8.GetBytes(JsonSerializer.Serialize(aux))); _ServerTCP.Send(e.IpPort, [0]); //token end message } diff --git a/samples/WebHtmlToPdf.CustomSaveFileServer/Program.cs b/samples/WebHtmlToPdf.CustomSaveFileServer/Program.cs index 41fd4f6..097342a 100644 --- a/samples/WebHtmlToPdf.CustomSaveFileServer/Program.cs +++ b/samples/WebHtmlToPdf.CustomSaveFileServer/Program.cs @@ -30,10 +30,11 @@ app.UseHttpsRedirection(); -app.MapPost("/SavePdf", async ([FromServices] IHtmlPdfServer PDFserver, [FromBody] string requestclienthtmltopdf, CancellationToken token) => +app.MapPost("/SavePdf", async ([FromServices] IHtmlPdfServer PDFserver, [FromBody] Stream requestclienthtmltopdf, CancellationToken token) => { + var data = await requestclienthtmltopdf.ReadToBytesAsync(); return await PDFserver - .ScopeRequest(requestclienthtmltopdf) + .ScopeRequest(data) .BeforePDF( (html,inputparam, _) => { if (inputparam is null) diff --git a/samples/WebHtmlToPdf.GenericServer/Program.cs b/samples/WebHtmlToPdf.GenericServer/Program.cs index 8c15097..140f3b6 100644 --- a/samples/WebHtmlToPdf.GenericServer/Program.cs +++ b/samples/WebHtmlToPdf.GenericServer/Program.cs @@ -28,10 +28,11 @@ app.UseHttpsRedirection(); -app.MapPost("/GeneratePdf", async ([FromServices] IHtmlPdfServer PDFserver, [FromBody] string requestclienthtmltopdf, CancellationToken token) => +app.MapPost("/GeneratePdf", async ([FromServices] IHtmlPdfServer PDFserver, [FromBody] Stream requestclienthtmltopdf, CancellationToken token) => { + var data = await requestclienthtmltopdf.ReadToBytesAsync(); return await PDFserver - .Run(requestclienthtmltopdf,token); + .Run(data, token); }).Produces>(200); -app.Run(); \ No newline at end of file +app.Run(); diff --git a/src/HtmlPdfPlus.Client/Commands/IHtmlPdfClient.cs b/src/HtmlPdfPlus.Client/Commands/IHtmlPdfClient.cs index 2dec1da..38af3da 100644 --- a/src/HtmlPdfPlus.Client/Commands/IHtmlPdfClient.cs +++ b/src/HtmlPdfPlus.Client/Commands/IHtmlPdfClient.cs @@ -84,7 +84,7 @@ public interface IHtmlPdfClient /// Returns bytes[] from representing the asynchronous operation of converting HTML to PDF. /// Thrown when the empty Html source. /// Thrown when the submitHtmlToPdf function is null. - Task> Run(Func>> submitHtmlToPdf, CancellationToken token = default); + Task> Run(Func>> submitHtmlToPdf, CancellationToken token = default); /// /// Submit the HTML to convert to PDF in byte[] via POST . @@ -119,7 +119,7 @@ public interface IHtmlPdfClient /// Returns representing the asynchronous operation of converting HTML to PDF. /// Thrown when the empty Html source. /// Thrown when the submitHtmlToPdf function or customData is null. - Task> Run(Func>> submitHtmlToPdf, Tin? customData, CancellationToken token = default); + Task> Run(Func>> submitHtmlToPdf, Tin? customData, CancellationToken token = default); /// /// Submit the HTML to convert to PDF in custom output via POST . diff --git a/src/HtmlPdfPlus.Client/Core/HtmlPdfClientInstance.cs b/src/HtmlPdfPlus.Client/Core/HtmlPdfClientInstance.cs index d3a786c..8bb86f9 100644 --- a/src/HtmlPdfPlus.Client/Core/HtmlPdfClientInstance.cs +++ b/src/HtmlPdfPlus.Client/Core/HtmlPdfClientInstance.cs @@ -147,13 +147,13 @@ public IHtmlPdfClient HtmlParser(bool validate, Action whenhaserror) /// - public async Task> Run(Func>> submitHtmlToPdf, CancellationToken token = default) + public async Task> Run(Func>> submitHtmlToPdf, CancellationToken token = default) { - return await Run(submitHtmlToPdf, null, token).ConfigureAwait(false); + return await Run(submitHtmlToPdf, null, token); } /// - public async Task> Run(Func>> submitHtmlToPdf, Tin? inputparam, CancellationToken token = default) + public async Task> Run(Func>> submitHtmlToPdf, Tin? inputparam, CancellationToken token = default) { if (_html.Length == 0) { @@ -163,7 +163,7 @@ public async Task> Run(Func(submitHtmlToPdf, inputparam, token).ConfigureAwait(false); + return await SubmitAsync(submitHtmlToPdf, inputparam, token); } /// @@ -196,12 +196,12 @@ public async Task> Run(HttpClient httpclient, str _parseError.Invoke(_errorparse); } var sw = Stopwatch.StartNew(); - HttpContent content = CreateHttpContent(customdata); + HttpContent content = await CreateHttpContent(customdata); content.Headers.ContentType = new MediaTypeHeaderValue(MediaTypeNames.Application.Json); try { - var result = await httpclient.PostAsync(endpoint, content, token).ConfigureAwait(false); - return await HandleHttpResponse(result, sw, token).ConfigureAwait(false); + var result = await httpclient.PostAsync(endpoint, content, token); + return await HandleHttpResponse(result, sw, token); } catch (HttpRequestException ex) { @@ -222,7 +222,7 @@ public async Task> Run(HttpClient httpclient, str /// The input parameter. /// The cancellation token. /// The result of the HTML to PDF conversion. - private async Task> SubmitAsync(Func>> submitHtmlToPdf, Tin? inputparam, CancellationToken token) + private async Task> SubmitAsync(Func>> submitHtmlToPdf, Tin? inputparam, CancellationToken token) { if (_html.Length == 0) { @@ -240,11 +240,11 @@ private async Task> SubmitAsync(Func result = await submitHtmlToPdf(requestsend, linkcts.Token).ConfigureAwait(false), linkcts.Token); - var completed = await Task.WhenAny(tasksubmit, Task.Delay(_timeout, linkcts.Token)).ConfigureAwait(false); + var completed = await Task.WhenAny(tasksubmit, Task.Delay(_timeout, linkcts.Token)); if (completed != tasksubmit) { result = new HtmlPdfResult(false, false, sw.Elapsed, default, new TimeoutException($"Canceled by Timeout({_timeout})")); @@ -277,7 +277,7 @@ private async Task> SubmitAsync(Func(result.IsSuccess, result.BufferDrained, result.ElapsedTime, (Tout?)Convert.ChangeType(result.DecompressBytes(), typeof(Tout)), result.Error); + return new HtmlPdfResult(result.IsSuccess, result.BufferDrained, result.ElapsedTime, (Tout)(object)result.OutputData, result.Error); } } return result; @@ -299,13 +299,12 @@ private void LogMessage(string message) /// /// The type of the custom data. /// The custom data. - /// The HTTP content. - private StringContent CreateHttpContent(T? customdata) + /// The HTTP . + private async Task CreateHttpContent(T? customdata) { return disableOptions.HasFlag(DisableOptionsHtmlToPdf.DisableCompress) - ? new StringContent(new RequestHtmlPdf(_html, sourcealias, _pdfPageConfig, _timeout, customdata).ToString()) - : new StringContent(JsonSerializer.Serialize( - new RequestHtmlPdf(_html, sourcealias, _pdfPageConfig, _timeout, customdata).ToStringCompress())); + ? new ByteArrayContent(new RequestHtmlPdf(_html, sourcealias, _pdfPageConfig, _timeout, customdata).ToBytes()) + : new ByteArrayContent(await new RequestHtmlPdf(_html, sourcealias, _pdfPageConfig, _timeout, customdata).ToBytesCompress()); } /// @@ -313,12 +312,12 @@ private StringContent CreateHttpContent(T? customdata) /// /// The type of the input parameter. /// The input parameter. - /// The request send string. - private string CreateRequestSend(T? inputparam) + /// The request send in byte[]. + private async Task CreateRequestSend(T? inputparam) { return disableOptions.HasFlag(DisableOptionsHtmlToPdf.DisableCompress) - ? JsonSerializer.Serialize(new RequestHtmlPdf(_html, sourcealias, _pdfPageConfig, _timeout, inputparam), GZipHelper.JsonOptions) - : GZipHelper.CompressRequest(sourcealias, _pdfPageConfig, _html, _timeout, inputparam); + ? new RequestHtmlPdf(_html, sourcealias, _pdfPageConfig, _timeout, inputparam).ToBytes() + : await new RequestHtmlPdf(_html, sourcealias, _pdfPageConfig, _timeout, inputparam).ToBytesCompress(); } /// @@ -355,25 +354,26 @@ private async Task> HandleHttpResponse(HttpResponseMes if (result.StatusCode == System.Net.HttpStatusCode.OK) { #if NETSTANDARD2_1 - var resultconvert = await result.Content.ReadAsStringAsync().ConfigureAwait(false); + using var resultconvert = await result.Content.ReadAsStreamAsync(); #endif #if NET8_0_OR_GREATER - var resultconvert = await result.Content.ReadAsStringAsync(token).ConfigureAwait(false); + using var resultconvert = await result.Content.ReadAsStreamAsync(token); #endif if (typeof(Tout) == typeof(byte[])) { if (disableOptions.HasFlag(DisableOptionsHtmlToPdf.DisableCompress)) { - return JsonSerializer.Deserialize>(resultconvert, GZipHelper.JsonOptions)!; + return (await JsonSerializer.DeserializeAsync>(resultconvert, GZipHelper.JsonOptions, token))!; } else { - var auxresult = JsonSerializer.Deserialize>(resultconvert, GZipHelper.JsonOptions)!; - if (auxresult.OutputData is null) + var auxresult = await JsonSerializer.DeserializeAsync>(resultconvert, GZipHelper.JsonOptions, token)!; + if (auxresult!.OutputData is null) { return auxresult; } - return new HtmlPdfResult(auxresult.IsSuccess, auxresult.BufferDrained, auxresult.ElapsedTime, (Tout?)Convert.ChangeType(auxresult.DecompressBytes(), typeof(Tout)), auxresult.Error); + var output = await GZipHelper.DecompressAsync((byte[])(object)auxresult.OutputData,token); + return new HtmlPdfResult(auxresult.IsSuccess, auxresult.BufferDrained, auxresult.ElapsedTime, (Tout)(object)output, auxresult.Error); } } else diff --git a/src/HtmlPdfPlus.Client/HtmlPdfClient.cs b/src/HtmlPdfPlus.Client/HtmlPdfClient.cs index fc348b5..d5a981a 100644 --- a/src/HtmlPdfPlus.Client/HtmlPdfClient.cs +++ b/src/HtmlPdfPlus.Client/HtmlPdfClient.cs @@ -4,9 +4,7 @@ // https://github.com/FRACerqueira/HtmlPdfPlus // *************************************************************************************** -using System.Text.Json; using HtmlPdfPlus.Client.Core; -using HtmlPdfPlus.Shared.Core; namespace HtmlPdfPlus { @@ -29,32 +27,6 @@ public static IHtmlPdfClient Create(string? alias = null) { return new HtmlPdfClientInstance(alias ?? string.Empty, DisableOptions); } - - /// - /// Convert Response Data from server HtmlPdfPlus - /// - /// Response data - /// - public static HtmlPdfResult ToHtmlPdfResult(this string dataresponse) - { - return dataresponse.ToHtmlPdfResult(); - } - - /// - /// Convert Response Data from server HtmlPdfPlus - /// - /// Type of result - /// Response data - /// - public static HtmlPdfResult ToHtmlPdfResult(this string dataresponse) - { - if (string.IsNullOrEmpty(dataresponse)) - { - throw new ArgumentException("Response data cannot be null or empty", nameof(dataresponse)); - } - - return JsonSerializer.Deserialize>(dataresponse, GZipHelper.JsonOptions)!; - } } } diff --git a/src/HtmlPdfPlus.Server/Commands/IHtmlPdfServer.cs b/src/HtmlPdfPlus.Server/Commands/IHtmlPdfServer.cs index b006815..68ce110 100644 --- a/src/HtmlPdfPlus.Server/Commands/IHtmlPdfServer.cs +++ b/src/HtmlPdfPlus.Server/Commands/IHtmlPdfServer.cs @@ -24,18 +24,18 @@ public interface IHtmlPdfServer : IDisposable /// /// Transfer request client for server context scope for custom actions /// - /// The compressed data from the request HtmlPdfCliPlus client. + /// The compressed byte[] data from the request HtmlPdfCliPlus client. /// An instance of . - IHtmlPdfServerContext ScopeRequest(string requestClient); + IHtmlPdfServerContext ScopeRequest(byte[] requestClient); /// /// Perform HTML to PDF conversion from the request HtmlPdfCliPlus client. /// - /// The compressed data from the request HtmlPdfCliPlus client. + /// The compressed byte[] data from the request HtmlPdfCliPlus client. /// The to perform the conversion. /// An instance of . /// Thrown when is invalid. /// Thrown when is invalid. - Task> Run(string requestClient, CancellationToken token = default); + Task> Run(byte[] requestClient, CancellationToken token = default); } } diff --git a/src/HtmlPdfPlus.Server/Commands/IHtmlPdfServerContext.cs b/src/HtmlPdfPlus.Server/Commands/IHtmlPdfServerContext.cs index 013a7e4..6b1d910 100644 --- a/src/HtmlPdfPlus.Server/Commands/IHtmlPdfServerContext.cs +++ b/src/HtmlPdfPlus.Server/Commands/IHtmlPdfServerContext.cs @@ -70,7 +70,7 @@ public interface IHtmlPdfServerContext /// An instance of . /// Thrown when the empty source Html or Url. /// Thrown when is invalid. - /// Thrown when is invalid. + /// Thrown when is invalid. Task> Run(CancellationToken token = default); } } diff --git a/src/HtmlPdfPlus.Server/Core/HtmlPdfBuilder.cs b/src/HtmlPdfPlus.Server/Core/HtmlPdfBuilder.cs index bc5b45b..4acf962 100644 --- a/src/HtmlPdfPlus.Server/Core/HtmlPdfBuilder.cs +++ b/src/HtmlPdfPlus.Server/Core/HtmlPdfBuilder.cs @@ -163,12 +163,12 @@ public IHtmlPdfSrvBuilder Logger(LogLevel logLevel, string categoryName = "HtmlP internal async Task> BuildAsync(string sourcealias) { - return await BuildAsync(sourcealias).ConfigureAwait(false); + return await BuildAsync(sourcealias); } internal async Task> BuildAsync(string sourcealias) { - return await ExecuteBuildAsync(sourcealias).ConfigureAwait(false); + return await ExecuteBuildAsync(sourcealias); } private async Task> ExecuteBuildAsync(string sourcealias) @@ -176,7 +176,7 @@ private async Task> ExecuteBuildAsync(strin _sourcealias = sourcealias; try { - _playwright = await Playwright.CreateAsync().ConfigureAwait(false); + _playwright = await Playwright.CreateAsync(); if (_args.Length == 0) { _args = ["--run-all-compositor-stages-before-draw", "--disable-dev-shm-usage", "-disable-setuid-sandbox", "--no-sandbox"]; @@ -185,7 +185,7 @@ private async Task> ExecuteBuildAsync(strin LogMessage($"Build Chromium with args { string.Join("", _args) }"); for (int i = 0; i < _pagesbuffer; i++) { - _availableBuffer.Enqueue(await _browser.NewPageAsync().ConfigureAwait(false)); + _availableBuffer.Enqueue(await _browser.NewPageAsync()); } LogMessage($"Build Chromium with buffer {_pagesbuffer}"); } diff --git a/src/HtmlPdfPlus.Server/Core/HtmlPdfServer.cs b/src/HtmlPdfPlus.Server/Core/HtmlPdfServer.cs index 0447be5..694d256 100644 --- a/src/HtmlPdfPlus.Server/Core/HtmlPdfServer.cs +++ b/src/HtmlPdfPlus.Server/Core/HtmlPdfServer.cs @@ -6,6 +6,7 @@ using System.Diagnostics; using System.Globalization; +using System.Text; using System.Text.Json; using HtmlPdfPlus.Shared.Core; using Microsoft.Extensions.Logging; @@ -47,15 +48,15 @@ public IHtmlPdfServerContext ScopeData(Tin? inputparam) } /// - public IHtmlPdfServerContext ScopeRequest(string requestClient) + public IHtmlPdfServerContext ScopeRequest(byte[] requestClient) { return new HtmlPdfServerContext(this, default, requestClient); } /// - public async Task> Run(string requestclient, CancellationToken token = default) + public async Task> Run(byte[] requestclient, CancellationToken token = default) { - if (string.IsNullOrEmpty(requestclient)) + if (requestclient is null || requestclient.Length ==0) { throw new ArgumentNullException(nameof(requestclient), "request client is null or empty"); } @@ -63,15 +64,17 @@ public async Task> Run(string requestclient, CancellationTok RequestHtmlPdf requestHtmlPdf; try { + string data; if (PdfSrvBuilder.DisableOptions.HasFlag(DisableOptionsHtmlToPdf.DisableCompress)) { - requestHtmlPdf = JsonSerializer.Deserialize>(requestclient, GZipHelper.JsonOptions)!; + data = Encoding.UTF8.GetString(requestclient); } else { - requestHtmlPdf = GZipHelper.DecompressRequest(requestclient); + data = Encoding.UTF8.GetString(await GZipHelper.DecompressAsync(requestclient,token)); LogMessage($"Decompress Request after {sw.Elapsed}"); } + requestHtmlPdf = JsonSerializer.Deserialize>(data, GZipHelper.JsonOptions)!; requestHtmlPdf.Config ??= PdfSrvBuilder.Config; if (requestHtmlPdf.Timeout < 1) @@ -189,7 +192,197 @@ internal async Task> RunServer( catch (Exception ex) { cts.Cancel(); // cancel pending task - LogMessage($"Error Generate PDF from serverless browser after {sw.Elapsed} : {ex}"); + LogMessage($"Error Generate PDF from " + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"browser after {sw.Elapsed} : {ex}"); return new HtmlPdfResult(false, false, sw.Elapsed, default, ex); } } @@ -212,16 +405,14 @@ internal async Task> RunServer( var aux = await outputparam(bytespdf, requestHtmlPdf.InputParam, executeToken.Token); if (typeof(Tout) == typeof(byte[])) { - if (disableCompress) + if (!disableCompress) { result = new HtmlPdfResult(true, false, sw.Elapsed, aux, null); } else { - var auxBytes = (byte[]?)Convert.ChangeType(aux, typeof(byte[])) ?? - throw new InvalidOperationException("Conversion to byte[] resulted in null"); - var compresspdf = GZipHelper.Compress(auxBytes); - result = new HtmlPdfResult(true, false, sw.Elapsed, (Tout?)Convert.ChangeType(compresspdf, typeof(Tout)), null); + var compresspdf = await GZipHelper.CompressAsync((byte[])(object)aux!,token); + result = new HtmlPdfResult(true, false, sw.Elapsed, (Tout)(object)compresspdf, null); } } else @@ -274,13 +465,13 @@ internal async Task> RunServer( LogMessage($"End Convert Html to PDF from Server with AfterPDF function at {DateTime.Now} after {sw.Elapsed}"); return result!; } - LogMessage($"End Convert Html to PDF from Server at {DateTime.Now} after {sw.Elapsed}"); - if (disableCompress) + //output is byte[] + if (!disableCompress) { - return new HtmlPdfResult(true, false, sw.Elapsed, (Tout?)Convert.ChangeType(bytespdf, typeof(Tout)), null); + bytespdf = await GZipHelper.CompressAsync(bytespdf, token); } - var compresspdf = GZipHelper.Compress(bytespdf); - return new HtmlPdfResult(true, false, sw.Elapsed, (Tout?)Convert.ChangeType(compresspdf, typeof(Tout)), null); + LogMessage($"End Convert Html to PDF from Server at {DateTime.Now} after {sw.Elapsed}"); + return new HtmlPdfResult(true, false, sw.Elapsed, (Tout)(object)bytespdf, null); } private async Task GeneratePDF(bool isurl, RequestHtmlPdf request, long remaindtime, CancellationToken token) diff --git a/src/HtmlPdfPlus.Server/Core/HtmlPdfServerContext.cs b/src/HtmlPdfPlus.Server/Core/HtmlPdfServerContext.cs index 7a95b45..66233d8 100644 --- a/src/HtmlPdfPlus.Server/Core/HtmlPdfServerContext.cs +++ b/src/HtmlPdfPlus.Server/Core/HtmlPdfServerContext.cs @@ -5,8 +5,10 @@ // *************************************************************************************** using System.Diagnostics; +using System.Text; using System.Text.Json; using HtmlPdfPlus.Shared.Core; +using Microsoft.Extensions.Logging; using NUglify; namespace HtmlPdfPlus.Server.Core @@ -20,7 +22,7 @@ namespace HtmlPdfPlus.Server.Core /// Instance of . /// Input data, for customizing HTML before converting to PDF on the server. /// The compressed data from the request HtmlPdfCliPlus client. - internal sealed class HtmlPdfServerContext(HtmlPdfServer htmlPdfServer, TIn? inputparam, string? requestClient) : IHtmlPdfServerContext, IDisposable + internal sealed class HtmlPdfServerContext(HtmlPdfServer htmlPdfServer, TIn? inputparam, byte[]? requestClient) : IHtmlPdfServerContext, IDisposable { private bool isDisposed; private Func>? _inputparam = null; @@ -94,16 +96,23 @@ public async Task> Run(CancellationToken token = default) { var sw = Stopwatch.StartNew(); RequestHtmlPdf requestHtmlPdf; - if (!string.IsNullOrEmpty(requestClient)) + string data; + if (requestClient is not null) { + if (requestClient.Length == 0) + { + throw new ArgumentException("request client is empty"); + } if (htmlPdfServer.PdfSrvBuilder.DisableOptions.HasFlag(DisableOptionsHtmlToPdf.DisableCompress)) { - requestHtmlPdf = JsonSerializer.Deserialize>(requestClient, GZipHelper.JsonOptions)!; + data = Encoding.UTF8.GetString(requestClient); } else { - requestHtmlPdf = GZipHelper.DecompressRequest(requestClient); + data = Encoding.UTF8.GetString(await GZipHelper.DecompressAsync(requestClient, token)); + LogMessage($"Decompress Request after {sw.Elapsed}"); } + requestHtmlPdf = JsonSerializer.Deserialize>(data, GZipHelper.JsonOptions)!; requestHtmlPdf.Config ??= htmlPdfServer.PdfSrvBuilder.Config; } else @@ -130,11 +139,7 @@ public async Task> Run(CancellationToken token = default) return new HtmlPdfResult(false, false, sw.Elapsed, default, ex); } var isurl = Uri.IsWellFormedUriString(requestHtmlPdf.Html, UriKind.RelativeOrAbsolute); - var disabledcompress = false; - if (!string.IsNullOrEmpty(requestClient)) - { - disabledcompress = htmlPdfServer.PdfSrvBuilder.DisableOptions.HasFlag(DisableOptionsHtmlToPdf.DisableCompress); - } + var disabledcompress = htmlPdfServer.PdfSrvBuilder.DisableOptions.HasFlag(DisableOptionsHtmlToPdf.DisableCompress); return await htmlPdfServer.RunServer(isurl, _inputparam, _outputparam, sw, requestHtmlPdf, disabledcompress, token); } @@ -153,5 +158,31 @@ private void Cleanup() { htmlPdfServer?.Dispose(); } + + private void LogMessage(string message) + { + if (htmlPdfServer.PdfSrvBuilder is null || htmlPdfServer.PdfSrvBuilder.Log is null || (!htmlPdfServer.PdfSrvBuilder.Log?.IsEnabled(htmlPdfServer.PdfSrvBuilder.LevelLog) ?? false)) return; + + switch (htmlPdfServer.PdfSrvBuilder.LevelLog) + { + case LogLevel.None: + return; + case LogLevel.Trace: + logMessageForTrc(htmlPdfServer.PdfSrvBuilder.Log!, htmlPdfServer.SourceAlias, message, null); + break; + case LogLevel.Information: + logMessageForInf(htmlPdfServer.PdfSrvBuilder.Log!, htmlPdfServer.SourceAlias, message, null); + break; + case LogLevel.Debug: + logMessageForDbg(htmlPdfServer.PdfSrvBuilder.Log!, htmlPdfServer.SourceAlias, message, null); + break; + } + } + + // Reusable logging + private static readonly Action logMessageForInf = LoggerMessage.Define(LogLevel.Information, 0, "HtmlPdfServerContext({source}) : {message}"); + private static readonly Action logMessageForTrc = LoggerMessage.Define(LogLevel.Trace, 0, "HtmlPdfServerContext({source}) : {message}"); + private static readonly Action logMessageForDbg = LoggerMessage.Define(LogLevel.Debug, 0, "HtmlPdfServerContext({source}) : {message}"); + } } diff --git a/src/HtmlPdfPlus.Shared/Core/GZipHelper.cs b/src/HtmlPdfPlus.Shared/Core/GZipHelper.cs index 7bd03fb..e3f8656 100644 --- a/src/HtmlPdfPlus.Shared/Core/GZipHelper.cs +++ b/src/HtmlPdfPlus.Shared/Core/GZipHelper.cs @@ -5,7 +5,6 @@ // *************************************************************************************** using System.IO.Compression; -using System.Text; using System.Text.Json; namespace HtmlPdfPlus.Shared.Core @@ -14,57 +13,15 @@ internal static class GZipHelper { public static readonly JsonSerializerOptions JsonOptions = new() { PropertyNameCaseInsensitive = true }; - /// - /// Decompresses a base64 encoded string. - /// - /// The base64 encoded string to decompress. - /// The decompressed string. - public static string Decompress(string input) - { - try - { - byte[] compressed = Convert.FromBase64String(input); - byte[] decompressed = Decompress(compressed); - return Encoding.UTF8.GetString(decompressed); - } - catch (FormatException ex) - { - // Log the exception - throw new InvalidOperationException("The input string is not a valid base64 string.", ex); - } - catch (InvalidOperationException ex) - { - // Log the exception - throw new InvalidOperationException("Failed to decompress the input string.", ex); - } - } + private const int BufferSize = 81920; // 80 KB buffer size /// - /// Compresses a string and returns a base64 encoded result. - /// - /// The string to compress. - /// The compressed and base64 encoded string. - public static string Compress(string input) - { - try - { - byte[] encoded = Encoding.UTF8.GetBytes(input); - byte[] compressed = Compress(encoded); - return Convert.ToBase64String(compressed); - } - catch (Exception ex) - { - // Handle or log the exception as needed - throw new InvalidOperationException("Failed to compress the input string.", ex); - } - } - - /// - /// Decompresses a byte array. + /// Decompresses a byte array asynchronously. /// /// The byte array to decompress. + /// The . /// The decompressed byte array. - public static byte[] Decompress(byte[] input) + public static async Task DecompressAsync(byte[] input, CancellationToken token = default) { try { @@ -72,7 +29,7 @@ public static byte[] Decompress(byte[] input) using var result = new MemoryStream(); using (var decompress = new GZipStream(source, CompressionMode.Decompress)) { - decompress.CopyTo(result); + await decompress.CopyToAsync(result, BufferSize,token); } return result.ToArray(); } @@ -89,18 +46,19 @@ public static byte[] Decompress(byte[] input) } /// - /// Compresses a byte array. + /// Compresses a byte array asynchronously. /// /// The byte array to compress. + /// The . /// The compressed byte array. - public static byte[] Compress(byte[] input) + public static async Task CompressAsync(byte[] input, CancellationToken token = default) { try { using var result = new MemoryStream(); - using (var compress = new GZipStream(result, CompressionMode.Compress)) + using (var compress = new GZipStream(result, CompressionLevel.Optimal)) { - compress.Write(input, 0, input.Length); + await compress.WriteAsync(input,token); } return result.ToArray(); } @@ -110,56 +68,5 @@ public static byte[] Compress(byte[] input) throw new InvalidOperationException("Failed to compress the input byte array.", ex); } } - - /// - /// Compresses a request object to a base64 encoded string. - /// - /// The type of the input parameter. - /// The alias for the request. - /// The PDF page configuration. - /// The HTML content. - /// The timeout value. - /// The input parameter. - /// The compressed and base64 encoded request string. - internal static string CompressRequest(string? alias, PdfPageConfig? pageConfig, string html, int timeout, T? inputparam) - { - try - { - var request = new RequestHtmlPdf(html, alias, pageConfig, timeout, inputparam); - var json = JsonSerializer.Serialize(request, JsonOptions); - return Compress(json); - } - catch (Exception ex) - { - // Log the exception - throw new InvalidOperationException("Failed to compress the request object.", ex); - } - } - - /// - /// Decompresses a base64 encoded request string to a request object. - /// - /// The type of the input parameter. - /// The compressed and base64 encoded request string. - /// The decompressed request object. - internal static RequestHtmlPdf DecompressRequest(string compressdata) - { - try - { - var json = Decompress(compressdata); - var result = JsonSerializer.Deserialize>(json, JsonOptions); - return result!; - } - catch (JsonException ex) - { - // Log the exception - throw new InvalidOperationException("Failed to deserialize the decompressed JSON string.", ex); - } - catch (Exception ex) - { - // Log the exception - throw new InvalidOperationException("Failed to decompress the request object.", ex); - } - } } } diff --git a/src/HtmlPdfPlus.Shared/Core/RequestHtmlPdf.cs b/src/HtmlPdfPlus.Shared/Core/RequestHtmlPdf.cs index 2e4c008..b3e916c 100644 --- a/src/HtmlPdfPlus.Shared/Core/RequestHtmlPdf.cs +++ b/src/HtmlPdfPlus.Shared/Core/RequestHtmlPdf.cs @@ -4,6 +4,7 @@ // https://github.com/FRACerqueira/HtmlPdfPlus // *************************************************************************************** +using System.Text; using System.Text.Json; using NUglify; @@ -94,21 +95,21 @@ public void ChangeHtml(string value, bool minify) } /// - /// Returns a JSON string representation of the . + /// Returns a byte[] of JSON string representation of the . /// /// JSON string representation - public override string ToString() + public byte[] ToBytes() { - return JsonSerializer.Serialize(this); + return Encoding.UTF8.GetBytes(JsonSerializer.Serialize(this)); } /// - /// Returns a compressed (gzip) base64 JSON string representation of the . + /// Returns a a compressed (gzip) byte[] of JSON string representation of the . /// - /// Compressed (gzip) base64 JSON string representation - public string ToStringCompress() + /// JSON string representation + public async Task ToBytesCompress() { - return GZipHelper.Compress(ToString()); + return await GZipHelper.CompressAsync(ToBytes()); } } } diff --git a/src/HtmlPdfPlus.Shared/HtmlPdfPlus.Shared.csproj b/src/HtmlPdfPlus.Shared/HtmlPdfPlus.Shared.csproj index 2a6e3e2..340b35f 100644 --- a/src/HtmlPdfPlus.Shared/HtmlPdfPlus.Shared.csproj +++ b/src/HtmlPdfPlus.Shared/HtmlPdfPlus.Shared.csproj @@ -54,6 +54,6 @@ - + diff --git a/src/HtmlPdfPlus.Shared/HtmlPdfResult.cs b/src/HtmlPdfPlus.Shared/HtmlPdfResult.cs index 0977cc5..b689828 100644 --- a/src/HtmlPdfPlus.Shared/HtmlPdfResult.cs +++ b/src/HtmlPdfPlus.Shared/HtmlPdfResult.cs @@ -57,19 +57,21 @@ public HtmlPdfResult(bool isSuccess, bool bufferDrained, TimeSpan elapsedTime, T /// /// Output custom data or PDF in byte[] /// - public T? OutputData { get; } + public T? OutputData { get; internal set; } /// - /// Decompress output data if it is byte[] + /// Decompress OutputData when type is byte[] /// - /// Output data decompressed - public byte[]? DecompressBytes() + /// The with OutputData Decompressed when type is byte[] + /// OutputData is not byte[] + public HtmlPdfResult DecompressOutputData() { - if (OutputData is byte[] data && OutputData is not null) + if (OutputData is byte[] data) { - return GZipHelper.Decompress(data); + OutputData = (T)(object)GZipHelper.DecompressAsync(data).Result; + return this; } - return null; + throw new InvalidOperationException("OutputData is not byte[]"); } } } diff --git a/src/HtmlPdfPlus.Shared/StreamExtension.cs b/src/HtmlPdfPlus.Shared/StreamExtension.cs new file mode 100644 index 0000000..b9c8345 --- /dev/null +++ b/src/HtmlPdfPlus.Shared/StreamExtension.cs @@ -0,0 +1,26 @@ +// *************************************************************************************** +// MIT LICENCE +// The maintenance and evolution is maintained by the HtmlPdfPlus team +// https://github.com/FRACerqueira/HtmlPdfPlus +// *************************************************************************************** + +namespace HtmlPdfPlus +{ + /// + /// Extend function for + /// + public static class StreamExtension + { + /// + /// Read the stream and return the content as a byte[] + /// + /// The stream + /// + public static async Task ReadToBytesAsync(this Stream stream) + { + using var memoryStream = new MemoryStream(); + await stream.CopyToAsync(memoryStream); + return memoryStream.ToArray(); + } + } +} diff --git a/src/README.txt b/src/README.txt index d29c151..4428236 100644 --- a/src/README.txt +++ b/src/README.txt @@ -46,10 +46,14 @@ What's new in the latest version ================================ - v0.4.0-beta (latest version) - - Relaxation of Package Reference for .net8 to .net9 - Renamed the 'Source' command to 'Scope' - Renamed the 'Request' command to 'ScopeRequest' + - Changed parameter in funcion SubmitHtmlToPdf to byte[] instead of string + - Changed parameter for command Run to byte[] instead of string + - Changed parameter for command ScopeRequest to byte[] instead of string + - Removed DecompressBytes() method to class HtmlPdfResult + - Added DecompressOutputData() method to class HtmlPdfResult for custom scenarios - v0.3.0-beta diff --git a/src/TestHtmlPdfCliPlus/HtmlPdfCliPlus/HtmlPdfClientTest.cs b/src/TestHtmlPdfCliPlus/HtmlPdfCliPlus/HtmlPdfClientTest.cs index 516da08..478d8d7 100644 --- a/src/TestHtmlPdfCliPlus/HtmlPdfCliPlus/HtmlPdfClientTest.cs +++ b/src/TestHtmlPdfCliPlus/HtmlPdfCliPlus/HtmlPdfClientTest.cs @@ -7,7 +7,6 @@ using HtmlPdfPlus; using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Logging; -using HtmlPdfPlus.Shared.Core; namespace TestHtmlPdfPlus.HtmlPdfCliPlus { @@ -110,7 +109,7 @@ await HtmlPdfClient.Create("Teste") [Fact] public async Task Ensure_Run_Error_When_NotSubmmitFunction() { - Func>>? submmitFunction = null; + Func>>? submmitFunction = null; await Assert.ThrowsAsync(async () => { #pragma warning disable CS8604 // Possible null reference argument. @@ -125,7 +124,7 @@ await HtmlPdfClient.Create("Teste") [Fact] public async Task Ensure_RunGeneric_Error_When_NotSubmmitFunction() { - Func>>? submmitFunction = null; + Func>>? submmitFunction = null; await Assert.ThrowsAsync(async () => { #pragma warning disable CS8604 // Possible null reference argument. @@ -196,82 +195,6 @@ public async Task Ensure_RunGeneric_Success_With_Timeout_RunFunction() Assert.IsType(result.Error); } - [Fact] - public async Task Ensure_Run_Compress_Decompress_Request() - { - RequestHtmlPdf request = new("x","",new(),100, null); - var result = await HtmlPdfClient.Create("Teste") - .PageConfig(cfg => - { - cfg.Header("

header

") - .Footer("

Footer

") - .Orientation(PageOrientation.Landscape) - .Format(1,2) - .Scale(1.4f) - .DisplayHeaderFooter(true) - .PrintBackground(false) - .Margins(1, 2, 3, 4); - }) - .FromHtml("

Test

") - .Timeout(10000) - .Run((eventdata, token) => - { - request = GZipHelper.DecompressRequest(eventdata); - return Task.FromResult(new HtmlPdfResult(true,false, TimeSpan.Zero, [])); - }); - Assert.Equal(10000, request.Timeout); - Assert.Equal("Teste", request.Alias); - Assert.Equal("

Test

", request.Html); - Assert.Equal("

header", request.Config!.Header); - Assert.Equal("

Footer", request.Config!.Footer); - Assert.True(request.Config.DisplayHeaderFooter); - Assert.False(request.Config.PrintBackground); - Assert.Equal(1.4f, request.Config.Scale); - Assert.Null(request.InputParam); - Assert.Equal(PageOrientation.Landscape, request.Config.Orientation); - Assert.Equal("1.0;2.0", request.Config.Size.ToString()); - Assert.Equal("1.0;2.0;3.0;4.0", request.Config.Margins.ToString()); - Assert.Equal([], result.OutputData!); - } - - [Fact] - public async Task Ensure_Run_Compress_Decompress_Request_with_Param() - { - RequestHtmlPdf request = new("x","", new(), 100, null); - var result = await HtmlPdfClient.Create("Teste") - .PageConfig(cfg => - { - cfg.Header("

header

") - .Footer("

Footer

") - .Orientation(PageOrientation.Landscape) - .Format(1, 2) - .Scale(1.4f) - .DisplayHeaderFooter(true) - .PrintBackground(false) - .Margins(1, 2, 3, 4); - }) - .FromHtml("

Test

") - .Timeout(10000) - .Run((eventdata, token) => - { - request = GZipHelper.DecompressRequest(eventdata); - return Task.FromResult(new HtmlPdfResult(true,false, TimeSpan.Zero, "output")); - },"input"); - Assert.Equal(10000, request.Timeout); - Assert.Equal("Teste", request.Alias); - Assert.Equal("

Test

", request.Html); - Assert.Equal("

header", request.Config!.Header); - Assert.Equal("

Footer", request.Config!.Footer); - Assert.True(request.Config.DisplayHeaderFooter); - Assert.False(request.Config.PrintBackground); - Assert.Equal(1.4f, request.Config.Scale); - Assert.Equal("input",request.InputParam); - Assert.Equal(PageOrientation.Landscape, request.Config.Orientation); - Assert.Equal("1.0;2.0", request.Config.Size.ToString()); - Assert.Equal("1.0;2.0;3.0;4.0", request.Config.Margins.ToString()); - Assert.Equal("output",result.OutputData); - } - [Fact] public void Scale_ThrowsArgumentException_WhenValueIsOutOfRange() { diff --git a/src/TestHtmlPdfCliPlus/HtmlPdfSrvPlus/HtmlPdfServerTest.cs b/src/TestHtmlPdfCliPlus/HtmlPdfSrvPlus/HtmlPdfServerTest.cs index 9b04757..0cd148c 100644 --- a/src/TestHtmlPdfCliPlus/HtmlPdfSrvPlus/HtmlPdfServerTest.cs +++ b/src/TestHtmlPdfCliPlus/HtmlPdfSrvPlus/HtmlPdfServerTest.cs @@ -62,7 +62,7 @@ public async Task Run_ThrowsArgumentNullException_WhenRequestclientIsEmpty() // Arrange using var objbuilder = new HtmlPdfBuilder(null); // Act & Assert - await Assert.ThrowsAsync(async () => await new HtmlPdfServer(objbuilder, "Test").Run("", CancellationToken.None)); + await Assert.ThrowsAsync(async () => await new HtmlPdfServer(objbuilder, "Test").Run([], CancellationToken.None)); } [Fact] @@ -72,20 +72,7 @@ public async Task Run_ThrowsArgumentNullException_WhenNotExistfterPDFAndReturnCu using var objbuilder = new HtmlPdfBuilder(null); // Act & Assert await Assert.ThrowsAsync(async () => await new HtmlPdfServer(objbuilder, "Teste").Run( - new RequestHtmlPdf("","Teste", new PdfPageConfig(), 10000).ToStringCompress(), CancellationToken.None)); - } - - [Fact] - public async Task Run_Resultfalse_WhenInvalidFormatRequestclient() - { - // Arrange - using var objbuilder = new HtmlPdfBuilder(null); - // Act & Assert - var result = await new HtmlPdfServer(objbuilder, "Teste").Run("teste", CancellationToken.None); - Assert.IsType(result.Error); - Assert.False(result.IsSuccess); - Assert.True(result.ElapsedTime.TotalMilliseconds > 0); - Assert.Null(result.OutputData); + await new RequestHtmlPdf("","Teste", new PdfPageConfig(), 10000).ToBytesCompress(), CancellationToken.None)); } @@ -94,10 +81,9 @@ public async Task Run_Resultfalse_WhenErrorOnBeforePDF() { // Arrange using var objbuilder = new HtmlPdfBuilder(null); - var requestHtmlPdf = GZipHelper.CompressRequest("Client", new PdfPageConfig(), "

Test

", 10000, "teste"); - + var requestHtmlPdf = await new RequestHtmlPdf("

Test

","teste", new PdfPageConfig(),10000).ToBytesCompress(); // Act & Assert - var result = await new HtmlPdfServer(objbuilder, "Server") + var result = await new HtmlPdfServer(objbuilder, "Server") .ScopeRequest(requestHtmlPdf) .BeforePDF((_, _, _) => throw new InvalidTimeZoneException("Test")) .Run(CancellationToken.None); @@ -120,7 +106,7 @@ public async Task Run_ResultTrue_BasicPDF() Orientation = PageOrientation.Landscape, Size = PageSize.A3 }; - var requestHtmlPdf = GZipHelper.CompressRequest("Client", config, "

Test

", 5000, null); + var requestHtmlPdf = await new RequestHtmlPdf("

Test

", "teste", new PdfPageConfig(), 5000).ToBytesCompress(); // Act & Assert var result = await new HtmlPdfServer(objbuilder, "Server") @@ -146,7 +132,7 @@ public async Task Run_ResultTrue_WithBeforePDF_AND_AfterPDF() Orientation = PageOrientation.Landscape, Size = PageSize.A3, }; - var requestHtmlPdf = GZipHelper.CompressRequest("Client", config, "

Test

", 50000, null); + var requestHtmlPdf = await new RequestHtmlPdf("

Test

", "teste", new PdfPageConfig(), 5000).ToBytesCompress(); // Act & Assert var result = await new HtmlPdfServer(objbuilder, "Server") diff --git a/src/docs/assemblies/HtmlPdfPlus.Shared.md b/src/docs/assemblies/HtmlPdfPlus.Shared.md index 4312c20..bbea437 100644 --- a/src/docs/assemblies/HtmlPdfPlus.Shared.md +++ b/src/docs/assemblies/HtmlPdfPlus.Shared.md @@ -14,6 +14,7 @@ | enum [PageOrientation](./HtmlPdfPlus/PageOrientation.md) | Orientation Page PDF | | class [PageSize](./HtmlPdfPlus/PageSize.md) | Page size for PDF. | | class [PdfPageConfig](./HtmlPdfPlus/PdfPageConfig.md) | The Config PDF page. | +| static class [StreamExtension](./HtmlPdfPlus/StreamExtension.md) | Extend function for Stream | ### See Also * [Main Index](../docindex.md) diff --git a/src/docs/assemblies/HtmlPdfPlus/HtmlPdfClient.md b/src/docs/assemblies/HtmlPdfPlus/HtmlPdfClient.md index d398b24..792c0cb 100644 --- a/src/docs/assemblies/HtmlPdfPlus/HtmlPdfClient.md +++ b/src/docs/assemblies/HtmlPdfPlus/HtmlPdfClient.md @@ -16,8 +16,6 @@ public static class HtmlPdfClient | --- | --- | | static [DisableOptions](HtmlPdfClient/DisableOptions.md) { get; set; } | Options for disabling internal features. | | static [Create](HtmlPdfClient/Create.md)(…) | Create an instance of Html to Pdf Client | -| static [ToHtmlPdfResult](HtmlPdfClient/ToHtmlPdfResult.md)(…) | Convert Response Data from server HtmlPdfPlus | -| static [ToHtmlPdfResult<T>](HtmlPdfClient/ToHtmlPdfResult.md)(…) | Convert Response Data from server HtmlPdfPlus | ### See Also diff --git a/src/docs/assemblies/HtmlPdfPlus/HtmlPdfClient/ToHtmlPdfResult.md b/src/docs/assemblies/HtmlPdfPlus/HtmlPdfClient/ToHtmlPdfResult.md deleted file mode 100644 index 933a705..0000000 --- a/src/docs/assemblies/HtmlPdfPlus/HtmlPdfClient/ToHtmlPdfResult.md +++ /dev/null @@ -1,50 +0,0 @@ -![HtmlPdfPLus Logo](https://raw.githubusercontent.com/FRACerqueira/HtmlPdfPLus/refs/heads/main/docs/images/iconsmall.png) - -### HtmlPdfClient.ToHtmlPdfResult method (1 of 2) -
- - -#### Convert Response Data from server HtmlPdfPlus - -```csharp -public static HtmlPdfResult ToHtmlPdfResult(this string dataresponse) -``` - -| parameter | description | -| --- | --- | -| dataresponse | Response data | - -### Return Value - -HtmlPdfResult - -### See Also - -* class [HtmlPdfClient](../HtmlPdfClient.md) -* namespace [HtmlPdfPlus](../../HtmlPdfPlus.Client.md) - ---- - -### HtmlPdfClient.ToHtmlPdfResult<T> method (2 of 2) - -#### Convert Response Data from server HtmlPdfPlus - -```csharp -public static HtmlPdfResult ToHtmlPdfResult(this string dataresponse) -``` - -| parameter | description | -| --- | --- | -| T | Type of result | -| dataresponse | Response data | - -### Return Value - -HtmlPdfResult - -### See Also - -* class [HtmlPdfClient](../HtmlPdfClient.md) -* namespace [HtmlPdfPlus](../../HtmlPdfPlus.Client.md) - - diff --git a/src/docs/assemblies/HtmlPdfPlus/HtmlPdfResult-1.md b/src/docs/assemblies/HtmlPdfPlus/HtmlPdfResult-1.md index 7fe1564..79e9ed4 100644 --- a/src/docs/assemblies/HtmlPdfPlus/HtmlPdfResult-1.md +++ b/src/docs/assemblies/HtmlPdfPlus/HtmlPdfResult-1.md @@ -24,7 +24,7 @@ public sealed class HtmlPdfResult | [Error](HtmlPdfResult-1/Error.md) { get; } | The exception during conversion. Exception | | [IsSuccess](HtmlPdfResult-1/IsSuccess.md) { get; } | If the conversion was successful | | [OutputData](HtmlPdfResult-1/OutputData.md) { get; } | Output custom data or PDF in byte[] | -| [DecompressBytes](HtmlPdfResult-1/DecompressBytes.md)() | Decompress output data if it is byte[] | +| [DecompressOutputData](HtmlPdfResult-1/DecompressOutputData.md)() | Decompress OutputData when type is byte[] | ### See Also diff --git a/src/docs/assemblies/HtmlPdfPlus/HtmlPdfResult-1/DecompressOutputData.md b/src/docs/assemblies/HtmlPdfPlus/HtmlPdfResult-1/DecompressOutputData.md new file mode 100644 index 0000000..d5b57cd --- /dev/null +++ b/src/docs/assemblies/HtmlPdfPlus/HtmlPdfResult-1/DecompressOutputData.md @@ -0,0 +1,28 @@ +![HtmlPdfPLus Logo](https://raw.githubusercontent.com/FRACerqueira/HtmlPdfPLus/refs/heads/main/docs/images/iconsmall.png) + +### HtmlPdfResult<T>.DecompressOutputData method +
+ + +#### Decompress OutputData when type is byte[] + +```csharp +public HtmlPdfResult DecompressOutputData() +``` + +### Return Value + +The [`HtmlPdfResult`](../HtmlPdfResult-1.md) with OutputData Decompressed when type is byte[] + +### Exceptions + +| exception | condition | +| --- | --- | +| InvalidOperationException | OutputData is not byte[] | + +### See Also + +* class [HtmlPdfResult<T>](../HtmlPdfResult-1.md) +* namespace [HtmlPdfPlus](../../HtmlPdfPlus.Shared.md) + + diff --git a/src/docs/assemblies/HtmlPdfPlus/IHtmlPdfClient/Run.md b/src/docs/assemblies/HtmlPdfPlus/IHtmlPdfClient/Run.md index 98aa11a..1ee1df9 100644 --- a/src/docs/assemblies/HtmlPdfPlus/IHtmlPdfClient/Run.md +++ b/src/docs/assemblies/HtmlPdfPlus/IHtmlPdfClient/Run.md @@ -8,7 +8,7 @@ ```csharp public Task> Run( - Func>> submitHtmlToPdf, + Func>> submitHtmlToPdf, CancellationToken token = default) ``` @@ -103,7 +103,7 @@ Returns bytes[] from HtmlPdfResult representing the asynchronous operation of co ```csharp public Task> Run( - Func>> submitHtmlToPdf, Tin? customData, + Func>> submitHtmlToPdf, Tin? customData, CancellationToken token = default) ``` diff --git a/src/docs/assemblies/HtmlPdfPlus/IHtmlPdfServer-2/Run.md b/src/docs/assemblies/HtmlPdfPlus/IHtmlPdfServer-2/Run.md index 8a031ca..171695c 100644 --- a/src/docs/assemblies/HtmlPdfPlus/IHtmlPdfServer-2/Run.md +++ b/src/docs/assemblies/HtmlPdfPlus/IHtmlPdfServer-2/Run.md @@ -7,12 +7,12 @@ #### Perform HTML to PDF conversion from the request HtmlPdfCliPlus client. ```csharp -public Task> Run(string requestClient, CancellationToken token = default) +public Task> Run(byte[] requestClient, CancellationToken token = default) ``` | parameter | description | | --- | --- | -| requestClient | The compressed data from the request HtmlPdfCliPlus client. | +| requestClient | The compressed byte[] data from the request HtmlPdfCliPlus client. | | token | The CancellationToken to perform the conversion. | ### Return Value diff --git a/src/docs/assemblies/HtmlPdfPlus/IHtmlPdfServer-2/ScopeRequest.md b/src/docs/assemblies/HtmlPdfPlus/IHtmlPdfServer-2/ScopeRequest.md index 7d68ec2..135b3c7 100644 --- a/src/docs/assemblies/HtmlPdfPlus/IHtmlPdfServer-2/ScopeRequest.md +++ b/src/docs/assemblies/HtmlPdfPlus/IHtmlPdfServer-2/ScopeRequest.md @@ -7,12 +7,12 @@ #### Transfer request client for [`IHtmlPdfServerContext`](../IHtmlPdfServerContext-2.md) server context scope for custom actions ```csharp -public IHtmlPdfServerContext ScopeRequest(string requestClient) +public IHtmlPdfServerContext ScopeRequest(byte[] requestClient) ``` | parameter | description | | --- | --- | -| requestClient | The compressed data from the request HtmlPdfCliPlus client. | +| requestClient | The compressed byte[] data from the request HtmlPdfCliPlus client. | ### Return Value diff --git a/src/docs/assemblies/HtmlPdfPlus/StreamExtension.md b/src/docs/assemblies/HtmlPdfPlus/StreamExtension.md new file mode 100644 index 0000000..4f61018 --- /dev/null +++ b/src/docs/assemblies/HtmlPdfPlus/StreamExtension.md @@ -0,0 +1,23 @@ +![HtmlPdfPLus Logo](https://raw.githubusercontent.com/FRACerqueira/HtmlPdfPLus/refs/heads/main/docs/images/iconsmall.png) + +### StreamExtension class +
+ + +#### Extend function for Stream + +```csharp +public static class StreamExtension +``` + +### Public Members + +| name | description | +| --- | --- | +| static [ReadToBytesAsync](StreamExtension/ReadToBytesAsync.md)(…) | Read the stream and return the content as a byte[] | + +### See Also + +* namespace [HtmlPdfPlus](../HtmlPdfPlus.Shared.md) + + diff --git a/src/docs/assemblies/HtmlPdfPlus/HtmlPdfResult-1/DecompressBytes.md b/src/docs/assemblies/HtmlPdfPlus/StreamExtension/ReadToBytesAsync.md similarity index 50% rename from src/docs/assemblies/HtmlPdfPlus/HtmlPdfResult-1/DecompressBytes.md rename to src/docs/assemblies/HtmlPdfPlus/StreamExtension/ReadToBytesAsync.md index 764d130..49677bf 100644 --- a/src/docs/assemblies/HtmlPdfPlus/HtmlPdfResult-1/DecompressBytes.md +++ b/src/docs/assemblies/HtmlPdfPlus/StreamExtension/ReadToBytesAsync.md @@ -1,22 +1,22 @@ ![HtmlPdfPLus Logo](https://raw.githubusercontent.com/FRACerqueira/HtmlPdfPLus/refs/heads/main/docs/images/iconsmall.png) -### HtmlPdfResult<T>.DecompressBytes method +### StreamExtension.ReadToBytesAsync method
-#### Decompress output data if it is byte[] +#### Read the stream and return the content as a byte[] ```csharp -public byte[]? DecompressBytes() +public static Task ReadToBytesAsync(this Stream stream) ``` -### Return Value - -Output data decompressed +| parameter | description | +| --- | --- | +| stream | The stream | ### See Also -* class [HtmlPdfResult<T>](../HtmlPdfResult-1.md) +* class [StreamExtension](../StreamExtension.md) * namespace [HtmlPdfPlus](../../HtmlPdfPlus.Shared.md) diff --git a/src/docs/docindex.md b/src/docs/docindex.md index 069b6bf..0ce6d27 100644 --- a/src/docs/docindex.md +++ b/src/docs/docindex.md @@ -7,6 +7,7 @@ | public type | description | | --- | --- | +| static Extension [ReadToBytesAsync](./assemblies/HtmlPdfPlus/StreamExtension/ReadToBytesAsync.md) | Read the stream and return the content as a byte[] | | static class [HtmlPdfClient](./assemblies/HtmlPdfPlus/HtmlPdfClient.md) | Fluent interface commands to perform client HTML to PDF conversion | | class [HtmlPdfResult<T>](./assemblies/HtmlPdfPlus/HtmlPdfResult-1.md) | Result of converting Html to PDF | | class [PageMargins](./assemblies/HtmlPdfPlus/PageMargins.md) | Page margins. | From 6a9ece072ba5af2c5de9902939e83aab67db8a1d Mon Sep 17 00:00:00 2001 From: Fernando Cerqueira Date: Thu, 20 Mar 2025 12:59:37 -0300 Subject: [PATCH 5/8] fixed code qlt. --- src/HtmlPdfPlus.Server/Core/HtmlPdfServer.cs | 192 +------------------ 1 file changed, 1 insertion(+), 191 deletions(-) diff --git a/src/HtmlPdfPlus.Server/Core/HtmlPdfServer.cs b/src/HtmlPdfPlus.Server/Core/HtmlPdfServer.cs index 694d256..c8328d0 100644 --- a/src/HtmlPdfPlus.Server/Core/HtmlPdfServer.cs +++ b/src/HtmlPdfPlus.Server/Core/HtmlPdfServer.cs @@ -192,197 +192,7 @@ internal async Task> RunServer( catch (Exception ex) { cts.Cancel(); // cancel pending task - LogMessage($"Error Generate PDF from " + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"browser after {sw.Elapsed} : {ex}"); + LogMessage($"Error Generate PDF from browser after {sw.Elapsed} : {ex}"); return new HtmlPdfResult(false, false, sw.Elapsed, default, ex); } } From eeb9eea56c76e049cb4747a5c6bb18e258ddca19 Mon Sep 17 00:00:00 2001 From: Fernando Cerqueira Date: Thu, 20 Mar 2025 13:08:11 -0300 Subject: [PATCH 6/8] Updated documentation --- README.md | 6 +++++- src/README.txt | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4ffdbfd..0da6179 100644 --- a/README.md +++ b/README.md @@ -70,7 +70,11 @@ The current version (V.1.50.0) of **Playwright** supports **only the Chromium br - Changed parameter for command ScopeRequest to byte[] instead of string - Removed DecompressBytes() method to class HtmlPdfResult - Added DecompressOutputData() method to class HtmlPdfResult for custom scenarios - + - Improvements in the compression/decompression process to use asynchronous methods + - Small code reviews + - Updated documentation + - Preparation for GA version + - **v0.3.0-beta** - Added FromUrl(Uri value) command to client-side mode - Fixed bug in server mode for multi thread safe when there is parameter customization and/or no client mode sending. diff --git a/src/README.txt b/src/README.txt index 4428236..43d7829 100644 --- a/src/README.txt +++ b/src/README.txt @@ -54,6 +54,10 @@ What's new in the latest version - Changed parameter for command ScopeRequest to byte[] instead of string - Removed DecompressBytes() method to class HtmlPdfResult - Added DecompressOutputData() method to class HtmlPdfResult for custom scenarios + - Improvements in the compression/decompression process to use asynchronous methods + - Small code reviews + - Updated documentation + - Preparation for GA version - v0.3.0-beta From 92ae25bc67a67332fb0a81a98d695b8ace76fcf7 Mon Sep 17 00:00:00 2001 From: Fernando Cerqueira Date: Thu, 20 Mar 2025 18:04:38 -0300 Subject: [PATCH 7/8] small review of unit tests and updated code samples in readme --- README.md | 77 +++-- src/README.txt | 77 +++-- .../HtmlPdfClientInstanceTests.cs | 264 ++++++++++++++++++ .../HtmlPdfCliPlus/HtmlPdfConfigTests.cs | 165 +++++++++++ .../HtmlPdfShrPlus/GZipHelperTests.cs | 57 ++++ .../HtmlPdfShrPlus/HtmlPdfConfigTests.cs | 214 ++++++++++++++ .../HtmlPdfShrPlus/HtmlPdfResultTests.cs | 80 ++++++ .../HtmlPdfShrPlus/RequestHtmlPdfTests.cs | 152 ++++++++++ 8 files changed, 1048 insertions(+), 38 deletions(-) create mode 100644 src/TestHtmlPdfCliPlus/HtmlPdfCliPlus/HtmlPdfClientInstanceTests.cs create mode 100644 src/TestHtmlPdfCliPlus/HtmlPdfCliPlus/HtmlPdfConfigTests.cs create mode 100644 src/TestHtmlPdfCliPlus/HtmlPdfShrPlus/GZipHelperTests.cs create mode 100644 src/TestHtmlPdfCliPlus/HtmlPdfShrPlus/HtmlPdfConfigTests.cs create mode 100644 src/TestHtmlPdfCliPlus/HtmlPdfShrPlus/HtmlPdfResultTests.cs create mode 100644 src/TestHtmlPdfCliPlus/HtmlPdfShrPlus/RequestHtmlPdfTests.cs diff --git a/README.md b/README.md index 0da6179..13e29f7 100644 --- a/README.md +++ b/README.md @@ -179,11 +179,20 @@ var clienthttp = HostApp!.Services .CreateClient("HtmlPdfServer"); //create client instance and send to HtmlPdfPlus server endpoint -var pdfresult = await HtmlPdfClient.Create("HtmlPdfPlusClient") - .PageConfig((cfg) => cfg.Margins(10)) - .FromHtml(HtmlSample()) - .Timeout(5000) - .Run(clienthttp, token); +var pdfresult = await HtmlPdfClient + .Create("HtmlPdfPlusClient") + .PageConfig((cfg) => + { + cfg.Margins(10) + .Footer("' of ") + .Header("'") + .Orientation(PageOrientation.Landscape) + .DisplayHeaderFooter(true); + }) + .Logger(HostApp.Services.GetService>()) + .FromHtml(HtmlSample()) + .Timeout(5000) + .Run(clienthttp, applifetime.ApplicationStopping); //performs writing to file after performing conversion if (pdfresult.IsSuccess) @@ -209,9 +218,11 @@ builder.Services.AddHtmlPdfService((cfg) => }); ... -app.MapPost("/GeneratePdf", async ([FromServices] IHtmlPdfServer PDFserver, [FromBody] string requestclienthtmltopdf, CancellationToken token) => +app.MapPost("/GeneratePdf", async ([FromServices] IHtmlPdfServer PDFserver, [FromBody] Stream requestclienthtmltopdf, CancellationToken token) => { - return await PDFserver.Run(requestclienthtmltopdf, token); + var data = await requestclienthtmltopdf.ReadToBytesAsync(); + return await PDFserver + .Run(data, token); }).Produces>(200); ``` @@ -226,24 +237,31 @@ app.MapPost("/GeneratePdf", async ([FromServices] IHtmlPdfServer ```csharp using HtmlPdfPlus; -//create client instance and send to HtmlPdfPlus server endpoint -var pdfresult = await HtmlPdfClient.Create("HtmlPdfPlusClient") - .PageConfig((cfg) => cfg.Margins(10)) - .FromHtml(HtmlSample()) - .Timeout(5000) - .Run(SendToServer, token); +// Generic suggestion for writing a file to a cloud like gcp/azure +// Suggested return would be the full path "repo/filename" +var paramTosave = new DataSavePDF("Filename.pdf","MyRepo","MyConnectionstring"); -//performs writing to file after performing conversion +var pdfresult = await HtmlPdfClient.Create("HtmlPdfPlusClient") + .PageConfig((cfg) => + { + cfg.Margins(10); + }) + .Logger(HostApp.Services.GetService>()) + .FromRazor(TemplateRazor(), order1) + .Timeout(50000) + .Run(SendToServer,paramTosave, applifetime.ApplicationStopping); + +//Shwo result if (pdfresult.IsSuccess) { - await File.WriteAllBytesAsync("html2pdfsample.pdf", pdfresult.OutputData!); + Console.WriteLine($"File PDF generate at {pdfresult.OutputData}"); } else { - //show error via pdfresult.Error + Console.WriteLine($"HtmlPdfClient error: {pdfresult.Error!}"); } -private static async Task> SendToServer(string requestdata, CancellationToken token) +private static async Task> SendToServer(byte[] requestdata, CancellationToken token) { //send requestdata to server and return result } @@ -257,14 +275,35 @@ using HtmlPdfPlus; ... var builder = WebApplication.CreateBuilder(args); -builder.Services.AddHtmlPdfService((cfg) => +builder.Services.AddHtmlPdfService((cfg) => { cfg.Logger(LogLevel.Debug, "MyPDFServer"); }); ... var PDFserver = HostApp.Services.GetHtmlPdfService(); -var result = await PDFserver.Run(requestdata , Token); +var result = await PDFserver + .ScopeRequest(data) + .BeforePDF( (html,inputparam, _) => + { + if (inputparam is null) + { + return Task.FromResult(html); + } + //performs replacement token substitution in the HTML source before performing the conversion + var aux = html.Replace("[{FileName}]", inputparam.Filename); + return Task.FromResult(aux); + }) + .AfterPDF( (pdfbyte, inputparam, token) => + { + if (inputparam is null) + { + return Task.FromResult(string.Empty); + } + //TODO : performs writing to file after performing conversion + return Task.FromResult(inputparam.Filename); + }) + .Run(token); //send result to client diff --git a/src/README.txt b/src/README.txt index 43d7829..9e026f9 100644 --- a/src/README.txt +++ b/src/README.txt @@ -121,11 +121,20 @@ var clienthttp = HostApp!.Services .CreateClient("HtmlPdfServer"); //create client instance and send to HtmlPdfPlus server endpoint -var pdfresult = await HtmlPdfClient.Create("HtmlPdfPlusClient") - .PageConfig((cfg) => cfg.Margins(10)) - .FromHtml(HtmlSample()) - .Timeout(5000) - .Run(clienthttp, token); +var pdfresult = await HtmlPdfClient + .Create("HtmlPdfPlusClient") + .PageConfig((cfg) => + { + cfg.Margins(10) + .Footer("' of ") + .Header("'") + .Orientation(PageOrientation.Landscape) + .DisplayHeaderFooter(true); + }) + .Logger(HostApp.Services.GetService>()) + .FromHtml(HtmlSample()) + .Timeout(5000) + .Run(clienthttp, applifetime.ApplicationStopping); //performs writing to file after performing conversion if (pdfresult.IsSuccess) @@ -151,9 +160,11 @@ builder.Services.AddHtmlPdfService((cfg) => }); ... -app.MapPost("/GeneratePdf", async ([FromServices] IHtmlPdfServer PDFserver, [FromBody] string requestclienthtmltopdf, CancellationToken token) => +app.MapPost("/GeneratePdf", async ([FromServices] IHtmlPdfServer PDFserver, [FromBody] Stream requestclienthtmltopdf, CancellationToken token) => { - return await PDFserver.Run(requestclienthtmltopdf, token); + var data = await requestclienthtmltopdf.ReadToBytesAsync(); + return await PDFserver + .Run(data, token); }).Produces>(200); @@ -165,24 +176,31 @@ CLIENT SIDE using HtmlPdfPlus; -//create client instance and send to HtmlPdfPlus server endpoint -var pdfresult = await HtmlPdfClient.Create("HtmlPdfPlusClient") - .PageConfig((cfg) => cfg.Margins(10)) - .FromHtml(HtmlSample()) - .Timeout(5000) - .Run(SendToServer, token); +// Generic suggestion for writing a file to a cloud like gcp/azure +// Suggested return would be the full path "repo/filename" +var paramTosave = new DataSavePDF("Filename.pdf","MyRepo","MyConnectionstring"); -//performs writing to file after performing conversion +var pdfresult = await HtmlPdfClient.Create("HtmlPdfPlusClient") + .PageConfig((cfg) => + { + cfg.Margins(10); + }) + .Logger(HostApp.Services.GetService>()) + .FromRazor(TemplateRazor(), order1) + .Timeout(50000) + .Run(SendToServer,paramTosave, applifetime.ApplicationStopping); + +//Shwo result if (pdfresult.IsSuccess) { - await File.WriteAllBytesAsync("html2pdfsample.pdf", pdfresult.OutputData!); + Console.WriteLine($"File PDF generate at {pdfresult.OutputData}"); } else { - //show error via pdfresult.Error + Console.WriteLine($"HtmlPdfClient error: {pdfresult.Error!}"); } -private static async Task> SendToServer(string requestdata, CancellationToken token) +private static async Task> SendToServer(byte[] requestdata, CancellationToken token) { //send requestdata to server and return result } @@ -195,14 +213,35 @@ using HtmlPdfPlus; ... var builder = WebApplication.CreateBuilder(args); -builder.Services.AddHtmlPdfService((cfg) => +builder.Services.AddHtmlPdfService((cfg) => { cfg.Logger(LogLevel.Debug, "MyPDFServer"); }); ... var PDFserver = HostApp.Services.GetHtmlPdfService(); -var result = await PDFserver.Run(requestdata , Token); +var result = await PDFserver + .ScopeRequest(data) + .BeforePDF( (html,inputparam, _) => + { + if (inputparam is null) + { + return Task.FromResult(html); + } + //performs replacement token substitution in the HTML source before performing the conversion + var aux = html.Replace("[{FileName}]", inputparam.Filename); + return Task.FromResult(aux); + }) + .AfterPDF( (pdfbyte, inputparam, token) => + { + if (inputparam is null) + { + return Task.FromResult(string.Empty); + } + //TODO : performs writing to file after performing conversion + return Task.FromResult(inputparam.Filename); + }) + .Run(token); //send result to client diff --git a/src/TestHtmlPdfCliPlus/HtmlPdfCliPlus/HtmlPdfClientInstanceTests.cs b/src/TestHtmlPdfCliPlus/HtmlPdfCliPlus/HtmlPdfClientInstanceTests.cs new file mode 100644 index 0000000..b0f8605 --- /dev/null +++ b/src/TestHtmlPdfCliPlus/HtmlPdfCliPlus/HtmlPdfClientInstanceTests.cs @@ -0,0 +1,264 @@ +// *************************************************************************************** +// MIT LICENCE +// The maintenance and evolution is maintained by the HtmlPdfPlus team +// https://github.com/FRACerqueira/HtmlPdfPlus +// *************************************************************************************** + +using Microsoft.Extensions.Logging; +using Moq; +using HtmlPdfPlus.Client.Core; +using HtmlPdfPlus; + +namespace TestHtmlPdfPlus.HtmlPdfCliPlus +{ + + public class HtmlPdfClientInstanceTests + { + private readonly HttpClient _mockHttpClient; + private readonly Mock _mockLogger; + private readonly DisableOptionsHtmlToPdf _disableOptions; + private readonly HtmlPdfClientInstance _clientInstance; + + public HtmlPdfClientInstanceTests() + { + _mockHttpClient = new HttpClient() + { + BaseAddress = new Uri("http://localhost:8099"), + Timeout = TimeSpan.FromMilliseconds(1), + }; + _mockLogger = new Mock(); + _disableOptions = DisableOptionsHtmlToPdf.EnabledAllFeatures; + _clientInstance = new HtmlPdfClientInstance("testAlias", _disableOptions); + } + + [Fact] + public void PageConfig_ShouldThrowArgumentNullException_WhenConfigIsNull() + { + Assert.Throws(() => _clientInstance.PageConfig(null)); + } + + [Fact] + public void PageConfig_ShouldSetPdfPageConfig() + { + _clientInstance.PageConfig(config => config.Margins(10)); + Assert.NotNull(_clientInstance); + } + + [Fact] + public void FromHtml_ShouldThrowArgumentNullException_WhenValueIsNull() + { + Assert.Throws(() => _clientInstance.FromHtml(null)); + } + + [Fact] + public void FromHtml_ShouldSetHtml() + { + _clientInstance.FromHtml(""); + Assert.NotNull(_clientInstance); + } + + [Fact] + public void FromUrl_ShouldSetHtml() + { + var uri = new Uri("http://example.com"); + _clientInstance.FromUrl(uri); + Assert.NotNull(_clientInstance); + } + + [Fact] + public void FromRazor_ShouldThrowArgumentNullException_WhenTemplateIsNull() + { + Assert.Throws(() => _clientInstance.FromRazor(null, new object())); + } + + [Fact] + public void FromRazor_ShouldSetHtml() + { + var lstprod = new List + { + new("Product", 9.99m) + }; + var order1 = new Order("Roberto Rivellino", "Rua São Jorge, 777", "+55 11 912345678", lstprod); + _clientInstance.FromRazor(TemplateRazor(), order1); + Assert.NotNull(_clientInstance); + } + + [Fact] + public void Logger_ShouldThrowArgumentException_WhenLogLevelIsInvalid() + { + Assert.Throws(() => _clientInstance.Logger(_mockLogger.Object, LogLevel.Error)); + } + + [Fact] + public void Logger_ShouldSetLogger() + { + _clientInstance.Logger(_mockLogger.Object, LogLevel.Debug); + Assert.NotNull(_clientInstance); + } + + [Fact] + public void Timeout_ShouldThrowArgumentException_WhenValueIsInvalid() + { + Assert.Throws(() => _clientInstance.Timeout(0)); + } + + [Fact] + public void Timeout_ShouldSetTimeout() + { + _clientInstance.Timeout(10000); + Assert.NotNull(_clientInstance); + } + + [Fact] + public void HtmlParser_ShouldSetHtmlParser() + { + _clientInstance.HtmlParser(true, error => { }); + Assert.NotNull(_clientInstance); + } + + [Fact] + public async Task Run_ShouldThrowInvalidOperationException_WhenHtmlIsEmpty() + { + await Assert.ThrowsAsync(() => _clientInstance.Run((html, token) => Task.FromResult(new HtmlPdfResult(true, false, TimeSpan.Zero, new byte[0])), CancellationToken.None)); + } + + [Fact] + public async Task Run_ShouldThrowArgumentNullException_WhenSubmitHtmlToPdfIsNull() + { + Func>>? submitHtmlToPdf = null; + _clientInstance.FromHtml("

test

"); + await Assert.ThrowsAsync(() => _clientInstance.Run(submitHtmlToPdf, CancellationToken.None)); + } + + [Fact] + public async Task Run_ShouldReturnHtmlPdfResult() + { + _clientInstance.FromHtml("

test

"); + var result = await _clientInstance.Run((html, token) => Task.FromResult(new HtmlPdfResult(true, false, TimeSpan.Zero, new byte[0])), CancellationToken.None); + Assert.NotNull(result); + } + + [Fact] + public async Task Run_HttpClient_ShouldThrowInvalidOperationException_WhenHtmlIsEmpty() + { + await Assert.ThrowsAsync(() => _clientInstance.Run(new HttpClient(), CancellationToken.None)); + } + + [Fact] + public async Task Run_HttpClient_ShouldReturnHtmlPdfResult() + { + _clientInstance.FromHtml("

test

"); + var result = await _clientInstance.Run(_mockHttpClient, CancellationToken.None); + Assert.NotNull(result); + } + + [Fact] + public async Task Run_HttpClient_WithEndpoint_ShouldThrowInvalidOperationException_WhenHtmlIsEmpty() + { + await Assert.ThrowsAsync(() => _clientInstance.Run(new HttpClient(), "http://example.com", CancellationToken.None)); + } + + [Fact] + public async Task Run_HttpClient_WithEndpoint_ShouldReturnHtmlPdfResult() + { + _clientInstance.FromHtml("

test

"); + var result = await _clientInstance.Run(_mockHttpClient, "http://example.com", CancellationToken.None); + Assert.NotNull(result); + } + + [Fact] + public async Task Run_CustomData_ShouldThrowInvalidOperationException_WhenHtmlIsEmpty() + { + await Assert.ThrowsAsync(() => _clientInstance.Run(new HttpClient(), null, CancellationToken.None)); + } + + [Fact] + public async Task Run_CustomData_ShouldReturnHtmlPdfResult() + { + _clientInstance.FromHtml("

test

"); + var result = await _clientInstance.Run(_mockHttpClient, null, CancellationToken.None); + Assert.NotNull(result); + } + + [Fact] + public async Task Run_CustomData_WithEndpoint_ShouldThrowInvalidOperationException_WhenHtmlIsEmpty() + { + await Assert.ThrowsAsync(() => _clientInstance.Run(new HttpClient(), "http://example.com", null, CancellationToken.None)); + } + + [Fact] + public async Task Run_CustomData_WithEndpoint_ShouldReturnHtmlPdfResult() + { + _clientInstance.FromHtml("

test

"); + var result = await _clientInstance.Run(_mockHttpClient, "http://example.com", null, CancellationToken.None); + Assert.NotNull(result); + } + + private static string TemplateRazor() + { + return """ + + + + + Customer Details + + + +

Customer Details

+

Name: @Model.CustomerName

+

Address: @Model.CustomerAddress

+

Phone Number: @Model.CustomerPhoneNumber

+ +

Products (@Model.Products.Count)

+ @if(Model.Products.Any()) + { + + + + + + + + + @foreach (var product in Model.Products) + { + + + + + } + +
Product NamePrice
@product.Name@product.Price.ToString("C")
+ } + else + { +

No products found.

+ } + + + """; + + } + + public record Product(string Name, decimal Price); + + public record Order(string CustomerName, string CustomerAddress, string CustomerPhoneNumber, List Products); + } +} \ No newline at end of file diff --git a/src/TestHtmlPdfCliPlus/HtmlPdfCliPlus/HtmlPdfConfigTests.cs b/src/TestHtmlPdfCliPlus/HtmlPdfCliPlus/HtmlPdfConfigTests.cs new file mode 100644 index 0000000..33dbbbc --- /dev/null +++ b/src/TestHtmlPdfCliPlus/HtmlPdfCliPlus/HtmlPdfConfigTests.cs @@ -0,0 +1,165 @@ +// *************************************************************************************** +// MIT LICENCE +// The maintenance and evolution is maintained by the HtmlPdfPlus team +// https://github.com/FRACerqueira/HtmlPdfPlus +// *************************************************************************************** + +using HtmlPdfPlus; +using HtmlPdfPlus.Client.Core; + +namespace TestHtmlPdfPlus.HtmlPdfCliPlus +{ + + public class HtmlPdfConfigTests + { + private readonly HtmlPdfConfig _config; + + public HtmlPdfConfigTests() + { + _config = new HtmlPdfConfig(); + } + + [Fact] + public void DisplayHeaderFooter_ShouldSetDisplayHeaderFooter() + { + _config.DisplayHeaderFooter(true); + Assert.True(_config.PageConfig.DisplayHeaderFooter); + } + + [Fact] + public void Footer_ShouldSetFooter() + { + _config.Footer("Footer content"); + Assert.Equal("Footer content", _config.PageConfig.Footer); + } + + [Fact] + public void Footer_ShouldSetFooterToNull_WhenValueIsNullOrEmpty() + { + _config.Footer(null); + Assert.Null(_config.PageConfig.Footer); + + _config.Footer(string.Empty); + Assert.Null(_config.PageConfig.Footer); + } + + [Fact] + public void Format_ShouldSetPageSize() + { + var pageSize = new PageSize(210, 297); + _config.Format(pageSize); + Assert.Equal(pageSize, _config.PageConfig.Size); + } + + [Fact] + public void Format_ShouldSetPageSizeWithWidthAndHeight() + { + _config.Format(210, 297); + Assert.Equal(210, _config.PageConfig.Size.Width); + Assert.Equal(297, _config.PageConfig.Size.Height); + } + + [Fact] + public void Format_ShouldThrowArgumentException_WhenWidthOrHeightIsInvalid() + { + Assert.Throws(() => _config.Format(-1, 297)); + Assert.Throws(() => _config.Format(210, -1)); + } + + [Fact] + public void Header_ShouldSetHeader() + { + _config.Header("Header content"); + Assert.Equal("Header content", _config.PageConfig.Header); + } + + [Fact] + public void Header_ShouldSetHeaderToNull_WhenValueIsNullOrEmpty() + { + _config.Header(null); + Assert.Null(_config.PageConfig.Header); + + _config.Header(string.Empty); + Assert.Null(_config.PageConfig.Header); + } + + [Fact] + public void Margins_ShouldSetMargins() + { + var margins = new PageMargins(10, 10, 10, 10); + _config.Margins(margins); + Assert.Equal(margins, _config.PageConfig.Margins); + } + + [Fact] + public void Margins_ShouldSetMarginsWithTopBottomLeftRight() + { + _config.Margins(10, 20, 30, 40); + Assert.Equal(10, _config.PageConfig.Margins.Top); + Assert.Equal(20, _config.PageConfig.Margins.Bottom); + Assert.Equal(30, _config.PageConfig.Margins.Left); + Assert.Equal(40, _config.PageConfig.Margins.Right); + } + + [Fact] + public void Margins_ShouldThrowArgumentException_WhenAnyMarginValueIsInvalid() + { + Assert.Throws(() => _config.Margins(-1, 20, 30, 40)); + Assert.Throws(() => _config.Margins(10, -1, 30, 40)); + Assert.Throws(() => _config.Margins(10, 20, -1, 40)); + Assert.Throws(() => _config.Margins(10, 20, 30, -1)); + } + + [Fact] + public void Margins_ShouldSetMarginsWithSingleValue() + { + _config.Margins(10); + Assert.Equal(10, _config.PageConfig.Margins.Top); + Assert.Equal(10, _config.PageConfig.Margins.Bottom); + Assert.Equal(10, _config.PageConfig.Margins.Left); + Assert.Equal(10, _config.PageConfig.Margins.Right); + } + + [Fact] + public void Margins_ShouldThrowArgumentException_WhenSingleMarginValueIsInvalid() + { + Assert.Throws(() => _config.Margins(-1)); + } + + [Fact] + public void Orientation_ShouldSetOrientation() + { + _config.Orientation(PageOrientation.Landscape); + Assert.Equal(PageOrientation.Landscape, _config.PageConfig.Orientation); + } + + [Fact] + public void PreferCSSPageSize_ShouldSetPreferCSSPageSize() + { + _config.PreferCSSPageSize(true); + Assert.True(_config.PageConfig.PreferCSSPageSize); + } + + [Fact] + public void PrintBackground_ShouldSetPrintBackground() + { + _config.PrintBackground(false); + Assert.False(_config.PageConfig.PrintBackground); + } + + [Fact] + public void Scale_ShouldSetScale() + { + _config.Scale(1.5f); + Assert.Equal(1.5f, _config.PageConfig.Scale); + } + + [Fact] + public void Scale_ShouldThrowArgumentException_WhenScaleValueIsOutOfRange() + { + Assert.Throws(() => _config.Scale(0.05f)); + Assert.Throws(() => _config.Scale(2.5f)); + } + } + +} diff --git a/src/TestHtmlPdfCliPlus/HtmlPdfShrPlus/GZipHelperTests.cs b/src/TestHtmlPdfCliPlus/HtmlPdfShrPlus/GZipHelperTests.cs new file mode 100644 index 0000000..ac6cb12 --- /dev/null +++ b/src/TestHtmlPdfCliPlus/HtmlPdfShrPlus/GZipHelperTests.cs @@ -0,0 +1,57 @@ +// *************************************************************************************** +// MIT LICENCE +// The maintenance and evolution is maintained by the HtmlPdfPlus team +// https://github.com/FRACerqueira/HtmlPdfPlus +// *************************************************************************************** + +using HtmlPdfPlus.Shared.Core; +using System.Text; + +namespace TestHtmlPdfPlus.HtmlPdfShrPlus +{ + public class GZipHelperTests + { + [Fact] + public async Task CompressAsync_ValidInput_CompressesData() + { + // Arrange + var input = Encoding.UTF8.GetBytes("Hello, World!"); + var cancellationToken = CancellationToken.None; + + // Act + var compressedData = await GZipHelper.CompressAsync(input, cancellationToken); + + // Assert + Assert.NotNull(compressedData); + Assert.NotEqual(input, compressedData); + } + + [Fact] + public async Task DecompressAsync_ValidInput_DecompressesData() + { + // Arrange + var input = Encoding.UTF8.GetBytes("Hello, World!"); + var cancellationToken = CancellationToken.None; + var compressedData = await GZipHelper.CompressAsync(input, cancellationToken); + + // Act + var decompressedData = await GZipHelper.DecompressAsync(compressedData, cancellationToken); + + // Assert + Assert.NotNull(decompressedData); + Assert.Equal(input, decompressedData); + } + + [Fact] + public async Task DecompressAsync_InvalidInput_ThrowsInvalidOperationException() + { + // Arrange + var invalidInput = new byte[] { 0xAF, 0x8B, 0x08 }; // Invalid GZip header + var cancellationToken = CancellationToken.None; + + // Act & Assert + var exception = await Assert.ThrowsAsync(() => GZipHelper.DecompressAsync(invalidInput, cancellationToken)); + Assert.Equal("The input byte array is not a valid GZip stream.", exception.Message); + } + } +} diff --git a/src/TestHtmlPdfCliPlus/HtmlPdfShrPlus/HtmlPdfConfigTests.cs b/src/TestHtmlPdfCliPlus/HtmlPdfShrPlus/HtmlPdfConfigTests.cs new file mode 100644 index 0000000..a72e758 --- /dev/null +++ b/src/TestHtmlPdfCliPlus/HtmlPdfShrPlus/HtmlPdfConfigTests.cs @@ -0,0 +1,214 @@ +using HtmlPdfPlus; +using HtmlPdfPlus.Client.Core; + +public class HtmlPdfConfigTests +{ + [Fact] + public void DisplayHeaderFooter_SetsValue_ReturnsInstance() + { + // Arrange + var config = new HtmlPdfConfig(); + + // Act + var result = config.DisplayHeaderFooter(true); + + // Assert + Assert.Equal(config, result); + Assert.True(config.PageConfig.DisplayHeaderFooter); + } + + [Fact] + public void Footer_SetsValue_ReturnsInstance() + { + // Arrange + var config = new HtmlPdfConfig(); + var footer = "Footer content"; + + // Act + var result = config.Footer(footer); + + // Assert + Assert.Equal(config, result); + Assert.Equal(footer, config.PageConfig.Footer); + } + + [Fact] + public void Format_SetsPageSize_ReturnsInstance() + { + // Arrange + var config = new HtmlPdfConfig(); + var pageSize = PageSize.A4; + + // Act + var result = config.Format(pageSize); + + // Assert + Assert.Equal(config, result); + Assert.Equal(pageSize, config.PageConfig.Size); + } + + [Fact] + public void Format_SetsWidthAndHeight_ReturnsInstance() + { + // Arrange + var config = new HtmlPdfConfig(); + decimal width = 210; + decimal height = 297; + + // Act + var result = config.Format(width, height); + + // Assert + Assert.Equal(config, result); + Assert.Equal(width, config.PageConfig.Size.Width); + Assert.Equal(height, config.PageConfig.Size.Height); + } + + [Fact] + public void Header_SetsValue_ReturnsInstance() + { + // Arrange + var config = new HtmlPdfConfig(); + var header = "Header content"; + + // Act + var result = config.Header(header); + + // Assert + Assert.Equal(config, result); + Assert.Equal(header, config.PageConfig.Header); + } + + [Fact] + public void Margins_SetsPageMargins_ReturnsInstance() + { + // Arrange + var config = new HtmlPdfConfig(); + var margins = new PageMargins(10, 10, 10, 10); + + // Act + var result = config.Margins(margins); + + // Assert + Assert.Equal(config, result); + Assert.Equal(margins, config.PageConfig.Margins); + } + + [Fact] + public void Margins_SetsAllMargins_ReturnsInstance() + { + // Arrange + var config = new HtmlPdfConfig(); + decimal margin = 10; + + // Act + var result = config.Margins(margin); + + // Assert + Assert.Equal(config, result); + Assert.Equal(margin, config.PageConfig.Margins.Top); + Assert.Equal(margin, config.PageConfig.Margins.Bottom); + Assert.Equal(margin, config.PageConfig.Margins.Left); + Assert.Equal(margin, config.PageConfig.Margins.Right); + } + + [Fact] + public void Margins_SetsIndividualMargins_ReturnsInstance() + { + // Arrange + var config = new HtmlPdfConfig(); + decimal top = 10; + decimal bottom = 20; + decimal left = 30; + decimal right = 40; + + // Act + var result = config.Margins(top, bottom, left, right); + + // Assert + Assert.Equal(config, result); + Assert.Equal(top, config.PageConfig.Margins.Top); + Assert.Equal(bottom, config.PageConfig.Margins.Bottom); + Assert.Equal(left, config.PageConfig.Margins.Left); + Assert.Equal(right, config.PageConfig.Margins.Right); + } + + [Fact] + public void Orientation_SetsValue_ReturnsInstance() + { + // Arrange + var config = new HtmlPdfConfig(); + var orientation = PageOrientation.Landscape; + + // Act + var result = config.Orientation(orientation); + + // Assert + Assert.Equal(config, result); + Assert.Equal(orientation, config.PageConfig.Orientation); + } + + [Fact] + public void PreferCSSPageSize_SetsValue_ReturnsInstance() + { + // Arrange + var config = new HtmlPdfConfig(); + + // Act + var result = config.PreferCSSPageSize(true); + + // Assert + Assert.Equal(config, result); + Assert.True(config.PageConfig.PreferCSSPageSize); + } + + [Fact] + public void PrintBackground_SetsValue_ReturnsInstance() + { + // Arrange + var config = new HtmlPdfConfig(); + + // Act + var result = config.PrintBackground(false); + + // Assert + Assert.Equal(config, result); + Assert.False(config.PageConfig.PrintBackground); + } + + [Fact] + public void Scale_SetsValue_ReturnsInstance() + { + // Arrange + var config = new HtmlPdfConfig(); + float scale = 1.5f; + + // Act + var result = config.Scale(scale); + + // Assert + Assert.Equal(config, result); + Assert.Equal(scale, config.PageConfig.Scale); + } + + [Fact] + public void Scale_InvalidValue_ThrowsArgumentException() + { + // Arrange + var config = new HtmlPdfConfig(); + float invalidScale = 2.5f; + + // Act & Assert + var exception = Assert.Throws(() => config.Scale(invalidScale)); + Assert.Equal("Scale amount must be between 0.1 and 2.", exception.Message); + } +}// *************************************************************************************** +// MIT LICENCE +// The maintenance and evolution is maintained by the HtmlPdfPlus team +// https://github.com/FRACerqueira/HtmlPdfPlus +// *************************************************************************************** + +namespace TestHtmlPdfPlus.HtmlPdfShrPlus +{ + +} diff --git a/src/TestHtmlPdfCliPlus/HtmlPdfShrPlus/HtmlPdfResultTests.cs b/src/TestHtmlPdfCliPlus/HtmlPdfShrPlus/HtmlPdfResultTests.cs new file mode 100644 index 0000000..1d67c2e --- /dev/null +++ b/src/TestHtmlPdfCliPlus/HtmlPdfShrPlus/HtmlPdfResultTests.cs @@ -0,0 +1,80 @@ +// *************************************************************************************** +// MIT LICENCE +// The maintenance and evolution is maintained by the HtmlPdfPlus team +// https://github.com/FRACerqueira/HtmlPdfPlus +// *************************************************************************************** + +using System.IO.Compression; +using System.Text; +using HtmlPdfPlus; + +namespace TestHtmlPdfPlus.HtmlPdfShrPlus +{ + public class HtmlPdfResultTests + { + [Fact] + public void Constructor_ShouldInitializeProperties() + { + // Arrange + var isSuccess = true; + var bufferDrained = false; + var elapsedTime = TimeSpan.FromSeconds(1); + var outputData = "Test Data"; + var error = new Exception("Test Exception"); + + // Act + var result = new HtmlPdfResult(isSuccess, bufferDrained, elapsedTime, outputData, error); + + // Assert + Assert.Equal(isSuccess, result.IsSuccess); + Assert.Equal(bufferDrained, result.BufferDrained); + Assert.Equal(elapsedTime, result.ElapsedTime); + Assert.Equal(outputData, result.OutputData); + Assert.Equal(error, result.Error); + } + + [Fact] + public void DecompressOutputData_ShouldDecompressByteArray() + { + // Arrange + var isSuccess = true; + var bufferDrained = false; + var elapsedTime = TimeSpan.FromSeconds(1); + var originalData = Encoding.UTF8.GetBytes("Test Data"); + var compressedData = Compress(originalData); + var result = new HtmlPdfResult(isSuccess, bufferDrained, elapsedTime, compressedData); + + // Act + var decompressedResult = result.DecompressOutputData(); + + // Assert + Assert.Equal(originalData, decompressedResult.OutputData); + } + + [Fact] + public void DecompressOutputData_ShouldThrowInvalidOperationException_WhenOutputDataIsNotByteArray() + { + // Arrange + var isSuccess = true; + var bufferDrained = false; + var elapsedTime = TimeSpan.FromSeconds(1); + var outputData = "Test Data"; + var result = new HtmlPdfResult(isSuccess, bufferDrained, elapsedTime, outputData); + + // Act & Assert + Assert.Throws(() => result.DecompressOutputData()); + } + + private byte[] Compress(byte[] data) + { + using (var memoryStream = new System.IO.MemoryStream()) + { + using (var gzipStream = new GZipStream(memoryStream, CompressionMode.Compress)) + { + gzipStream.Write(data, 0, data.Length); + } + return memoryStream.ToArray(); + } + } + } +} diff --git a/src/TestHtmlPdfCliPlus/HtmlPdfShrPlus/RequestHtmlPdfTests.cs b/src/TestHtmlPdfCliPlus/HtmlPdfShrPlus/RequestHtmlPdfTests.cs new file mode 100644 index 0000000..da03f92 --- /dev/null +++ b/src/TestHtmlPdfCliPlus/HtmlPdfShrPlus/RequestHtmlPdfTests.cs @@ -0,0 +1,152 @@ +// *************************************************************************************** +// MIT LICENCE +// The maintenance and evolution is maintained by the HtmlPdfPlus team +// https://github.com/FRACerqueira/HtmlPdfPlus +// *************************************************************************************** + +using HtmlPdfPlus; +using HtmlPdfPlus.Shared.Core; +using NUglify; +using System.Text; +using System.Text.Json; + +namespace TestHtmlPdfPlus.HtmlPdfShrPlus +{ + public class RequestHtmlPdfTests + { + [Fact] + public void Constructor_ValidParameters_ShouldInitializeProperties() + { + // Arrange + var html = ""; + var alias = "testAlias"; + var config = new PdfPageConfig(); + var timeout = 30000; + var inputParam = "input"; + + // Act + var request = new RequestHtmlPdf(html, alias, config, timeout, inputParam); + + // Assert + Assert.Equal(html, request.Html); + Assert.Equal(alias, request.Alias); + Assert.Equal(config, request.Config); + Assert.Equal(timeout, request.Timeout); + Assert.Equal(inputParam, request.InputParam); + } + + [Fact] + public void Constructor_NullHtml_ShouldThrowArgumentException() + { + // Arrange + string html = null; + + // Act & Assert + Assert.Throws(() => new RequestHtmlPdf(html)); + } + + [Fact] + public void Constructor_EmptyHtml_ShouldThrowArgumentException() + { + // Arrange + var html = ""; + + // Act & Assert + Assert.Throws(() => new RequestHtmlPdf(html)); + } + + [Fact] + public void Constructor_TimeoutLessThanOrEqualToZero_ShouldThrowArgumentException() + { + // Arrange + var html = ""; + var timeout = 0; + + // Act & Assert + Assert.Throws(() => new RequestHtmlPdf(html, timeout: timeout)); + } + + [Fact] + public void ChangeHtml_ValidHtml_ShouldUpdateHtml() + { + // Arrange + var html = ""; + var request = new RequestHtmlPdf(html); + var newHtml = "Updated"; + + // Act + request.ChangeHtml(newHtml, false); + + // Assert + Assert.Equal(newHtml, request.Html); + } + + [Fact] + public void ChangeHtml_NullHtml_ShouldThrowArgumentException() + { + // Arrange + var html = ""; + var request = new RequestHtmlPdf(html); + + // Act & Assert + Assert.Throws(() => request.ChangeHtml(null, false)); + } + + [Fact] + public void ChangeHtml_EmptyHtml_ShouldThrowArgumentException() + { + // Arrange + var html = ""; + var request = new RequestHtmlPdf(html); + + // Act & Assert + Assert.Throws(() => request.ChangeHtml("", false)); + } + + [Fact] + public void ChangeHtml_Minify_ShouldMinifyHtml() + { + // Arrange + var html = " Test "; + var request = new RequestHtmlPdf(html); + var expectedHtml = Uglify.Html(html).Code; + + // Act + request.ChangeHtml(html, true); + + // Assert + Assert.Equal(expectedHtml, request.Html); + } + + [Fact] + public void ToBytes_ShouldReturnByteArray() + { + // Arrange + var html = ""; + var request = new RequestHtmlPdf(html); + var expectedBytes = Encoding.UTF8.GetBytes(JsonSerializer.Serialize(request)); + + // Act + var result = request.ToBytes(); + + // Assert + Assert.Equal(expectedBytes, result); + } + + [Fact] + public async Task ToBytesCompress_ShouldReturnCompressedByteArray() + { + // Arrange + var html = ""; + var request = new RequestHtmlPdf(html); + var bytes = request.ToBytes(); + var expectedCompressedBytes = await GZipHelper.CompressAsync(bytes); + + // Act + var result = await request.ToBytesCompress(); + + // Assert + Assert.Equal(expectedCompressedBytes, result); + } + } +} From ae6ec7091f5d9c00b0f5bfbddb4849d7e636791e Mon Sep 17 00:00:00 2001 From: Fernando Cerqueira Date: Thu, 20 Mar 2025 18:47:44 -0300 Subject: [PATCH 8/8] Fixed namespaces (Test Project) --- .../HtmlPdfClientInstanceTests.cs | 1 - .../HtmlPdfCliPlus/HtmlPdfConfigTest.cs | 6 +- .../HtmlPdfCliPlus/HtmlPdfConfigTests.cs | 1 - .../HtmlPdfShrPlus/HtmlPdfConfigTests.cs | 416 +++++++++--------- 4 files changed, 212 insertions(+), 212 deletions(-) diff --git a/src/TestHtmlPdfCliPlus/HtmlPdfCliPlus/HtmlPdfClientInstanceTests.cs b/src/TestHtmlPdfCliPlus/HtmlPdfCliPlus/HtmlPdfClientInstanceTests.cs index b0f8605..0499197 100644 --- a/src/TestHtmlPdfCliPlus/HtmlPdfCliPlus/HtmlPdfClientInstanceTests.cs +++ b/src/TestHtmlPdfCliPlus/HtmlPdfCliPlus/HtmlPdfClientInstanceTests.cs @@ -11,7 +11,6 @@ namespace TestHtmlPdfPlus.HtmlPdfCliPlus { - public class HtmlPdfClientInstanceTests { private readonly HttpClient _mockHttpClient; diff --git a/src/TestHtmlPdfCliPlus/HtmlPdfCliPlus/HtmlPdfConfigTest.cs b/src/TestHtmlPdfCliPlus/HtmlPdfCliPlus/HtmlPdfConfigTest.cs index f052424..a02dc07 100644 --- a/src/TestHtmlPdfCliPlus/HtmlPdfCliPlus/HtmlPdfConfigTest.cs +++ b/src/TestHtmlPdfCliPlus/HtmlPdfCliPlus/HtmlPdfConfigTest.cs @@ -16,7 +16,7 @@ public class HtmlPdfConfigTest public void Ensure_Create_HtmlPdfConfig_FormatByWH() { var result = new HtmlPdfConfig(); - result.Format(); + result.Format(); Assert.Equal("210.0;297.0", result.PageConfig.Size.ToString()); } @@ -66,7 +66,7 @@ public void Ensure_Create_HtmlPdfConfig_HeaderNull() public void Ensure_Create_HtmlPdfConfig_Margins() { var result = new HtmlPdfConfig(); - result.Margins(1,2,3,4); + result.Margins(1, 2, 3, 4); Assert.Equal("1.0;2.0;3.0;4.0", result.PageConfig.Margins.ToString()); } @@ -74,7 +74,7 @@ public void Ensure_Create_HtmlPdfConfig_Margins() public void Ensure_Create_HtmlPdfConfig_MarginsClass() { var result = new HtmlPdfConfig(); - result.Margins(PageMargins.Create(1,2,3,4)); + result.Margins(PageMargins.Create(1, 2, 3, 4)); Assert.Equal("1.0;2.0;3.0;4.0", result.PageConfig.Margins.ToString()); } diff --git a/src/TestHtmlPdfCliPlus/HtmlPdfCliPlus/HtmlPdfConfigTests.cs b/src/TestHtmlPdfCliPlus/HtmlPdfCliPlus/HtmlPdfConfigTests.cs index 33dbbbc..8670ef9 100644 --- a/src/TestHtmlPdfCliPlus/HtmlPdfCliPlus/HtmlPdfConfigTests.cs +++ b/src/TestHtmlPdfCliPlus/HtmlPdfCliPlus/HtmlPdfConfigTests.cs @@ -9,7 +9,6 @@ namespace TestHtmlPdfPlus.HtmlPdfCliPlus { - public class HtmlPdfConfigTests { private readonly HtmlPdfConfig _config; diff --git a/src/TestHtmlPdfCliPlus/HtmlPdfShrPlus/HtmlPdfConfigTests.cs b/src/TestHtmlPdfCliPlus/HtmlPdfShrPlus/HtmlPdfConfigTests.cs index a72e758..ae9bfd2 100644 --- a/src/TestHtmlPdfCliPlus/HtmlPdfShrPlus/HtmlPdfConfigTests.cs +++ b/src/TestHtmlPdfCliPlus/HtmlPdfShrPlus/HtmlPdfConfigTests.cs @@ -1,214 +1,216 @@ using HtmlPdfPlus; using HtmlPdfPlus.Client.Core; - -public class HtmlPdfConfigTests +namespace TestHtmlPdfPlus.HtmlPdfShrPlus { - [Fact] - public void DisplayHeaderFooter_SetsValue_ReturnsInstance() - { - // Arrange - var config = new HtmlPdfConfig(); - - // Act - var result = config.DisplayHeaderFooter(true); - - // Assert - Assert.Equal(config, result); - Assert.True(config.PageConfig.DisplayHeaderFooter); - } - - [Fact] - public void Footer_SetsValue_ReturnsInstance() - { - // Arrange - var config = new HtmlPdfConfig(); - var footer = "Footer content"; - - // Act - var result = config.Footer(footer); - - // Assert - Assert.Equal(config, result); - Assert.Equal(footer, config.PageConfig.Footer); - } - - [Fact] - public void Format_SetsPageSize_ReturnsInstance() - { - // Arrange - var config = new HtmlPdfConfig(); - var pageSize = PageSize.A4; - - // Act - var result = config.Format(pageSize); - - // Assert - Assert.Equal(config, result); - Assert.Equal(pageSize, config.PageConfig.Size); - } - - [Fact] - public void Format_SetsWidthAndHeight_ReturnsInstance() + public class HtmlPdfConfigTests { - // Arrange - var config = new HtmlPdfConfig(); - decimal width = 210; - decimal height = 297; - - // Act - var result = config.Format(width, height); - - // Assert - Assert.Equal(config, result); - Assert.Equal(width, config.PageConfig.Size.Width); - Assert.Equal(height, config.PageConfig.Size.Height); - } - - [Fact] - public void Header_SetsValue_ReturnsInstance() + [Fact] + public void DisplayHeaderFooter_SetsValue_ReturnsInstance() + { + // Arrange + var config = new HtmlPdfConfig(); + + // Act + var result = config.DisplayHeaderFooter(true); + + // Assert + Assert.Equal(config, result); + Assert.True(config.PageConfig.DisplayHeaderFooter); + } + + [Fact] + public void Footer_SetsValue_ReturnsInstance() + { + // Arrange + var config = new HtmlPdfConfig(); + var footer = "Footer content"; + + // Act + var result = config.Footer(footer); + + // Assert + Assert.Equal(config, result); + Assert.Equal(footer, config.PageConfig.Footer); + } + + [Fact] + public void Format_SetsPageSize_ReturnsInstance() + { + // Arrange + var config = new HtmlPdfConfig(); + var pageSize = PageSize.A4; + + // Act + var result = config.Format(pageSize); + + // Assert + Assert.Equal(config, result); + Assert.Equal(pageSize, config.PageConfig.Size); + } + + [Fact] + public void Format_SetsWidthAndHeight_ReturnsInstance() + { + // Arrange + var config = new HtmlPdfConfig(); + decimal width = 210; + decimal height = 297; + + // Act + var result = config.Format(width, height); + + // Assert + Assert.Equal(config, result); + Assert.Equal(width, config.PageConfig.Size.Width); + Assert.Equal(height, config.PageConfig.Size.Height); + } + + [Fact] + public void Header_SetsValue_ReturnsInstance() + { + // Arrange + var config = new HtmlPdfConfig(); + var header = "Header content"; + + // Act + var result = config.Header(header); + + // Assert + Assert.Equal(config, result); + Assert.Equal(header, config.PageConfig.Header); + } + + [Fact] + public void Margins_SetsPageMargins_ReturnsInstance() + { + // Arrange + var config = new HtmlPdfConfig(); + var margins = new PageMargins(10, 10, 10, 10); + + // Act + var result = config.Margins(margins); + + // Assert + Assert.Equal(config, result); + Assert.Equal(margins, config.PageConfig.Margins); + } + + [Fact] + public void Margins_SetsAllMargins_ReturnsInstance() + { + // Arrange + var config = new HtmlPdfConfig(); + decimal margin = 10; + + // Act + var result = config.Margins(margin); + + // Assert + Assert.Equal(config, result); + Assert.Equal(margin, config.PageConfig.Margins.Top); + Assert.Equal(margin, config.PageConfig.Margins.Bottom); + Assert.Equal(margin, config.PageConfig.Margins.Left); + Assert.Equal(margin, config.PageConfig.Margins.Right); + } + + [Fact] + public void Margins_SetsIndividualMargins_ReturnsInstance() + { + // Arrange + var config = new HtmlPdfConfig(); + decimal top = 10; + decimal bottom = 20; + decimal left = 30; + decimal right = 40; + + // Act + var result = config.Margins(top, bottom, left, right); + + // Assert + Assert.Equal(config, result); + Assert.Equal(top, config.PageConfig.Margins.Top); + Assert.Equal(bottom, config.PageConfig.Margins.Bottom); + Assert.Equal(left, config.PageConfig.Margins.Left); + Assert.Equal(right, config.PageConfig.Margins.Right); + } + + [Fact] + public void Orientation_SetsValue_ReturnsInstance() + { + // Arrange + var config = new HtmlPdfConfig(); + var orientation = PageOrientation.Landscape; + + // Act + var result = config.Orientation(orientation); + + // Assert + Assert.Equal(config, result); + Assert.Equal(orientation, config.PageConfig.Orientation); + } + + [Fact] + public void PreferCSSPageSize_SetsValue_ReturnsInstance() + { + // Arrange + var config = new HtmlPdfConfig(); + + // Act + var result = config.PreferCSSPageSize(true); + + // Assert + Assert.Equal(config, result); + Assert.True(config.PageConfig.PreferCSSPageSize); + } + + [Fact] + public void PrintBackground_SetsValue_ReturnsInstance() + { + // Arrange + var config = new HtmlPdfConfig(); + + // Act + var result = config.PrintBackground(false); + + // Assert + Assert.Equal(config, result); + Assert.False(config.PageConfig.PrintBackground); + } + + [Fact] + public void Scale_SetsValue_ReturnsInstance() + { + // Arrange + var config = new HtmlPdfConfig(); + float scale = 1.5f; + + // Act + var result = config.Scale(scale); + + // Assert + Assert.Equal(config, result); + Assert.Equal(scale, config.PageConfig.Scale); + } + + [Fact] + public void Scale_InvalidValue_ThrowsArgumentException() + { + // Arrange + var config = new HtmlPdfConfig(); + float invalidScale = 2.5f; + + // Act & Assert + var exception = Assert.Throws(() => config.Scale(invalidScale)); + Assert.Equal("Scale amount must be between 0.1 and 2.", exception.Message); + } + }// *************************************************************************************** + // MIT LICENCE + // The maintenance and evolution is maintained by the HtmlPdfPlus team + // https://github.com/FRACerqueira/HtmlPdfPlus + // *************************************************************************************** + + namespace TestHtmlPdfPlus.HtmlPdfShrPlus { - // Arrange - var config = new HtmlPdfConfig(); - var header = "Header content"; - // Act - var result = config.Header(header); - - // Assert - Assert.Equal(config, result); - Assert.Equal(header, config.PageConfig.Header); } - - [Fact] - public void Margins_SetsPageMargins_ReturnsInstance() - { - // Arrange - var config = new HtmlPdfConfig(); - var margins = new PageMargins(10, 10, 10, 10); - - // Act - var result = config.Margins(margins); - - // Assert - Assert.Equal(config, result); - Assert.Equal(margins, config.PageConfig.Margins); - } - - [Fact] - public void Margins_SetsAllMargins_ReturnsInstance() - { - // Arrange - var config = new HtmlPdfConfig(); - decimal margin = 10; - - // Act - var result = config.Margins(margin); - - // Assert - Assert.Equal(config, result); - Assert.Equal(margin, config.PageConfig.Margins.Top); - Assert.Equal(margin, config.PageConfig.Margins.Bottom); - Assert.Equal(margin, config.PageConfig.Margins.Left); - Assert.Equal(margin, config.PageConfig.Margins.Right); - } - - [Fact] - public void Margins_SetsIndividualMargins_ReturnsInstance() - { - // Arrange - var config = new HtmlPdfConfig(); - decimal top = 10; - decimal bottom = 20; - decimal left = 30; - decimal right = 40; - - // Act - var result = config.Margins(top, bottom, left, right); - - // Assert - Assert.Equal(config, result); - Assert.Equal(top, config.PageConfig.Margins.Top); - Assert.Equal(bottom, config.PageConfig.Margins.Bottom); - Assert.Equal(left, config.PageConfig.Margins.Left); - Assert.Equal(right, config.PageConfig.Margins.Right); - } - - [Fact] - public void Orientation_SetsValue_ReturnsInstance() - { - // Arrange - var config = new HtmlPdfConfig(); - var orientation = PageOrientation.Landscape; - - // Act - var result = config.Orientation(orientation); - - // Assert - Assert.Equal(config, result); - Assert.Equal(orientation, config.PageConfig.Orientation); - } - - [Fact] - public void PreferCSSPageSize_SetsValue_ReturnsInstance() - { - // Arrange - var config = new HtmlPdfConfig(); - - // Act - var result = config.PreferCSSPageSize(true); - - // Assert - Assert.Equal(config, result); - Assert.True(config.PageConfig.PreferCSSPageSize); - } - - [Fact] - public void PrintBackground_SetsValue_ReturnsInstance() - { - // Arrange - var config = new HtmlPdfConfig(); - - // Act - var result = config.PrintBackground(false); - - // Assert - Assert.Equal(config, result); - Assert.False(config.PageConfig.PrintBackground); - } - - [Fact] - public void Scale_SetsValue_ReturnsInstance() - { - // Arrange - var config = new HtmlPdfConfig(); - float scale = 1.5f; - - // Act - var result = config.Scale(scale); - - // Assert - Assert.Equal(config, result); - Assert.Equal(scale, config.PageConfig.Scale); - } - - [Fact] - public void Scale_InvalidValue_ThrowsArgumentException() - { - // Arrange - var config = new HtmlPdfConfig(); - float invalidScale = 2.5f; - - // Act & Assert - var exception = Assert.Throws(() => config.Scale(invalidScale)); - Assert.Equal("Scale amount must be between 0.1 and 2.", exception.Message); - } -}// *************************************************************************************** -// MIT LICENCE -// The maintenance and evolution is maintained by the HtmlPdfPlus team -// https://github.com/FRACerqueira/HtmlPdfPlus -// *************************************************************************************** - -namespace TestHtmlPdfPlus.HtmlPdfShrPlus -{ - -} +} \ No newline at end of file