HTML2FPDF a problem polskich znaków
Ostatnio potrzebowałem wygenerować dokument PDF z gotowego pliku HTML, wybór padł na bibliotekę HTML2FPDF.
Pobrałem więc paczkę z http://html2fpdf.sourceforge.net, wypakowałem na serwer i ustawiłem ¶cieżki dostępu.
Następnie utworzyłem plik dokument_pdf.php, a w nim:
<?php
require_once('./classes/pdf/html2fpdf.php');
$pdf = new HTML2FPDF('P','mm','A4');
$pdf->SetDisplayMode(100);
$pdf->SetMargins(10, 10 , 10);
$html = '<html><body><h1>Zażółć gę¶l± jaĽń</h1> Jeszcze co¶ w języku polskim .<br />±ż¶ĽęćńłóˇŻ¦¬ĘĆŃŁÓ</body></html>';
$pdf->AddPage();
$pdf->UseCSS(true);
$pdf->WriteHTML($html);
$pdf->Output("oferta.pdf", "I");
?>
Biblioteka nie radzi sobie z kodowaniem w UTF-8 i trzeba użyć konwersji znaków do ISO-8859-2:
$html = iconv("UTF-8", "ISO8859-2", $html);
Ale w tym przypadku użyłem kodowania w ISO a więc powyższa linijka zniknęła z mojego kodu.
Do poprawnego wy¶wietlania polskich znaków potrzebna jest jeszcze polska czcionka. trzeba j± samemu wygenerować z plików znajduj±cych się w systemie windows (C:\WINDOWS\Fonts\). Czcionki należy skopiować do folderu /font/makefont/ doł±czonego do biblioteki HTML2FPDF. Ja użyłem czcionki arial a więc skopiowałem pliki arial.ttf, ariali.ttf, arialbd.ttf.
Potrzebne s± 3 pliki aby poprawnie obsługiwać czcionkę zwykł±, pogrubiona i pochylon±.
teraz trzeba przekonwertować czcionki do formatu XX wydaj±c w konsoli polecenie:
ttf2pt1 -b -L iso-8859-2.map arial.ttf arialpl
ttf2pt1 -b -L iso-8859-2.map arialbd.ttf arialbdpl
ttf2pt1 -b -L iso-8859-2.map ariali.ttf arialipl
Aby polecenia zadziałały musimy najpierw zainstalować ttf2pt1 pobieraj±c go ze strony: http://sunet.dl.sourceforge.net/sourceforge/gnuwin32/ttf2pt1-3.4.4.exe
Nastepnie trzeba utworzyć skrypt PHP o takiej tre¶ci:
require('makefont.php');
Makefont('arialpl.pfb', 'arialpl.afm', 'iso-8859-2');
Makefont('arialbdpl.pfb', 'arialbdpl.afm', 'iso-8859-2');
Makefont('arialipl.pfb', 'arialipl.afm', 'iso-8859-2');
I umie¶cić cały katalog na serwerze (Aby można było uruchomić skrypt)
Skrypt utworzył kilka plików, należy je skopiować do katalogu /font/ - tam gdzie znajduj± się pozostałe czcionki
następnie treba dodać w naszym pliku php taki kod:
$pdf->AddFont('arialpl','B','arialbdpl.php');
$pdf->AddFont('arialpl','I','arialipl.php');
$pdf->SetFont('arialpl','',18);
I w zasadzie to by wystarczyło. Ale niestety okazuje się że polskie znaki s± tylko w pierwszej linii, a w kolejnych już tylko "krzaki".
jak więc sobie z tym problemem poradzić?
trzeba edytować plik klasy.
otwieramy plik: html2fpdf.php i zaraz po:
function HTML2FPDF($orientation='P',$unit='mm',$format='A4')
wstawiamy ten fragment:
$this->AddFont('arialpl','B','arialbdpl.php');
$this->AddFont('arialpl','I','arialipl.php');
$this->SetFont('arialpl','',10);
i następnie zamieniamy linie:
$this->fontlist=array("arial","times","courier","helvetica","symbol","monospace",
"serif","sans");
na:
$this->fontlist=array("arialpl");
oraz wszystkie wyst±pienia podobne do:
$this->SetFont('jakas_czcionka','',11);
na:
Zapisujemy plik, następnie upewniamy się że kod:
$pdf->AddFont('arialpl','B','arialbdpl.php');
$pdf->AddFont('arialpl','I','arialipl.php');
$pdf->SetFont('arialpl','',18);
znikn±ł z naszego skryptu, w innym wypadku wy¶wietli bł±d.
od tego momentu w całym dokumencie wy¶wietlaj± się prawidłowo polskie znaki.
« Powrót