Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set encoding in PHP FPDI library

Tags:

php

pdf

fpdf

fpdi

How to set UTF-8 encoding in php library named FPDI? Here's library: https://www.setasign.com/products/fpdi/manual/

The code:

$pdf = new Fpdi(); $pdf->AddPage(); $pdf->setSourceFile('PdfDocument.pdf'); $tplIdx = $pdf->importPage(1);   $pdf->useTemplate($tplIdx, 10, 10, 100);  $pdf->SetFont('Helvetica'); $pdf->SetTextColor(255, 0, 0); $pdf->SetXY(30, 30); $pdf->Write(0, 'Zażółcić gęślą jaźń');  $pdf->Output(); 
like image 921
Adam Kozlowski Avatar asked Oct 16 '17 14:10

Adam Kozlowski


1 Answers

You could add new font with proper letters

$pdf->AddFont('DejaVu','','DejaVuSansCondensed.php'); $pdf->SetFont('DejaVu', '', 10, '', false); 

Then in regard to FPDF library that is used by FPDI:

There possible encodings are:

cp1250 (Central Europe) cp1251 (Cyrillic) cp1252 (Western Europe) cp1253 (Greek) cp1254 (Turkish) cp1255 (Hebrew) cp1257 (Baltic) cp1258 (Vietnamese) cp874 (Thai) ISO-8859-1 (Western Europe) ISO-8859-2 (Central Europe) ISO-8859-4 (Baltic) ISO-8859-5 (Cyrillic) ISO-8859-7 (Greek) ISO-8859-9 (Turkish) ISO-8859-11 (Thai) ISO-8859-15 (Western Europe) ISO-8859-16 (Central Europe) KOI8-R (Russian) KOI8-U (Ukrainian) 

The string that was sent to pdf was in UTF-8 (it was checked by mb_detect_encoding function) and there was a need to convert it with cp1250.

$str = iconv('UTF-8', 'cp1250', 'zazółcić gęślą jaźń'); 

Another solution would be to try to use:

$pdf->SetFont('freeserif', '', 14, '', true); 

UPDATE PRO TIP:

In case of problems with fonts - check out first if the font is installed on your linux server.

like image 78
2 revs Avatar answered Sep 20 '22 04:09

2 revs