Egoblog.cz - Petr Kobelka

Jak na Nette a PDF

Tento krátký návod se týká verze Nette 2.1 v kombinaci s knihovnou MPDF, konkrétně verzi 5.7.


PHP | Komentáře (0) | Shlédnuto 4509 × | Vloženo: 7. srpna 2014

Tento post předpokládá, že již z Nette umíste slespoň trochu pracovat, víte co jsou to šablony a presentery a tak dále :-) Předpokládám dále, že používáte RobotLoader, v opačném případě nesmíte zapomenout přilinkovat knihovnu mpdf.

Je obvyklé knihovny třetích stran umístit do adresáře vendor/others. Pokud používáte Nette skeleton, pak je adresář na cestě /vendor/others/.

Průzkum trhu s Nette a PDF

Když jsem hledal po internetu nástroje a možnosti, jak správně generovat výstup do PDF v prostředí Nette, narazil jsem na knihovnu PDF Response. Ideální se mi jevila ale jen do chvíle, kdy jsem potřeboval změnit font. Žádná metoda na nastavení fontu nebyla k nalezení. Díky tomuto jsem se vrátil zpátky ke kořenu a k "čistému" mpdf na kterém zmíněná knihovna staví.

Co k tomu potřebujeme?

Vlastně kromě balíčku Nette 2.1 a MPDF nepotřebujete nic dalšího. Kde to všechno stáhnete? Zde: Nette a MPDF kihovnu.

Celý kód budete psát do metody presenteru ve které chcete, aby byl generován výstup.

Začneme s Nette a novou šablonou

Jako první krok si vytvořte latte šablonu, která bude tvořit obsah PDF souboru. MPDF krásně kloubí HTML dokument s výstupem do pdf a tak se nemusíte bát, že by tam byl nějaký problém. Sice drobné mouchy existují, ale buď jdou jednoduše obejít, nebo se s nimi dokonce ani nesetkáte. Záleží jen na vaší náročnosti.

Nyní si připravíme a zkompilujeme šablonu. To můžete provést např. následujícím kódem:

$tpl = new Nette\Templating\FileTemplate(dirname(__DIR__).'/../templates/Pdf/pdf.latte');
$tpl->registerFilter(new Nette\Latte\Engine);
$tpl->registerHelperLoader('Nette\Templating\Helpers::loader');
$tpl->[PROMENNA] = [HODNOTA];
$tpl->[PROMENNA] = [HODNOTA];
$tpl->[PROMENNA] = [HODNOTA];

Co je výše napsáno? Podíváme se na to.

Na řádku 1 vytvořím objekt šablony pro soubor PDF a nastavím cestu k šabloně.

Na řádku 2 aktivuji šablonu.

Na řádku 3 aktivuji helpery, abych mohl data v šabloně jednoduše formátovat a vykreslovat.

Řádek 4 a dále - plníte šablonu daty,která tam chcete mít.

MPDF v presenteru Nette

Nejdříve uvedu jednoduchý kód, který následně popíšu:

$pdf = new \mPDF('', 'A4', 10, 'arial');
$pdf->ignore_invalid_utf8 = true;
$pdf->setFooter('|'.date('Y')." © www.egoblog.com|"); // footer
$pdf->WriteHTML($tpl);
$pdfFile = $pdf->Output('nazev-souboru.pdf', 'S');

Na prvním řádku je inicializace třídy a požadovaným nastavením. V mém případě chci výstup na papír velikosti A4, s písmem Arial o velikosti 10pt.

Na druhém řádku ignoruji chybné utf-8 znaky (občas na něco takového narazím).

Na třetím řádku dám dokumentu hezkou patičku s informací o roce tisku a s URL adresou.

Ve čtvrtém řádku vložím do PDF soubor výsledek Nette šablony s daty.

Poslední řádek mi naplní proměnnou $pdfFile výstupem - tedy výsledným PDF dokumentem. Můžete použít i jiné přepínače, než je 'S' a tím ovlivnit chování knihovny. Např. jde nabídnout dokument ke stažení, zobrazit jej v prohlížeči (pokud to prohlížeč umí) a další. Díky přepínači 'S' můžu výstup použít jako přílohu e-mailu ;-)

Více informací o knihovně MPDF najdetete v dokumentaci. Ta obsahuje jednak referenční manuál, ale i příklady, jak dokument generovat a upozornění na možné problémy.

Podobné články jako "Jak na Nette a PDF"

Petr Kobelka | Egoblog.cz | Tvorba www stránek - www.petrkobelka.cz

Petr Kobelka
Autor je zkušeným web developerem a programátorem s více než 10 letými zkušenostmi. Pracuje jako programátor pro známou Olomouckou společnost zabývající se tvorbou internetových a intranetových řešení. Spolu se zaměstnáním pracuje na volné noze a zabývá se tvorbou internetových stránek. Ve volném čase rád fotí, jezdí na kole, plave a cestuje.

Komentáře

E-mail je potřeba pouze pro vygenerování Gravataru!

Oups, žádné komentáře? Buďtě první !!!

Blog píše Petr Kobelka

Petr Kobelka - egoblog.cz

Žádám všechny, kteří mají zájem vkládat komentáře, aby se řídili pravidly NETikety. Komentáře, porušující tato pravidla můžou být bez varování smazány.