PHP skript na automatické generování PDF souborů

MyEgo.cz

home foto blogy mywindows.cz kontakt

PHP skript na automatické generování PDF souborů

PHP 01.05.04
adobe acrobat

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].


Komentáře

  1. 1 dgx 01.05.04, 01:05:26
    FB

    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

  2. 2 Radek Hulán 01.05.04, 01:05:47
    FB

    [1] jo, jo, oslava prací (a novým logem) :D

  3. 3 JohnyB 01.05.04, 12:05:23
    FB

    Koukam Radku, ze ty vazne nemas co na praci :) Ne, samozrejme pochvala za odvedenou praci, jen me prekvalupe, co vsechno stihas delat...

  4. 4 llook 02.05.04, 11:05:33
    FB

    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.

  5. 5 David 03.05.04, 12:05:21
    FB

    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ě: č, ř, ů, ě.

  6. 6 Radek Hulán 03.05.04, 12:05:27
    FB

    [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ě..

  7. 7 David 03.05.04, 12:05:40
    FB

    [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.

  8. 8 Radek Hulán 03.05.04, 02:05:29
    FB

    [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

  9. 9 David 03.05.04, 02:05:51
    FB

    [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é.

  10. 10 Kuba 25.10.04, 12:10:45
    FB

    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

  11. 11 Palmar 15.02.05, 12:02:36
    FB

    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.

  12. 12 Radek Hulán 15.02.05, 12:02:49
    FB

    [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..

  13. 13 Honza 10.04.05, 02:04:07
    FB

    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

  14. 14 ego 01.06.05, 03:06:46
    FB

    [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.

  15. 15 Michal Pospiech 19.10.05, 02:10:32
    FB

    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

  16. 16 --==[FReeZ]==-- 07.09.06, 03:09:02
    FB

    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.