Męczyłem ten temat przez ostatnie kilka dni.
Poszukiwałem biblioteki która wygeneruje mi PDF z podanego kodu HTML bez jakiś ciężkich kombinacji i przerabiania kodu.
Postanowiłem podzielić się ze wszystkimi moimi doświadczeniami. Mam nadzieję że komuś się to jeszcze przyda.
1.
FPDFNie jest to gotowiec który sam przemieli HTML+CSS i wypluje gotowego PDF'a.
Trzeba tu wszystko robić "ręcznie" czyli ustawiać położenia, fonty, elementy itd. Na bazie FPDF powstały inne biblioteki o czym poniżej:
2.
html2fpdfStrona projektu fatalna, wygląda jakby autor wszystkie siły zużył na tworzeniu biblioteki i stronę zrobił ktoś inny;)
Po wygrzebaniu z sieci ostatnie wersji i zainstalowaniu pojawia się oczywiście nieśmiertelny problem z polskimi fontami. Przerobiłem cały ten cyrk z generowaniem polskich czcionek i w końcu udało mi się wygenerować PDFa z polskimi znakami.
Niestety bardziej rozbudowany kod HTML (tabelki, css) kładzie wszystko. Cały tekst się po prostu rozwala. Krótko mówiąc idea dobra ale jeszcze daleko do prawidłowego rozwiązania.
3.
dompdfStrona projektu na szczęście dość dobra. Udało mi się to uruchomić razem z polskimi fontami (oczywiście z kombinacjami). Niestety przy bardziej rozbudowanym HTMLu skrypt się wywala sypiąc błędami.
4.
mpdfPorządnie opracowana
strona projektu, w zakładce "Documentation" wszystko porządnie napisane z przykładami.
Co najważniejsze nie trzeba kombinować z polskimi czcionkami. Biblioteka wspiera różnego rodzaju czcionki, nawet chińskie czy arabskie.
Generuje PDF'a o przyzwoitym rozmiarze, z polskimi znakami. Dobrze radzi sobie z rozbudowanym HTML'em i CSS
Oto przykładZdecydowanie polecamWygląda na to że na obecną chwilę nic lepszego nie znajdę.
Zatem jeżeli ktoś szuka rozwiązania na HTML -> PDF - to
polecam pobierać MPDFPoniżej kilka porad i uwag (dotyczy wersji aktualnej w chwili pisania posta czyli 4.1.1):
- Biblioteka zawiera gotowe czcionki ale są to darmowe odpowiedniki popularnych czcionek. Autor pisze że to ze względu na prawa autorskie. Niczemu to nie przeszkadza, wszystko wygląda przyzwoicie. Jest możliwość zastosowania własnych czcionek ale tematu nie zgłębiałem
- Skrypt poprawnie interpretuje większość tagów HTML i CSS ale nie wszystko. Główny problem jest z elementami DIV, dlatego w przykładowym dokumencie musiałem je zamienić na tabelki.
- Szerokość komórek czy tabeli wyrażona w procentach nie jest poprawnie interpretowana gdy tabela jest osadzona w innej. Przykładowo WIDTH=100% jest pomijany.
- Jest możliwość załadowania zewnętrznego pliku CSS podczas generowania PDF'a
- Domyślne kodowanie wsadowego HTML'a to UTF-8 ale jest funkcja do konwertowania innych kodowań na UTF
- Domyślne kodowanie PDF'a czyli wyjściowe to WINDOWS-1252. Trzeba ustawić wyjściowe kodowanie na ISO lub UTF. Uwaga! PDF'a z kodowaniem UTF waży kilka razy więcej niż z ISO
Kilka przykładów zastosowania (biblioteka znajduje się w katalogu "mpdf"):
1. Hello World, bez polskich fontów, PDF wysyłany do przeglądarkiinclude('mpdf/mpdf.php');
$mpdf=new mPDF();
$html = "<p>Hello World!</p>";
$mpdf->WriteHTML($html);
$mpdf->Output();
2. HTML z polskimi znakami (ISO-8859-2) czytany z pliku, PDF zapisywany na dyskuinclude('mpdf/mpdf.php');
$mpdf=new mPDF('iso-8859-2');
$mpdf->allow_charset_conversion=true;
$mpdf->charset_in='ISO-8859-2';
$mpdf->WriteHTML($html);
$mpdf->Output("moj_plik.pdf","F");
3. HTML z polskimi znakami (ISO-8859-2) czytany z pliku, CSS z pliku, PDF zapisywany na dysku, ustawiamy marginesy dokumentu na 10mminclude('mpdf/mpdf.php');
$mpdf=new mPDF('iso-8859-2','', 0, '', 10, 10, 10, 10, 0, 0, 'P');
$mpdf->allow_charset_conversion=true;
$mpdf->charset_in='ISO-8859-2'; //wejściowe kodowanie to ISO
$mpdf->WriteHTML($stylesheet,1);
$mpdf->WriteHTML($html);
$mpdf->Output("moj_plik.pdf","F");
To by było na tyle. Wszelkie uwagi mile widziane.
Mam nadzieję że ktoś skorzysta.