DOMPDF jest jedną z lepszych bibliotek do konwersji dokumentów HTML do formatu PDF w PHP. Jest darmowa, wygodna w obsłudze i posiada stosunkowo dobre odwzorowanie kodu html. Niestety w tego typu konwersjach zazwyczaj pojawia się problem z polskimi znakami i klasa DOMPDF nie należy do wyjątków. Okazuje się, że istnieje rozwiązanie tego problemu.

Aby polskie znaki były wyświetlane poprawnie należy przede wszystkim skonwertować wymagane czcionki (wykorzystywane w pliku html) z formatu TTF (True Type Font) na PT1 (Postscript Type 1) od razu dokonując konwersji kodowania poprzez program ttf2pt1:

CODE:
  1. ttf2pt1.exe -b -L iso-8859-2.map arial.ttf arial

Do konwersji będzie potrzebny plik mapy kodowania iso-8859-2.map dostępny np. w bibliotece fpdf.

W wyniku tego polecenia powstaną 2 pliki: arial.afm (zawierający metrykę czcionki) i arial.pfb (zawierający opis kształtu czcionki), które należy skopiować do katalogu czcionek klasy DOMPDF czyli do katalogu dompdf/lib/fonts.

Następnie należy sprawdzić czy nowe czcionki są dodane do pliku domdpf/lib/fonts/dompdf_font_family_cache.dist a jeśli ich tam nie ma należy je dodać/zmienić nazwy (i usunąć plik cache). Należy także pamiętać, że w ten sposób należy stworzyć także czcionki pogrubione czy pochylone, jeśli są używane w źródłowym pliku html.

W bibliotece DOMPDF znajduje się plik class.pdf.php (w katalogu dompdf/lib/), który niestety trzeba będzie podmienić na inny zawierający drobne poprawki. Poprawiony plik można zobaczyć tutaj.

Na koniec należy usunąć definicję kodowania z meta tagów w konwertowanym pliku html i wczytać zawartość tegoż pliku dokonując przy tym konwersji kodowania na Windows-1250 np. poprzez funkcję iconv():

PHP:
  1. $pdf = new DOMPDF();
  2. $pdf->load_html(iconv('UTF-8','Windows-1250', file_get_contents('zrodlowy.html')));
  3. $pdf->render();
  4. $pdf->stream('wynik.pdf');

Po wykonaniu powyższego kodu nastąpi wczytanie pliku zrodlowy.html, zmiana kodowania z UTF-8 na Windows-1250 i konwersja do pliku wynik.pdf, który zostaje wysłany do przeglądarki. Oczywiście źródłowy plik html może zawierać inne kodowanie i należy to uwzględnić podczas konwersji.