FPDF:俄语文本无法正确输出


FPDF: Russian text is not outputted properly

在我的PHP项目中,我有一个PDF文件,我想在上面输出俄语文本:

Это предложение на русском языке.

在我的 MySQL 数据库中,我有一个带有utf8_unicode_ci的俄罗斯数据的表格。在此表中,俄语数据用无法识别的字符表示,如下所示:

Я дейÑтвую Ñкорее доверительно Ð

在我的 pdf 上,输出的不是相应的西里尔文,而是这些无法识别的字符。

这是我的 FPDF 代码的摘录,请注意末尾的变量$myRussianSentence,其输出有问题:

$pdf=new FPDF();
$pdf->SetAutoPageBreak(false, 0);
$pdf->AddPage();
$pdf->SetTitle('My Title');
$pdf->SetAuthor('John Miller');
$pdf->SetLeftMargin(18);
$pdf->SetFont('times', 'B', 36);
$pdf->SetTextColor(0,0,0);
$pdf->Cell(174, 45, 'MY PDF', "", 1, "C");
$pdf->Ln(5);
$pdf->Image($strAdDeckLink, $x = 40, $y = 60, $w = 131, $h = 129, $type = '', $link = 'http://www.example.com', $align = '', $resize = false, $dpi = 96, $palign = '', $border = 0);
$pdf->Ln(130);
$pdf->SetFont('times', 'B', 24);
$pdf->Cell(174, 26, 'This is some text', "", 1, "C");
$pdf->Ln(5);
$pdf->SetFont('times', 'B', 32);
$pdf->Cell(180, 26, $myRussianSentence, "", 1, "C");

对变量$myRussianSentence执行var_export()以正确的西尔文字符显示句子。但是,在 PDF 上,它输出为在我的数据库中找到的不可识别字符。

如何实现正确的俄语显示在我的 PDF 上?

在FPDF上它说:

该类可以使用西欧以外的多种语言生成文档:中欧、西里尔文、希腊文、波罗的海和泰文,前提是您拥有具有所需字符集的 TrueType 或 Type1 字体。还提供 UTF-8 支持。

tFPDF 是支持 UTF-8 的版本:

此类是 FPDF 的修改版本,添加了 UTF-8 支持。

代码看起来非常相似:

require('tfpdf.php');
$pdf = new tFPDF();

您需要使用 Unicode 字体:

要在脚本中使用 Unicode 字体,请将字体文件名作为 AddFont() 的第三个参数传递,将 true 作为第四个参数传递。字体可以位于 font/unifont 目录中,也可以直接位于系统字体文件夹中(如果定义了_SYSTEM_TTFONTS常量)。该软件包附带DejaVu字体系列。

// Add a Unicode font (uses UTF-8)
$pdf->AddFont('DejaVu','','DejaVuSansCondensed.ttf',true);
$pdf->SetFont('DejaVu','',14);

FPDF 还有其他几个扩展提供 UTF-8 支持:

  • mPDF
  • 乌干达人民民主联盟
  • TCPDF