Buna,
Am o sarcina pe un proiect sa generez PDF-uri cu html&css mai complicat, adica nu doar table si h1,h2…
Initial foloseam https://wkhtmltopdf.org/. Este ok, insa cu acest tool ai batai de cap cu css modern, de gen flex-wrap iar de fiecare data cand incercam sa generez un design nou, lucrul devenea un cosmar.
Recent am gasit o alta solutie, https://github.com/puppeteer/puppeteer. Aici html,css,js scris primesti un PDF asa cum il vezi in Chrome, din cauza ca puppeteer foloseste chrome,chromium. Rezultatul este ideal, doar ca ma intreb daca este ok sa-l folosesc pentru aceasta sarcina? Tinand cont ca chrome consuma CPU si RAM mult, as putea avea crash la nu moment dat pe aplicatie. Am inteles ca este folosit mai mult pentru testari.
Pentru conversie PDF folosesc Chrome controlat prin Puppeteer. Nu este indicat sa il rulezi pe acelasi server unde ai si aplicatia din motive de stabilitate. Eu il rulez serverless in Google Cloud Function si functioneaza ok. Alta varianta este sa il pui pe un server separat sau sa folosesti un serviciu platit, de exemplu https://pdfswitch.io/.
Atentie cu serviciile gen pdfswitch (nu am gasit date la ei pe site). Daca clientul e din RO ar fi bine ca datele sa nu paraseasca RO sau EU. Unii au deschis servere in EU special dupa GDPR (mailgun de ex). Sigur, nu iti garanteaza nimeni ce se intampla cu datele alea, poate transfera meta despre ele, poate un rouge employee, dar macar sa poti spune ca ai luat toate masurile posibile.
Uite încă o idee: folosește tot Chorme în spate (nu cred ca există o altă soluție daca vrei suport pentru CSS modern): https://thecodingmachine.github.io/gotenberg/
Rulând în Docker e izolat de restul sistemului, ceea ce e un plus.
Usor offtopic, dar chiar recent am avut un proiect de generat PDF-uri cu oferte comerciale dintr-un app și am folosit React PDF, care e bazat pe PDFKit (js/node).
https://thecodingmachine.github.io/gotenberg/ este ceea ce cauti, cum ti-a mai recomandat @redecs
E perfect ca e izolat in docker, poti sa folosesti usor si in k8s, poti sa-i dai imagini, fonturi, tot ce vrei, si iti scoate PDF-urile ok. Daca folosesti in k8s vezi sa-i aloci resurse suficiente (256Mi ram, 300m CPU), altfel va raspunde mai greu la conversii in paralel.