HTML2FPDF a problem polskich znaków

Sobota, 25 Lipiec 2009, 20:51:30

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','','arialpl.php');

$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','','arialpl.php');

$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:

$this->SetFont('arialpl','',11);

Zapisujemy plik, następnie upewniamy się że kod:

$pdf->AddFont('arialpl','','arialpl.php');

$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