PHP skript na automatické generování PDF souborů
Looging for English version of this article?
Na http://www.fpdf.org/ je dostupná třída pro generování PDF souborů v PHP. Nicméně, jedná se o dost "syrový" produkt. Není možné jen tak jednoduše vzít XHTML soubor, poslat jej do toho, a vytvořit PDF.
Z tohoto důvodu jsem k této 40kB třídě vytvořil další 2 třídy (cca 15kB), které umožňují generovat PDF z XHTML komfortně, za pomocí 2 řádků v PHP!
Příklad:
Základem je třída createPDF. Její použití je nejjednodušší ilustrovat na příkladu:
$pdf =& new createPDF( $_POST['html'], // html text to publish $_POST['title'], // article title $_POST['url'], // article URL $_POST['author'], // author name time() ); $pdf->http='http://localhost/html2pdf/'; $pdf->directory='/www/html2pdf/'; $pdf->delete=10; $pdf->useiconv=false; $pdf->run();
Chcete si vyzkoušet převést text do PDF online?
Další možné způsoby použití této třídy, a její parametry, naleznete přímo v dobře komentovaném zdrojovém souboru html2pdf.php, nemá smysl je zde opisovat.
V souboru index.php naleznete jednoduché použití této třídy, uvedený příklad převede text vložený do uživatelem (do pole textarea), na PDF.
Zvláště upozorňuji na nutnost nastavení proměnných http a directory, udávají URI a lokální cestu, kde se bude vytvářet dočasný soubor (problém s tím měl Petr Weida, About, díky za upozornění). Rovněž, podporovány nejsou GIF soubory (licenční problémy, PHP třída pro PDF je nepodporuje).
$pdf->http='http://localhost/html2pdf/'; $pdf->directory='/www/html2pdf/';
Co tato třída umí?
- podpora pro tučné písmo, italiku, podtržené písmo.
- podpora pro nadpisy <h1>, <h2>, <h3> a <h4>.
- podpora pro vkládané obrázky, i linky na obrázky.
- jednoduchá podpora pro tabulky .
- plná podpora pry seznamy <li>.
- podpora pro <blockquote>.
- podpora pro pseudo-tagy <red>, <blue>.
- podpora pro <pre> (zobrazí se fontem Courier).
- podpora pro <br> a <p>.
- název exportovaného PDF souboru je sestaven ze znaků s ořezanou diakritikou, místo mezer jsou pomlčky.
- je možné nastavit, po jaké periodě se vymažou veškeré dočasné soubory (implicitně 60 minut).
- vytváření hlavičky dokumentu, s názvem článku, autorem, datem publikace.
- vytváření patičky dokumentu s číslem stránky a celkovým počtem stránek.
- podpora pro iconv, a převody kódování XHTML souboru.
- dodané fonty Times a Courier, v kódování CP1250.
Download:
Tento příklad, včetně třídy createPDF, a třídy FPDF, si můžete stáhnout zde.
Fonty
Pokud potřebujete jiné fonty, podívejte se na návod na jejich konverzi z TTF na www.fpdf.org.
Příklad?
Můžete si exportovat do PDF přímo tento článek. Klikněte na [Exports] pod článkem, a poté na [PDF].
je to pěkné, šikovné, ale racionálně vyžitelné jen velmi zřídka....
P.S. Radku, koukám že taky slavíte vstup s přítelem komplem :D
[1] jo, jo, oslava prací (a novým logem) :D
Koukam Radku, ze ty vazne nemas co na praci :) Ne, samozrejme pochvala za odvedenou praci, jen me prekvalupe, co vsechno stihas delat...
Jednoduchá podpora pro tabulky? Myslím, že by kolikrát vypadala líp žádná podpora.
Třeba http://myego.cz/acti... mi nepříjde dvakrát přehledné. To už bych si víc početl v lynxu: http://www.delorie.com/web/...
Ale jinak dobrý začátek.
Ahoj, zkoušel jsem si převést textík z Tvé stránky http://myego.cz/othe... na PDF (prostě jsem jen stisknul talčítko "Generate PDF"), a vypadla česká nabodeníčka. Konkrétně: č, ř, ů, ě.
[5] rád bych to opravil, ale, mě to funguje, převáděl jsem text
Ahoj, zkoušel jsem si převést textík z Tvé stránky http://myego.cz/othe... na PDF (prostě jsem jen stisknul talčítko "Generate PDF"), a vypadla česká nabodeníčka. Konkrétně: č, ř, ů, ě. a naprosto v pohodě..
[6] Nevím, možná je zrada u mne při zobrazení PDF. Zkusil jsem převést následující text: <p>aábcčdďeéěfghiíjklmnňoópqrřsštťuúůvwxyýzž</p>
<p>AÁBCČDĎEÉĚFGHIÍJKLMNŇOÓPQRŘSŠTŤUÚŮVWXYÝZŽ</p>
Vypadlo č, ď, ň, ř, ť, ů a jejich "velké" verze. Mám XP a IE6. Jestli chceš, mohu Ti večer poslat výsledné PDF.
[7] zkusil jsem ten příklad, a je to, u mě, dobře. Celé. Absolutně věřím, že je u tebe problém, a děkuji za zprávu, ale nechápu, jak jej řešit, když jej nevidím.
Možná - v tom PDF NEJSOU včleněné fonty a jsou generované v CP1250 (Windows). Na Linuxu to tudíž fungovat NEBUDE. (iso-8859-2). Není toto problém? Umím tam dám i embedded fonty, ale pak to nemá 2kB, ale 152kB... 8O
[8] Proto mne to mate. V práci (zrovna teď) jsem na Windowsí XP platformě, fontíky (Courier New, Times New Roman) mám. Takže nevím. Vyskytuje-li se tahle chybka jen v jednom případě, těžko ji odchytit.
Přibalovat kvůli tomu fonty a nafukovat PDF je, dle mého, zbytečné.
ahojda. lidi mam stejny problem.. zkusil jsem je pro test a tez mi nefunguji hacky u zminovanych pismen mam Win XP. a IE 6. nejde š,ř,č a dalšíllll. kdyby nekdo vedel kde je chyba. rad bych radu uvital
Chtěl bych se zeptat, jak se generují fonty, které nezabírají tolik místa. Vygeneroval jsem si font Tahomy a když vytvořím pdf, tak má 400kB(!) Tedy nic moc použitelného. Ale nevím jak to smrsknout na těch použitelných pár kB.
[11] je potřeba tam ty fonty nevkládat embeded, ale jen metriky, poté má PDF jen 10KB, jako zde, popřípadě tam dát jen CP1250, pak má PDF jen 150KB, a funguje kdekoliv..
mam dotaz potreboval bych vygenerovat pdf sobubor a posleze ho rovnou odeslat v priloze v emailu. Odeslani prilohy mi nedela problem ani vygenerovani pdf souboru jen nevim jak to vse automaticky skloubit. Dekuji
[13] Zkus si před generováním PDF zapnout output buffering a okamžitě po něm ho zase vypnout. Do mailu pak přibal obsah output bufferu.
Lidi, prosím, nevíte jak kompletně změnit strukturu? Potřebuji generovat faktury, takže smazat ten rámeček apod., ale nevím kde to tam najdu. Nevíte někdo jak na to? Díky Michal
Sice už článek není na první stránce mezi nejnovějšími, ale uvedená třída je skutečně geniální, jednoduššeji už snad PDFka v PHP vygenerovat nelze.