Egoblog.cz - Petr Kobelka

Generování pdf s mpdf - obsah

Při procesech, kde výstupem byl pdf soubor jsem měl velké komplikace s obsahem, který se generoval tak, že druhá, třetí úroveň se jako kdyby přepisovaly. V postu najdete řešení tohoto problému.


Webdesign | Komentáře (0) | Shlédnuto 1389 × | Vloženo: 3. července 2013

Základní informace o knihovně

Řešení je pro knihovnu mPdf 5.6.1, ale s velkou pravděpodobností půjde aplikovat i do dřívějších verzí (ovšem za to neručím, nezkoumal jsem je).

Základní problém as mpdf

Základní problém knihovny spočívá v tom, že nemůžete nastavit odsazení jednotlivých řádků v obsahu. Nelze použít žádné vestavěné funkce, ani kaskádove styly (CSS). Musel jsem tedy hledat na ´diskuzích na zahraničních serverech, kde se několik řešení objevilo.

Jejich kombinací jsem dostal své vytoužené, které generuje obsah přesně takový, jaký ho chci. Jediný problém je v tom, že musíte sáhnout přímo do PHP kódu. Bez toho se můžete stavět na hlavu, ale nepohnete s tím.

Co je potřeba editovat v PHP?

Najděte si třídu tocontents(). Je obsažena v adresáři /classes/tocontents.php. Jako základ cesty beru adfresář, kde máte nahránu knihovnu mPdf.

V této třídě jděte na řádek +-250

je tam kód, který budete editovat.

if ($t['toc_id']==='_mpdf_all' || $t['toc_id']===$toc_id ) {
    $tpgno = $this->mpdf->docPageNum($t['p']);
    $lineheightcorr = max(0,2-$t['l']); // mPDF 5.4.15
    //Offset
    $level=$t['l'];

Konkrétně se o odsazení jednotlivých částí stará proměnná $lineheightcorr a to tím způsobem, že se její hodnota připočte  velikosti písma. $t['l'] je hloubka yano5en9 a velikost je v milimetrech - to nen9 moc, co?

Řešení nalezené na webu doporučuje upravit řádek o multiplikaci konstantou např.:

$lineheightcorr = (2-$t['l'])*1.7;

Výsledek byl pro mě ale nedostačující. První úroveň obsahu byla sice super, ale druhá, třetí a další jsou zase slité. Upravil jsem tedy tuto proměnnou, aby měla základ vyšší než 2 pro rozhodování odsazení.

Moje řešení

$lineheightcorr = max(0,5-$t['l']) * 0.75;

Vidíte, že jsem zvýšil 2 na 5 ve funkci MAX() a multiplikuji ještě hodnotou 0.75. Výsledek odpovídá memu požadavku. Sami si v případě generování TOC - obsahu pohrajte právě s hodnotou multiplikace, případně při vyšším počtu zanoření můžete zvýšit číslo 5, třeba na 8, ale to už je na vašem experimentu.

Pomohlo Vám to? Nechte mi tu komentář :-)

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.