FPDF中的html_entity_decode(使用tFPDF扩展)

时间:2012-05-09 13:18:08

标签: php pdf fpdf html-encode

我正在使用tFPDF生成PDF。 php文件是UTF-8编码的。 我希望©例如在pdf中输出作为版权符号。

我尝试过iconvhtml_entity_decodehtmlspecialchars_decode。当我接受字符串我试图解码并硬编码到一个不同的文件并解码它,它按预期工作。因此,由于某些原因,它不会在PDF中输出。我试过输出缓冲。我正在使用DejaVuSansCondensed.ttf(真实字体)。

链接到tFPDF:http://fpdf.org/en/script/script92.php

我没有想法。我试过双重解码,我到处检查,以确保它没有在其他地方编码。

帮助!

5 个答案:

答案 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了解字体&角色列表