© 2013 All rights reserved.
9

FPdf: jak na české znaky

Jak jednoduše používat české znaky v knihovně FPdf pro generování pdf soborů.

Knihovna FPdf je asi nejznámější a nejlepší knihovna pro generování PDF souborů pomocí PHP. Tato knihovna je volně ke stažení na adrese fpdf.org.

Postup tady popsaný je dostupný i v dokumentaci knihovny, bohužel pouze anglicky, a asi i proto narážím dost často na tuto otázku na diskusních fórech.

Po stažení archivu z webu FPDF dostanete samotnou knihovnu jako soubor fpdf.php a navíc se ve staženém archivu nachází adresář font.

Adresář font obsahuje několik základních písem, které je možné pro generované PDF používat a přepínat se mezi nimi.

Samozřejmě není myšleno na všechny znaky a ani jeden z obsažených fontů neobsahuje znaky české abecedy. Pro podporu českých znaků je nutné si vygenerovat vlastní písmo.

Generovat vlastní písmo můžete přímo pomocí přiložené třídy MakeFont, nebo jej vygenerovat na internetu například na adrese fpdf.fruit-lab.de (tato, druhá, možnost je jednodušší).

Konvertor je schopný vygenerovat písmo použitelné pro FPDF knihovnu z jakéhokoli TTF písma. TTF písma jsou volně ke stažení na internetu nebo například v adresáři /windows/fonts (nevím jak je to s právy písem ve Windowsech).

Do formuláře stačí potom vybrat cestu k písmu na disku a vybrat správné kódování, které budete dále pro generování dokumentu používat. Bohužel třída nenabízí práci s UTF-8.

Po vygenerování dostanete několik souborů, z nichž všechny jsou důležité a všechny budete, pro správné použití písma, potřebovat:

  • .php
  • .afm
  • .t1a
  • .z

Všechny tyto soubory je nutné stáhnout a nakopírovat do adresáře font. Nyní můžete toto písmo směle používat:

fpdf

Fpdf vs UTF-8

Bohužel knihovna FPdf nepodporuje UTF-8, a pro toto kódování budete muset řetězec převádět například pomocí Iconv:

Comments are closed for this page

Mam dojem ze tato knihovna neni jiz nadale vyvijena.Proto doporucuji pouzivat modul obsazeny v Zend frameworku s nazvem Zend_Pdf. umi pracovat s utf kodovanim, neni nutne nic generovat, jen pripojit soubor ttf s ceskymi znaky.

Mas pravdu, ovsem Fpdf je stale hodne vyuzivana a zend nemusi byt mozne pouzivat vzdy.
Ale jinak souhlasim

Dost dobre nevim jak jsi myslel, ze neni mozne pouzivat Zend vzdy? ZF je neinvazivni, je mozne pouzit pouze a jen Zend_Pdf… do budoucna bude vyvijen a nebude zastaravat jako FPDF

Ano, to je zbozne prani ZF fanatiku, Zend vzdy, vsude a pokud mozno na veky.

Zend_Pdf má hlavně jednu nevýhodu neobsahuje žádný třídy pro práci s tabulkama nebo něco na způsob cellů v fpdf, nedokáže počítat délky textů, automatické vytváření stránek když mi má objekt(text) přetékat a prostě spoustu věcí si tam člověk musí udělat sám (což momentálně v musím udělat a jestli to půjde tak to vydám i pod nějakou volnou licencí :))

Podle Vašeho návodu se mi konečně podařilo dostat do fPDF češtinu, bohužel všechna písmena jsou nalepená vedle sebe, některé širší písmena se i překrývají (vytáhnul jsem Times Roman a Helveticu z win Vista).
Pravděpodobně bude chyba ve vygenerovaném písmu pro fPDF (fpdf.fruit-lab.de) – mohl by mi někdo poradit, jak tento problém odstranit?
Děkuji.

Dobry den,
pokud mate zajem, napiste mi na email, a ja vam poslu vygenerovane pismo vcetne ukazky pouziti.

Martin

Jo, akorát problém je, že takhle vygenerované PDF má asi 0,5 MB, protože to tam strká celý font.

Takže nejlepší je asi stáhnout TFPDF a použít UTF-8 písmo.

Ahoj, pro ty, kdo nechteji pouzivat Zend framwork a chteli by radeji i v 2017 pouzit FPDF, tak aktualni navod:

Konverze fontu na linku v navodu mi nefungovala (asi stary odkaz), v pohode to ale jede zde:
http://www.fpdf.org/makefont/

Testovano na FPDF v1.81 (2015-12-20).
Testoval jsem font Open Sans stazeny z Google Fonts (Regular a Bold) a zafungoval tento postup:

1 – konverze fontu viz link (v mem pripade zvoleno cp1250 ve formulari tj. pro konverzi z Windows-1250 viz nize), nabidne to pouze 2 soubory a to *.php a *.z, oba stahnout a umistit do slozky font s pluginem.

2 – vytvorit funkci pro konverzi z Windows-1250 do UTF-8 (to je volitelne, ale ja si ji napsal, abych usetril par znaku v kodu a porad to vsechno neprepisoval jak pitomec):
function pdftext($text) {
return iconv(“UTF-8″,”WINDOWS-1250″,$text);
}

3 – do tvorby pdf pak resit obdobnym zpusobem:

$pdf->AddFont(‘open_sans’, ”, ‘OpenSans-Regular.php’); // pracovni nazev fontu a nazev php souboru vlozeny do slozky font
$pdf->AddFont(‘open_sans_b’, ”, ‘OpenSans-Bold.php’); // dtto pro bold
$pdf->SetFont(‘open_sans’,”,16);
$pdf->Cell(100,10,pdftext(Čeština),’B’,0,’L’);
$pdf->SetFont(‘open_sans_b’,”,16);
$pdf->Cell(100,10,pdftext(je tučná),’B’,1,’L’);

Krásně frčí čeština se všemi našimi šílenými klikyháky…
Dokonce i kdyz mam v headeru UTF-8, jelikoz zrovna v aktualnim projektu uz mam header vygenerovany a nemuzu ho prepsat na 1250 jako v puvodnim navodu.

Good luck

About
Hi, i am programmer from the Czech Republic. I love web development (Ruby, Ruby on Rails, PHP, Nette) and iOS development (Objective-C, Cocoa).
To cooperate, here is my phone:
+420 608 836