T&R splet blog o spletnih storitvah. Razgaljamo tehnologijo!

reference spletnih strani
9th July

PHP – Kreiranje PDF datoteke – DOMPDF – TCPDF

Kreiranje PDF datotek v PHP svetu ni nič novega, vendar pa na forumih opažam, da se večkrat zaplete pri generiranju PDF-jev z UTF-8 podporo. Kot smo nekaj časa nazaj pogledali kako kreirati Excel z UTF-8 podporo si bomo danes ogledali še kako kreirati PDF datoteko z UTF-8 podporo.

Na internetnu obstaja več rešitev kako kreirati PDF. Od PHP PDF funkcij, do online projektov HTML to PDF (uporabo za ne UTF-8 spletne strani), knjižnic kot je TCPDF (ki že podpira UTF-8 način) in DOMPDF. Zakaj ne bi uporabili TCPDF? Ker ne podpira kreiranje PDF-jev z uporabo CSS stilov. Prav to pa podpira DOMPDF, zato se bomo danes osredotočili kako omogočiti UTF-8 podporo v DOMPDF knjižnici.

Nekaj brskanja po googlu nam pokaže, da so kolegi iz češke (Martin Všetička) že rešili težave. Zadeva žal ne deluje v mojem primeru. Njegov postopek je nekdo malce bolj podrobno že opisal (prav tako češki sosed). Tretja rešitev je uporaba ConvertCharset objekta, kot predlagajo na codeignator forumu. Žal mi tudi ta rešitev ni delovala.

Končna rešitev je uporaba popravkov Martin Všetička ter popravljenega class.pdf.php razreda. Dodatno pa sem generiral še fonte v CP1250 encodingu. Primeri uporabe:

1.) Code ignator – NE DELUJE
Potrebujete ConvertCharset ter DomPdf.

[php]
header(‘Content-Type: text/html; charset=utf-8′ );

require_once(“dompdf/dompdf_config.inc.php”);
require_once(“convertcharset/ConvertCharset.class.php”);

$dompdf = new DOMPDF();
$convertcharset = new ConvertCharset();
$html = $convertcharset->Convert(file_get_contents(‘dom_pdf_template.html’), ‘UTF-8′, ‘ISO-8859-2′);

$dompdf->load_html($html);
$dompdf->render();
$dompdf->stream(“test.pdf”);
[/php]

2.) Martin Všetička – NE DELUJE
Potrebujete popravljen DOMPDF.

[php]
header(‘Content-Type: text/html; charset=utf-8′ );

require_once(“dompdf/dompdf_config.inc.php”);

// it’s neccessary to convert string to iso-8859-2
$html=iconv(‘utf-8′,’cp1250′, file_get_contents(‘dom_pdf_template.html’));

$dompdf = new DOMPDF();
$dompdf->load_html($html);
$dompdf->render();
$dompdf->stream(“test.pdf”);
[/php]

3.) Združen način – DELUJE
Potrebujete popravljen class.pdf.php, ki ga prepišete čez Martin Všetička DOMPDF. Dodatno v lib/fonts dodajte še CP1250 fonte.
[php]
header(‘Content-Type: text/html; charset=utf-8′ );

require_once(“dompdf/dompdf_config.inc.php”);

$html=iconv(‘utf-8′, ‘cp1250′, file_get_contents(‘dom_pdf_template.html’));

$dompdf = new DOMPDF();
$dompdf->load_html($html);
$dompdf->render();
$dompdf->stream(“test.pdf”);
[/php]

V primeru, da boste naleteli na težavo, da vam brskalnik (naprimer IE 5.5, IE 6.0) ne ponudi pravilno Open/Save As dialoga za PDF, potem PDF najprej shranite in nato uporabnika preusmerite ne PDF, primer:
[php]
file_put_contents(“test.pdf”, $dompdf->output());
header(‘Location: test.pdf’);
[/php]

Dodatne informacije:

Ste tudi vi kdaj generirali PDF-je preko PHP-ja? Katero knjižnico uporabljate? Delite nasvete in težave z nami.


10x komentirano na “PHP – Kreiranje PDF datoteke – DOMPDF – TCPDF”

  1. Ice-Heki je napisal:

    Sem malo pogledal zadevo in zgleda zelo kul.
    Moti me samo to, da mi noče v PDFju pokazat slike, če uporabim :(

  2. Ice-Heki je napisal:

    Edit: … če uporabim :(

  3. Roky je napisal:

    Pazi, da uporabiš absolutno pot. Deluje potem?

  4. Ice-Heki je napisal:

    Delajo samo JPG slike z določeno kakovostjo.

  5. Mesko je napisal:

    Hmm … FPDF podpira tudi GIF pa mislim, da tudi celo PNG (vendar brez alpha transparence).
    http://www.fpdf.org/

    Ima pa probleme szi UTF-8 :S Je treba pretvoriti iz UTF-8 v ANSI ;)

  6. Roky je napisal:

    Vbistvu lahko uporabiš iz UTF8 v cp1250, pa še fonte generiraš:
    http://www.fpdf.org/en/tutorial/tuto7.htm

  7. Mesko je napisal:

    Tudi, samo rabiš še vedno UTF-8 pretvarjat, če maš v bazi na UTF-8 encoding

  8. Bojan je napisal:

    Uporabljam bambooinvoice, ki ima plugin za kreiranje pdf DOMPDF. Z bloga sem potegnil naslednji paket

    TRSPLET – Končni PDF UTF-8 delujoč paket z vsemi potrebnimi spremembami;

    vendar mi še vedno namesto šumnikov izpisuje vprašaj (?). mi lahko mogoče pogmagaš.

    tnx

  9. Roky je napisal:

    Kakšen charset imaš podatke?

  10. Aleš je napisal:

    Nikakor mi ne uspe zrihtat tega.
    Kje se dobi : class.pdf.php?
    Poskusu sem brez tega fajla pa mi vrne napako :
    iconv() …. Unable to stream pdf: headers already sent

Dodaj komentar

You must be logged in to post a comment.