我正在使用tFPDF生成PDF。 php文件是UTF-8编码的。
我希望©
例如在pdf中输出作为版权符号。
我尝试过iconv
,html_entity_decode
,htmlspecialchars_decode
。当我接受字符串我试图解码并硬编码到一个不同的文件并解码它,它按预期工作。因此,由于某些原因,它不会在PDF中输出。我试过输出缓冲。我正在使用DejaVuSansCondensed.ttf
(真实字体)。
链接到tFPDF:http://fpdf.org/en/script/script92.php
我没有想法。我试过双重解码,我到处检查,以确保它没有在其他地方编码。
帮助!
答案 0 :(得分:12)
你需要这个:
iconv('UTF-8', 'windows-1252', html_entity_decode($str));
html_entity_decode 解码html实体。但由于任何原因,您必须使用 iconv 将其转换为utf8。我想这是一个fpdf秘密...因为在正常的浏览器视图中它正确显示。
答案 1 :(得分:3)
实际上,fpdf项目FAQ对它有一个解释:
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("©"));
答案 2 :(得分:0)
我很确定HTML实体代码没有自动转换为UTF-8等效代码。在这种情况下,我使用了手动字符串替换,例如:
$strOut = str_replace( "©", "\xc2\xa9", $strIn );
答案 3 :(得分:0)
我已修复此代码的问题:
$str = utf8_decode($str);
$str = html_entity_decode($str);
$str = iconv('UTF-8', 'windows-1252',$str);
答案 4 :(得分:0)
您还可以使用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作为特殊字符:)
请参阅:docs了解字体&角色列表