Tlacove zostavy

Ahojte, mozete prosim pozdielat vase skusenosti a typy na nastroje na generovanie PDFiek a tlacovych zostav celkovo?

Potrebujem tlacit veci typu faktura, tabulkovy report atd, obcas to poslat mailom v prilohe ako pdfko. Cize nejaky template, naplnit datami z databazy atd…

Moze byt kludne komercne platene riesenie

CHces odporucit, nieco co ti vypluje PDF-ko (napr. z HTML, docx,…), alebo hladas kompletne riesnie na tlacove zostavy?

Kompletne riesenie. Dokonca rozmyslam nad tym, ze necham existujuci MS Access bezat v nejakej virtualke a pomocou nejakeho API budem generovat pdfka. MS Access ma na to skvely designer

S kompletnym riesnim poradit neviem.

Ale zas ak je MS Access na tom podobne ako Word, tak pojde velmi pohodlne ovladat cez COM.

Ahoj,

záleží na požiadavkach. Čo je to najdôležitejšie? pripravuješ, respektíve upravuješ často veľké množstvo reportov, alebo potrebuješ aby pripravoval reporty nevývojár? Ak áno tak je to asi kvalitný designer. Priepustnosť? Jednoduchosť celého riešenia (aj z pohľadu infraštruktúry? …)

Čo sa týka komplexného riešenia tak vo firme máme veľmi dobré skúsenosti s DevExpress riešením. Kvalitný designer, spĺňal všetky naše naozaj náročné požiadavky na reporty. Bohatá možnosť customizácie. A v neposlednom rade asi najlepší support s akým som sa stretol. Cena však je celkom vysoká.
DX Reporing sme ale používali v naších desktopových riešeniach.

Pri webových riešeniach sme sa rozhodli ísť inou cestou (aj keď DX podporuje server side reporting). Ideme viac lightweight riešením. Využívame pdfmake s tým, že jeho šablóny predtým spracovávame pomocou scriban aby sme do nich dostali dáta. To čo bolo pre nás dôležité bolo: priepustnosť, jednoduchosť celého riešenia, komplexnosť reportov a verziovanie šablón (deklaratívny prístup). Nevýhoda, neexistuje zatiaľ žiadny komunitný designer.

Čo sa týka MsAccess tak tam je asi najväčšia otázka tej priepustnosti. Ale ak sa jedná o nejaký interný systém kde generuješ jednotky/desiatky reportov za minú tak asi v pohode. Ináč by som sa toho obával.

U nas https://wkhtmltopdf.org/ beziaci v linux virtualke. Vytvorime html, nainlinujeme css a js (nemusi robit interny browser requesty), nasetupujeme page breaky a ides. Tabulky nema zmysel exportovat v dnesnej dobe do nicoho ineho ako excel, na to pouzivame EPPlus verzia 4 https://github.com/JanKallman/EPPlus, nová je platená, ale v starej nám ešte nič nechýbalo.

1 Like

@vlko: Ako riesis nejaky page header/footer, ktory ma byt na kazdej stranke? Zistujem, ze v HTML je to dost velky problem. Hlavne cisla stranky. EDIT: Ok, vidim, ze to tam ma moznost pridat custom header/footer html. Vyzera to fajn
@Burgyn: Neviem si dost dobre predstavit, ako javascriptovu sablonu pdfmaku predspracovavate scribanom. Ako vyzera taka sablona, kde treba spravit nejaky foreach?

Je to to najlepsie, co sa nam podarilo vymysliet. Treba ratat, ze to je dost casovo narocne, nam to robi v priemere 6 sekund (ale mame tam taky wait settings, aby sa stihli doratat javascript grafy), u teba pre specificky scenar to moze trvat radovo menej.
Kolega ma na to script, tak ho poprosim, nech ho spravi bez secrets, aby mohol byt public dostupny.

OK, tak zatial som siel cestou HTML reportov s exportom do PDF cez puppeteersharp. (Nieco ako wkhtmltopdf ale s Chromium a jednoduchsie na nasadenie (iba nuget)). Samotne templaty su Razor Pages. Rozhodol som sa tak preto, ze

  1. nemam ziaden vendor lock in, hoci ten DevExpress bol naozaj lakavy
  2. Netreba ziadne specificke know how, kedze mam zvysok projektu v ASP.NET.
  3. Bonus: Razor sa da kompilovat aj za behu, takze mozem dorobit aj editaciu templatov v produkcii bez deploymentu so zivim html nahladom.

5 2-strankovych pdfiek sa mi podarilo vygenerovat pod 5 sekund a to vratanie generovania html reportu z SQL databazy pomocou Razor Pages.

Launching Browser
00:00:01.0061385
Fetching page
00:00:01.4711555
Generating pdf
00:00:02.0545972
Fetching page
00:00:02.2853489
Generating pdf
00:00:02.7540356
Fetching page
00:00:02.9336108
Generating pdf
00:00:03.3607539
Fetching page
00:00:03.5336625
Generating pdf
00:00:03.9356911
Fetching page
00:00:04.1626819
Generating pdf
00:00:04.5799757
done

Ono by sa to samozrejme dalo robit aj paralelne a navyse, headless browser sa nemusi zakazdym spustat, takze by som sa mal dostat na 1 sekundu na report.

@vlko: ten skript asi nebudem potrebovat, kedze nevidim ziadnu vyhodu wkhtmltopdf v porovnani s puppeteerom.

Rozdiel je v performance, nam to spravi za 6 sekund 10 stranovy report s dynamickymi js grafami, preto tam mame 5 sekundovy wait na vykreslenie veci generovanych javascriptom. Okrem toho sme mali problem to paralelizovat na windows. Ak je pre teba puppeteer ok riesenie, tak v podstate mozes switchnut na nieco ine hocikedy, vstup je html a css, takze by to namal byt problem.

Aha, no to si nepovedal ze ten wait je 5 sekund :smiley:

Puppeteer je sa mi praveze zda lepsi v paralelizacii, staci vytvorit zalozku per report a headless browser mozes mat predspusteny. Navyse ten 5 sekundovy wait by si vedel nahradit callbackom zo stranky.
Ale pravy dovod, preco som zvolil pupeteer je jednoduchost pouzitia, nasadenia a lepsi html engine.

@liero: V praci pouzivame wkhtmltopdf ako nuget (NReco PdfRenderer), neboli s nim ziadne problemy, akurat CSS a fonty embedujeme do HTML, lebo sluzba priamo generuje “report”.

Zato s headless browsermi som mal problemov az az, sice som robil cez Chromium (to by uz tiez malo vediet renedrovat HTML do PDF) a Selenium, ale aj tak sa milionkrat stalo, ze headless browser sa zasekol, alebo zostal bezat niekde na pozadi aj po ukonceni testov. Tak si skus spravit test aj na tekto scenare, alebo vyskusaj pod zatazou, ci zlozitejsie reporty.

@liero: Šablóna je pdfmake šablóna s liquid značkami. Scriban podporuje foreach. Takéto šablóny máme v ASP.NET Core službe, kde ich spracovávame (napĺňame dátami) a takú finálnu šablónu pošleme na AZURE Function kde beží pdfmake, ktorý vygeneruje PDFko.

Šablóna je pdfmake šablóna s liquid značkami. Scriban podporuje foreach

No lenze pdfmake sablona je JS subor. Ked do neho spravim foreach cez scriban, tak uz to nieje validny js subor, takze uz mi nepomoze ziaden tooling napriklad na formatovanie, validovanie syntaxe atd. Ci?