我想将包含特殊Unicode字符'✝'的文档从html转换为包含html2pf的pdf。但是,在呈现文档时,“✝”显示为“?”。我能做些什么?html2pdf中的特殊unicode字符
0
A
回答
3
“✝”(U + 271D LATIN CROSS)字符可能无法在PDF文档中正确呈现,因为使用的字体不支持它。
这里有一些想法:
1)用更常见的一种看起来类似替换的字符。 “†”(U + 2020 DAGGER)将是一个明显的选择,因为它是常见的Windows-1252字符集的一部分。
在代码:
$var = str_replace("\xE2\x9C\x9D", "\xE2\x80\xA0", $var);
$var
必须包含以UTF-8编码的数据。除此之外,我总是希望通过使用它们的二进制表示法将更多“不常见”字符插入到源代码中。原因之一是:许多编辑器字体也不包含这些字符。它可以防止问题。
2)将PDF文档的字体更改为支持字符的字体。下面是一个例子(与从我的评论摘录的问题):
$font = 'dejavusans';
$content = <<<EOT
<page>
<h1>$font</h1>
\xE2\x9C\x9D U+271D LATIN CROSS
</page>
EOT;
require_once __DIR__ . '/html2pdf_v4.03/html2pdf.class.php';
$html2pdf = new HTML2PDF();
$html2pdf->setDefaultFont($font);
$html2pdf->WriteHTML($content);
$html2pdf->Output(__DIR__ . '/test.pdf', 'F');
3)如果你想在PDF文档中的原始字符,并且不希望更改默认字体,您可以切换到每当你遇到一个支持字符的字体。
$input = <<<EOT
<h1>Demo</h1>
<p>This should be Arial.</p>
<p>\xE2\x9C\x9D - U+271D LATIN CROSS</p>
EOT;
$input = str_replace(
"\xE2\x9C\x9D",
"<span style=\"font-family: dejavusans\">\xE2\x9C\x9D</span>",
$input
);
$content = <<<EOT
<page>
$input
</page>
EOT;
require_once __DIR__ . '/html2pdf_v4.03/html2pdf.class.php';
$html2pdf = new HTML2PDF();
$html2pdf->setDefaultFont('arial');
$html2pdf->addFont('dejavusans'); // note this line
$html2pdf->WriteHTML($content);
$html2pdf->Output(__DIR__ . '/test.pdf', 'F');
渲染PDF输出:
解决方案2和3有一个相当大的缺点,虽然。您可能需要将附加字体嵌入到PDF文档中(默认情况下,html2pdf会执行该操作),从而将其大小增加了很多。
PDF和tcpdf(建立在html2pdf之上)有一个功能,只添加实际在文档中出现的字体中的字符(称为子集),但html2pdf不公开此功能我可以说。
如果您需要支持许多不常见的Unicode字符,解决方案2可能是最好的选择。
相关问题
- 1. Unicode特殊字符转换
- 2. unicode&delphi 2009中的特殊字符
- 3. Python的特殊字符的Unicode
- 4. 有特殊字符的Unicode检查
- 5. 输出RTF特殊字符为Unicode
- 6. unicode字节中的特殊字符比iso字节长吗?
- 7. 在Python中对unicode特殊字符(符号)进行编码?
- 8. 用于Django表单的help_text中的Unicode /特殊字符?
- 9. 由cfhttp返回的内容中的ColdFusion特殊Unicode字符
- 10. SQL中的Access 2007和特殊/ Unicode字符
- 11. 在加密中丢失特殊的Unicode字符(C#)
- 12. 如何在zsh脚本中打印特殊的unicode字符
- 13. 使用Python unicode的特殊字符/汉字问题
- 14. 特殊字符
- 15. 特殊字符
- 16. 特殊字符
- 17. 特殊字符
- 18. 特殊字符
- 19. Nunit:uri中的特殊字符
- 20. StreamWriter中的特殊字符
- 21. flyway.conf中的特殊字符
- 22. CFMail中的特殊字符
- 23. python中的特殊字符
- 24. Xml中的特殊字符
- 25. NSString中的特殊字符
- 26. Flex中的特殊字符
- 27. ajaxcall中的特殊字符
- 28. iText中的特殊字符
- 29. Latex中的特殊字符
- 30. UNIX中的特殊字符
您可以尝试'utf8_encode/utf8_decode'函数。或者,使用''表示法。 –
不幸的是,两者都不起作用 – Ferenjito
您使用的字体可能不包含该字符。我可以让它与'dejavusans'一起工作。这里有一个[片段](http://pastie.org/private/j7ynkeo8ywyqg8gs2zug)进行快速测试。 – mermshaus