Jak generovat PDF z HTML

Už od pátku hledám ideální řešení pro převod HTML do PDF pomocí PHP. Internet je doslova přeplněný všemožnými open-source knihovnami, které ovšem nefungují vždy tak, jak bych si dokázal představit. Základním problémem bývá především čeština, kterou jde do knihoven dostávat jen velmi těžko. Nemenší problém je dále css, u kterého jsem ztroskotal už u základní vlastnosti jako je 100% výška elementu (height: 100%;). Zmiňovat snad ani nemusím absenci css3. V pořadí poslední věc, kterou jsem postrádal u všech knihoven byl javascript. Ten není v žádném případě priorita, je ale nesporným plusem. Testoval jsem postupně 3 knihovny.

Jako první jsem zkusil DOMPDF. Ze všech knihoven je rozhodně nejvíc user-friendly, ale bohužel bez podpory UTF-8. Najít se dají rádoby rozšíření, ale 100% funkčnosti se mi nepodařilo dosáhnout. Co mě od knihovny definitivně odradilo je špatná správa paměti. Jednoduchou 4×5 tabulku knihovna uloží jako 12 – 16 MB veliké PDF. K tomu si zapůjčí cca 4 GB operační paměti. 20 stránkové PDF má pak kolem 1,5 GB.

Další dvě knihovny TCPDF a MPDF jsem odstřelil hlavně kvůli těžkopádnosti. Generovat PDF zmanenalo vzít si na týden dovolenou a prostudovat nekonečné dokumentace. Brr, by nešlo. :-/

Skončil jsem u utility WkHtmlToPdf, která PDF generuje pomocí WebKitu, což je vykreslující jádro, které používá např. Apple Safari nebo Google Chrome. Velkým mínusem je ale to, že se na server musí doinstalovat, takže pokud máte stránky na komerčním webhostingu, máte (pravděpodobně) smůlu. Výhod má ale tolik, že tuto nevýhodu hravě přebijou. Nenarazil jsem na problémy s kódováním, skvěle vykresluje css (včetně css3!), podporuje javascript a rendrovat můžete lokální soubory, textové vstupy ale i internetové stránky. Jedna stránka formátovaného textu v odstínech šedi má pak cca 4 kB. Pro instalaci na server doporučuji postupovat podle tohoto návodu. Pro generování pomocí PHP používám tuto knihovnu.

Snad někomu svými zkušenostmi ušetřím cenný čas 😉

4 komentáře u „Jak generovat PDF z HTML

Napsat komentář