PHP - tvorba PDF dokumentov s diakritikou

PDF dokument 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.

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)
PDF dokument v Adobe Reader (WinXP) PDF dokument v KPDF (FC6)

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.

11.03.2007 10:49

PaBi3

Programovanie