如何在 PHP FPDI 库中设置编码

Posted

技术标签:

【中文标题】如何在 PHP FPDI 库中设置编码【英文标题】:How to set encoding in PHP FPDI library 【发布时间】:2018-03-28 02:47:29 【问题描述】:

如何在名为 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();

【问题讨论】:

为澄清起见,FPDI 库使用FPDFTCPDFtFPDF 来为它们添加PDF 文件导入支持。 FPDF 不支持 UTF-8 编码。 tFPDFFPDF 的替代品,增加了 UTF-8 支持。但是,您仍然需要手动添加 UTF-8 字体或添加到 fonts/unifont 目录。 你试过mPDF吗? mpdf.github.io 它基于 FPDF,但更易于使用。您也可以使用'mode' => 'utf-8' 在构造函数中设置它。可以看看 【参考方案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 服务器上是否安装了字体。

【讨论】:

以上是关于如何在 PHP FPDI 库中设置编码的主要内容,如果未能解决你的问题,请参考以下文章

如何在php编码中设置默认值

我们如何在核心 PHP 中设置环境变量而不使用 Cpanel 中的任何库

PHP - 如何在 PDF 文件中设置字段的值,然后保存?

如何使用 FPDF/FPDI 获得精确修改的 PDF?

如何在 MSYS 中设置控制台编码?

如何在 libre office 中设置 URL 编码的超链接?