Vytvoriť PDF dokument s diakritikou nie je veľký problém, keď viete zvoliť to
správne písmo a kódovanie. Pre tvorbu nepoužívam vstavanú PDF knižnicu ale iba
skvelú PHP triedu – FPDF.
Prináša mnoho výhod ako voľba rozmerov, určenie formátu stránky, odsadenia,
záhlavie a spodok dokumentu, automatické zalamovanie stránok a riadkov,
centrovanie textu, podpora obrázkov JPEG a PNG, farby pre rôzne elementy,
hypertextové odkazy, TrueType, Type1 a podpora kódovaní,
kompresia dokumentu (vyžaduje Zlib knižnicu). Osobne si pre PDF volím písmo Trebuchet MS. Je možné použiť aj krajšie
písmo, napr. Palatino Linotype ale treba myslieť aj na veľkosť
dokumentu. S Trebuchet MS bude mať dokument niečo cez 300kB. S Palatino Linotype
vyše 1,2MB. Postup osadenia TrueType písma do PDF dokumentu je celkom dlhý proces. Najprv
je potrebné z .ttf súboru vytvoriť metrický súbor .afm.
Pomocou .afm súboru ďalej vygenerovať definičný PHP súbor. Posledným krokom je prekódovanie vstupu napr. z
UTF-8 (zvolíte vaše kódovanie vstupných dát) do cp1250.
PHP - tvorba PDF dokumentov s diakritikou
PHP - tvorba PDF dokumentov s diakritikou
Tvorba metrického súboru
Pre vytvorenie .afm súboru je nutné stiahnúť si utilitu
ttf2pt1.
Používatelia Windows ju stiahnú tu.
Zapnite si príkazový riadok a napíšte nasledovné:
ttf2pt1 -a c:\windows\fonts\trebuc.ttf trebuc ttf2pt1 -a c:\windows\fonts\trebucbd.ttf trebucbd ttf2pt1 -a c:\windows\fonts\trebucbi.ttf trebucbi ttf2pt1 -a c:\windows\fonts\trebucit.ttf trebucit
Tvorba definičného PHP súboru
Pokiaľ ste si ešte nestiahli FPDF, stiahnite ho.
V zložke font/makefont/ sa nachádza súbor makefont.php, ktorý vytvorí definičný PHP súbor
funkciou MakeFont().
Vytvorte nový PHP súbor s obsahom:
<?php
include_once('font/makefont/makefont.php');
MakeFont('c:\windows\fonts\trebuc.ttf','trebuc.afm','cp1250');
MakeFont('c:\windows\fonts\trebucbd.ttf','trebucbd.afm','cp1250');
MakeFont('c:\windows\fonts\trebucbi.ttf','trebucbi.afm','cp1250');
MakeFont('c:\windows\fonts\trebucit.ttf','trebucit.afm','cp1250');
?>
Po ukončení skriptu sa vyskytnú aj varovania o chýbajúcich znakoch. Ignorujte ich a všimnite si radšej 8 nových súborov. 4 s koncovkou .z a ďalšie 4 s koncovkou .php. Ich názov sa začína na trebuc… Všetky nakopírujte do zložky font/.
Tvorba PDF dokumentu
Dávajte pozor na kódovanie skriptu. Ja používam iba UTF-8, takže budem potrebovať PHP rozšírenie iconv, aby som mohol prekódovať vstup z UTF-8 do cp1250.
<?php
define('FPDF_FONTPATH','font/');
require('fpdf.php');
// reťazec, ktorý má byť v PDF dokumente
$text = 'Veríte, že tento PDF dokument dokáže zobraziť základnú diakritiku: ľščťžýáíéúäô';
// prekódovať obsah do cp1250
$text = iconv('UTF-8','CP1250',$text);
// vytvoriť novú inštanciu FPDF
$pdf = new FPDF();
// pridať písma
$pdf->AddFont('trebuc','','trebuc.php');
$pdf->AddFont('trebuc','B','trebucbd.php');
$pdf->AddFont('trebuc','I','trebucit.php');
$pdf->AddFont('trebuc','BI','trebucbi.php');
// vytvoriť PDF dokument
$pdf->AddPage();
$pdf->SetFont('trebuc','',11);
$pdf->MultiCell(0,5,$text);
$pdf->Output();
?>
Výsledok
| Windows XP (Adobe Reader) | Fedora Core 6 (KPDF) |
|---|---|
![]() |
![]() |
Výsledný PDF dokument si stiahnete tu. PDF generované na tejto stránke ešte nefungujú s diakritikou, ale pripravujem novú verziu PDF exportu. Príklad si môžete prezrieť tu.




![Hlasová verzia [Pre internetový prehliadač Opera] Voice](modules/items/voice.png)
Komentáre
Data z DB nijako nekonvertujem, jednoducho vyuzivam plne UTF-8, a taketo subory s unikodom prehliada Adobe Reader uz po niekolko rokov, takze nemam obavy zeby sa niekomu zle zobrazil obsah. S diakritikou nemam vonkoncom ziaden problem !!!
K dokonalosti mozno doviest cokolvek, napriklad predpoklad ze text je vzdy v nejakom konkretnom jazyku konkretnej krajiny, takze si mozno vytvorit XY suborov s cisto znakmi danej krajiny ... viem ze zijeme v dobe rychleho netu ktoremu je pomaly jedno ci stahujem 100kB alebo 1MB ... ale pri stovkach PDF dokumentov sa uz oplati setrit s priestorom.
hoj. mohol by si ten unikodovy ttf font poslat? resp povedat ako ho vytvorim. zrejme meno fontu. dikes
- bude poznat fonty arial, tahoma, verdana, times new roman
- pretransformuje HTML priamo do PDF
- php5
Potrebujem teda napriklad zip-ko, ktore ked rozbalim, bude to fungovat.
Dakujem.
dík za článek, ale stále dostávám hlášku o volání nedefinované funkce AddFont(). Nevíte, prosím, někdo z Vás, kde dělám chybu ?
Děkuji Standa
ahoj, prosim ta, podarilo sa ti nejako vyriesit fpdf spolu s utf? mne bezi aj azbuka, ale robi to problemi s multicell. tebe to funguje? mozes sa prosim podelit s riesenim?
dik