Kajoj Home Page
Menu
Packages (slackware)
Misc
TCPDF lekkie polskie czcionki vs. UTF-8
TCPDF jest bardzo wygodną klasą do generowania plików PDF. Nie będę się tu rozpisywał na temat jej zalet, a skupię się wyłącznie na jednym problemie. Klasa ta, bardzo pięknie obsługuje czcionki unicode w tym takie z polskimi znakami. Problem w tym, że czcionki te mają dość duży rozmiar i po
dołączeniu ich do pdfa skutkują jego dość pokaźną nadwagą. Po zastosowaniu diety i wygenerowaniu pliku czcionki z mapą znaków tylko iso-8859-2 jesteśmy niejako zmuszeniu do tworzenia obiektu klasy TCPDF jak nie unicode oraz z
charsetem iso-8859-2 i konwertowania wszystkich tekstów z utf8 na iso-8859-2 gdyż sama klasa zdecydowanie sobie z tym nie radzi. Moje rozwiązanie tego problemu przedstawia się następująco:
- Generujemy odchudzony plik czcionek:
$ ttf2ufm -b -L iso-8859-2.map times.ttf times $ php -q makefont.php times.pfb timesbi.afm iso-8859-2
- Następnie dopisujemy rozmiary polskich znaków dialektycznych do pliku
times.php (z lenistwa kopiując wartości ze znaczków bez ogonków. Oto
fragment pliku times.php:
250=>500,251=>500,252=>500,253=>500,254=>278,255=>333); $cw[260] = $cw[65]; // A $cw[261] = $cw[97]; // a $cw[262] = $cw[67]; // C $cw[263] = $cw[99]; // c $cw[280] = $cw[69]; // E $cw[281] = $cw[101]; // e $cw[321] = $cw[76]; // L $cw[322] = $cw[108]; // l $cw[323] = $cw[78]; // N $cw[324] = $cw[110]; // n $cw[211] = $cw[79]; // O $cw[243] = $cw[111]; // o $cw[346] = $cw[83]; // S $cw[347] = $cw[115]; // s $cw[377] = $cw[90]; // Z $cw[378] = $cw[122]; // z $cw[379] = $cw[90]; // Z $cw[380] = $cw[122]; // z $enc='iso-8859-2';
- wrzucamy pliki times.php oraz times.z do katalogu czcionek TCPDFa
- No i teraz najlepsze - tworzymy klasę która dziedziczy po TCPDF i nadpisujemy jedną
metodę:
class TCPDFpl extends TCPDF { protected function UTF8ToLatin1($str) { if (!$this->isunicode) { return $str; } return iconv("UTF-8", "ISO-8859-2", $str); } } - No i cieszymy się pięknymi ogonkami :)
$pdf = new TCPDFpl(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8'); $pdf->setFont('times', '', 10); $pdf->addPage(); $pdf->cell(0, 20, 'O, mógłże sęp chlań wyjść furtką bździn.');
Komentarze
Kubek : Extra tutorial. W koncu w moim pdfie pojawily sie polskie fonty. Na pierwszy rzut oka tutorial wydaje sie trudny. Wystarczy jedynie przeczytac go uwaznie a wszystko staje sie latwe :)
Legion : Stanąłem na drugiej linijce w pkt.1 Skąd się tam bierze php na początku.Dodam że robię to pod windowsem.Proszę o pomoc.:) POzdr
Jacek : a jak to zrobić pod windowsem ?
ADI : sprostowanie, bo w podanym kodzie jest blad!
druga linijka pierwszego wklejonego kodu powinna byc taka:
$ php -q makefont.php times.pfb timesbi.afm iso-8859-2
ADI : ehhh, zle wkleilem!
$ php -q makefont.php times.pfb timesbi.afm true iso-8859-2
przed okresleniem kodowania powinien byc jeszcze parametr osadzenia czcionek, w tym przypadku TRUE
krzynio : wielkie dzięki za tutorial - naprawdę bardzo mi się przydał. pozdrawiam
Dr Boczek : Dlaczego generowanie PDF z polskimi znakami trwa tak długo a bez polskich znaków generuje sie błyskaiwcznie?
u was tez tak jest czy ja robie jakis błąd?
błędy : Przetłumacz na język polski:
"jesteśmy niejako zmuszeniu do tworzenia obiektu klasy TCPDF jak nie unicode "
"polskich znaków dialektycznych"
klisiu : W przypadku, gdy dostajecie komunikat "Cannot access iso-8859-2.map" sprawdźcie, czy w katalogu, gdzie znajduje się skrypt makefont.php macie katalog enc, a w nim plik iso-8859-2.map. Jeżeli tak to polecenie powinno wyglądać następująco:
$ ttf2ufm -b -L enc/iso-8859-2.map times.ttf times
user : It works perfect!
THANKS A LOT !!!
Maniek : Hej,
Jak mam wygenerować odchudzony plik czcionek ?
Gdzie to mam uruchomić ?
mam win7 i webserv
Legion : Stanąłem na drugiej linijce w pkt.1 Skąd się tam bierze php na początku.Dodam że robię to pod windowsem.Proszę o pomoc.:) POzdr
Jacek : a jak to zrobić pod windowsem ?
ADI : sprostowanie, bo w podanym kodzie jest blad!
druga linijka pierwszego wklejonego kodu powinna byc taka:
$ php -q makefont.php times.pfb timesbi.afm iso-8859-2
ADI : ehhh, zle wkleilem!
$ php -q makefont.php times.pfb timesbi.afm true iso-8859-2
przed okresleniem kodowania powinien byc jeszcze parametr osadzenia czcionek, w tym przypadku TRUE
krzynio : wielkie dzięki za tutorial - naprawdę bardzo mi się przydał. pozdrawiam
Dr Boczek : Dlaczego generowanie PDF z polskimi znakami trwa tak długo a bez polskich znaków generuje sie błyskaiwcznie?
u was tez tak jest czy ja robie jakis błąd?
błędy : Przetłumacz na język polski:
"jesteśmy niejako zmuszeniu do tworzenia obiektu klasy TCPDF jak nie unicode "
"polskich znaków dialektycznych"
klisiu : W przypadku, gdy dostajecie komunikat "Cannot access iso-8859-2.map" sprawdźcie, czy w katalogu, gdzie znajduje się skrypt makefont.php macie katalog enc, a w nim plik iso-8859-2.map. Jeżeli tak to polecenie powinno wyglądać następująco:
$ ttf2ufm -b -L enc/iso-8859-2.map times.ttf times
user : It works perfect!
THANKS A LOT !!!
Maniek : Hej,
Jak mam wygenerować odchudzony plik czcionek ?
Gdzie to mam uruchomić ?
mam win7 i webserv
Dodaj komentarz









