如何在PHP FPDI库中设置编码

32
如何在名为FPDI的PHP库中设置UTF-8编码? 这是库:https://www.setasign.com/products/fpdi/manual/ 代码:
$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();

1
为了澄清,FPDI库使用FPDFTCPDFtFPDF来为它们添加PDF文件导入支持。FPDF不支持UTF-8编码。tFPDFFPDF的替代品,它增加了UTF-8支持。但是,您仍然需要手动添加您的UTF-8字体,或将其添加到您的fonts/unifont目录中。 - Will B.
1
你试过mPDF吗?https://mpdf.github.io/ 它基于FPDF,但使用起来更加容易。你也可以在构造函数中设置它,使用'mode' => 'utf-8'。可以看一下。 - Petschko
1个回答

1

你可以添加适当字母的新字体

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

关于FPDI使用的FPDF库:

可能的编码方式有:

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)

发送到pdf的字符串采用UTF-8编码(使用mb_detect_encoding函数进行了检查),需要将其转换为cp1250编码。

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

另一个解决方案是尝试使用:


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

更新专业提示:

如果出现字体问题,请首先检查字体是否已安装在您的Linux服务器上。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接