Jak vytvořit PDF dokument v PHP

Formát PDF si získává svou popularitu už více než 20 let, a to hlavně díky zachování stejného vzhedu a formátování na různych systémech a zařízeních. V IT světě se s ním můžeme setkat při statických prezentacích, emailových přílohách nebo například při generování faktur.

Poslední zmíněné použití se řeší ve většině webových aplikací, zejmána pak eshopech, kde je třeba z užívatelských dat vygenerovat faktury s určitým vzhledem a obsahem. Technicky řečeno transformovat HTML kód na PDF dokument. Tuto transformaci zajišťují PHP knihovny, kterých je na trhu ale velké množství. V článku si představíme vybranou knihovnu, kterou u nás používáme v některých webových projektech a je možné ji volně stáhnout z internetu. Dále si ukážeme, jak ji nainstalovat a jak s ní pracovat.

Řeč je o knihovně mPDF, která patří mezi ty známější a hojně používané. Založena je na starších knihovnách FPDF a HTML2FPDF s řadou vylepšení.

Knihovna mPDF

Jak už jsme zmínili výše, hlavní funkcí této PHP knihovny je konverze HTML kódu spolu s CSS styly do PDF dokumentu. Oproti například HTML2FPDF je pomalejší a vytváří větší soubory, ale na druhou stranu má větší podporu pro CSS styly a větší množství užitečných funkcí, což je také důvod, proč ji upřednostňujeme.  S mPDF je možné vytvořit bohaté PDF dokumenty s hlavičkou a patičkou včetně fotografií, ochranou heslem, vodoznaky, číslováním stránek, atd. Dalším podstatný argumentem, proč upřednostnit tuto knihovnu před ostatními, je, že je aktualizovaná a podoruje i nejnovější verze PHP.

mPDF Installation and Setup

Odporúčaný spůsob instalace je uvedený na oficiálnej stránke a to cez composer

composer require mpdf/mpdf

Po tomhle kroku máte úspěšně nainstalovaný mPDF ve vašem webovém projektu.

Inicializace mPDF a první příklad

require_once __DIR__ . '/vendor/autoload.php';

$mpdf = new \Mpdf\Mpdf();
$mpdf->WriteHTML('<h1>Hello world!</h1>');
$mpdf->Output();

V příkladu můžete vidět po inicializaci knihovny ještě tři další příkazy. První vytvoří nový objekt knihovny, který se vytváří vždy před prací s knihovnou. Druhý příkaz požaduje HTML kód, který bude představovat obsah našeho PDF dokumentu. Třetí příkaz nabídne uživateli stažitelné PDF, případně ho přímo otevře v prohlížeči.

Složitější použití

Dokumentace k mPDF popisuje dostupné HTML tagy pro konverzi, takže víme, že by neměl být problém s běžnými tagy jako jsou například div, tabulky, hlavičky, různé seznamy nebo text. Programátoři mají rádi, když je HTML kód a CSS design v odlišných souborech. Tento princip není potřeba rušit, právě naopak, je možné jej plně využít v mPDF.

Představme si, že máme všechny styly v "stylesheet.css" a chceme je zahrnout do PDF. Použijeme stejnou funkci WriteHTML() jako v prvním příkladě, avšak přidáme do ní další parametr. Tento druhý parametr bude říkat, jak bude obsah prvního parametru brán. Například pokud zadáme číslo 1, znamená to, že prvním parametrem je CSS skript. Číslem 2 definujeme, že vkládáme pouze HTML kód. Pro 0, která je i defaultní, říkáme, že do funkce vkládáme HTML dokument obsahující kromě HTML kódu i CSS skripty.

V příkladu si ukážeme přidání CSS souboru do PDF a hned nato jeho doplnění o jednoduchý HTML kód.

$mpdf = new \Mpdf\Mpdf();
$stylesheet = file_get_contents('stylesheet.css');
$mpdf->WriteHTML($stylesheet, 1);
$mpdf->WriteHTML('<h1>Hello world!</h1><p>How are you?</p>', 2);
$mpdf->Output();

Pokud je třeba definovat specifičtější parametry jako kódování textu nebo formát strany, přidáváme je do konstruktoru knihovny, tj. do příkazu $mpdf = new \Mpdf\Mpdf() , například:

$mpdf = new \Mpdf\Mpdf([
    'mode' => 'utf-8',
    'format' => 'A5',
    'orientation' => 'L'
]);

Příklad některých základných parametrů a jejich možných hodnot najdete na stránce https://mpdf.github.io/reference/mpdf-functions/construct.html

Nám se práce s mPDF při vývoji webů a e-shopů velmi osvědčila a doporučujeme ji používat. Jelikož ale podobných knihoven existuje víc, je jen na vás, kterou si vyberete a naučíte se ji používat.  Mezi další známé knihovny s touto funkcí patří např. WkHtmlToPdf, HTML2PDF, TCPDF nebo dompdf.


Mohlo by se vám líbit