PHP - generowanie PDF

Generowanie PDF w PHP i przydatne biblioteki

PDF to rozpoznawalny na całym świecie format plików, który pozwala na generowanie dokumentów zawierających tekst, zdjęcia, filmy, a nawet formularze. Został stworzony w 1993 roku przez firmę Adobe, stał się standardem dla dokumentów drukowanych oraz udostępnianych online i ciężko sobie wyobrazić, żeby miał zostać zastąpiony innym formatem. Za generowanie plików PDF w PHP odpowiadają zewnętrzne biblioteki, posiadajace mocne i słabe strony, które przedstawimy w tym artykule.

W jakim celu generujemy pliki PDF w PHP?

Pliki PDF mogą być generowane ręcznie, ale zawsze warto jest rozważyć optymalizację tego procesu i powierzenie tego zadania serwerowi. Nikt nie chce chyba ręcznie tworzyć indywidualnego pliku dla każdego ze swoich produktów czy usług. Zachowanie profesjonalnego i jednolitego wyglądu dokumentów udostępnianych na stronie również jest ważne - tutaj także przewagę ma automatyzacja. Spójrzmy na opcje dostępne dla PHP. 

Rodzaje bibliotek PDF w PHP i ich cechy

Wybór biblioteki może się wydawać prostą rzeczą - najlepiej przecież wybrać tą która oferuje najwięcej opcji bo “od przybytku głowa nie boli”. Jednak im więcej możliwości tym więcej wymaganych konfiguracji i szans że coś pójdzie nie tak, a każdy kto pracował z PDFami wie że debugowanie ich to nic przyjemnego - każda zmiana którą chcemy sprawdzić będzie od nas wymagała wygenerowania pliku na nowo, a oceniać ją będziemy głównie wizualnie gdyż faktyczny kod PDF’a nie jest zbyt czytelny. Należy też pamiętać że będziemy tworzyć głównie szablony dla większych ilości produktów czy usług i nie zawsze będziemy mieli możliwość sprawdzenia każdego z nich osobno. Dlatego warto na wybór poświęcić dłuższą chwilę i zapoznać się z dokumentacja każdej z nich.

1. mPDF

Narzędzie mPDF generuje pliki na podstawie kodu HTML zakodowanego w UTF-8, pozwala na stylowanie ich za pomocą CSS, ustawienie nagłówka i stopki dla każdej strony oraz ich numerację. Przeniesienie treści na nową stronę też jest przydatną funkcją przy tworzeniu większych dokumentów. mPDF posiada wiele funkcjonalności (m.in. zakładki, spis treści oraz ochrona hasła), ale niestety nie wspiera już wszystkich opcji stylizacji, takich jak flexbox oraz innych.

2. FPDF

Biblioteka FPDF pozwala na generowanie plików PDF bez dodatkowych bibliotek w wielu niestandardowych językach, takich jak cyrylica, grecki i tajski. Trzeba jednak wtedy użyć dodatkowego pliku czcionki w formacie TrueType lub Type1. FPDF pozwala również na dostosowanie nagłówka i stopki, formatowanie stron i marginesu, pozycjonowanie tekstu, dodawanie obrazków (JPEG, PNG, GIF) i linków.

3. TCPDF

Narzędzie TCPDF jest oparte na FPDF, zawiera więc wszystkie jego funkcjonalności. Dodaje do nich między innymi:

  • tekst pisany od prawej do lewej,
  • formaty czcionek TrueTypeUnicode, OpenTypeUnicode, TrueType, OpenType, Type1 i CID-0,
  • formaty obrazów wspierane przez GD (GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM) oraz ImageMagick,
  • jedno i dwuwymiarowe kody kreskowe,
  • profile kolorów - skala szarości, RGB, CMYK i kolory dodatkowe,
  • szyfrowanie dokumentów,
  • zakładki oraz spis treści.

Istnieje pełna lista funkcjonalności, dzięki której dowiesz się, czy możesz użyć tej biblioteki.

4. Dompdf

Biblioteka Dompdf generuje PDF-y na postawie kodu HTML, wspiera wewnętrzne i zewnętrzne style CSS 2.1 (z wyjątkiem flexboxa i grid’u) oraz niektóre elementy CSS3 (@import, @media, @page). Pozwala na zamieszczanie obrazków i snippetów PHP oraz zapewnia podstawowe wsparcie dla elementów SVG. Zaletą Dompdf jest brak zależności od zewnętrznych bibliotek PDF, dzięki użyciu klasy R&OS PDF, oraz obsługa rozbudowanych tabel.

5. Snappy

Biblioteka Snappy opiera się na wkhtmltopdf i pozwala na generowanie miniaturek, snapshotów, a także pełnych plików na podstawie linku lub kodu HTML. Jej zaletą jest prostota obsługi. Przykładowo poniższy fragment kodu pozwoli nam na zapisanie strony Droptica w formacie pdf:

$snappy = new Pdf('/usr/local/bin/wkhtmltopdf');

header('Content-Type: application/pdf');

header('Content-Disposition: attachment; filename="file.pdf"');

echo $snappy->getOutput('http://www.github.com');

Generowanie PDF-a w PHP - podsumowanie 

PDF stał się kluczowym formatem plików tekstowych, używanym na całym świecie. Istnieje wiele rozwiązań generowania PDF-ów w języku PHP, dzięki czemu można dostosować swój wybór pod konkretne potrzeby tworzonego projektu. 

Jeśli zainteresował Cię ten artykuł, zobacz, na jakie inne tematy piszemy na naszym blogu.