我使用tFPDF生成PDF。 PHP文件是UTF-8编码。 我想©
例如,要在PDF作为版权符号输出。
我已经试过iconv
, html_entity_decode
, htmlspecialchars_decode
。 当我把我试图解码和到不同的文件是硬编码和解码它的字符串,它按预期工作。 因此,出于某种原因没有被在PDF输出。 我曾尝试输出缓冲。 我使用DejaVuSansCondensed.ttf
(True Type字体)。
链接tFPDF: http://fpdf.org/en/script/script92.php
我的想法。 我试过双解码,我到处检查,以确保它没有被编码的其他地方。
你需要这个:
iconv('UTF-8', 'windows-1252', html_entity_decode($str));
该html_entity_decode解码HTML实体。 但由于任何原因,你必须将它与UTF8 的iconv。 我想这是一个FPDF秘密...因为在正常的浏览器中查看它是否正确显示。
Actully,FPDF项目帮助有这方面的解释:
http://www.fpdf.org/~~V/en/FAQ.php#q7
不要使用UTF-8编码。 标准FPDF字体使用ISO-8859-1或Windows 1252。 因此能够执行转换为ISO-8859-1与utf8_decode():
$str = utf8_decode($str);
但是,一些字符如欧元将无法正确翻译。 如果扩展的iconv可用,这样做的正确方法如下:
$str = iconv('UTF-8', 'windows-1252', $str);
所以,作为EMFI表明,的iconv()和html_entity_decode()PHP函数的组合是解决你的问题:
$str = iconv('UTF-8', 'windows-1252', html_entity_decode("©"));
我敢肯定没有提供HTML实体代码自动转换成他们的UTF-8当量。 在这样的情况下,我都使出手动字符串替换,例如:
$strOut = str_replace( "©", "\xc2\xa9", $strIn );
我必须解决与此代码的问题:
$str = utf8_decode($str);
$str = html_entity_decode($str);
$str = iconv('UTF-8', 'windows-1252',$str);
您还可以使用setFont('Symbol')
或setFont('ZapfDingbats')
来选择要打印的特殊字符。
define('TICK', chr(214)); # in font 'Symbol' -> print a tick symbol
...
$this->SetFont('Symbol', 'B', 8);
$this->Cell(5, 5, TICK, 0, 'L'); # will output the symbol to PDF
输出:√
这样一来,你就不会需要转换为ISO-8859-1或Windows 1252或使用其他库tFPDF特殊字符:)
请参阅: http://www.fpdf.org/en/script/script4.php的字体和字符表