我想將包含特殊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. 用字符串c中的unicode字符替換特殊字符#
- 4. Python的特殊字符的Unicode
- 5. 有特殊字符的Unicode檢查
- 6. 輸出RTF特殊字符爲Unicode
- 7. 將特殊字符存儲爲unicode
- 8. unicode字節中的特殊字符比iso字節長嗎?
- 9. 如何匹配Unicode特殊字符而不匹配特殊字符
- 10. 從unicode字符串去除特殊字符和標點符號
- 11. 在Python中對unicode特殊字符(符號)進行編碼?
- 12. 用於Django表單的help_text中的Unicode /特殊字符?
- 13. 由cfhttp返回的內容中的ColdFusion特殊Unicode字符
- 14. 如何替換PL/SQL中的一個特殊的Unicode字符
- 15. 在Java/Swing中顯示特殊的Unicode字符
- 16. 如何在AutoHotkey中發送特殊的unicode字符?
- 17. 如何在zsh腳本中打印特殊的unicode字符
- 18. SQL中的Access 2007和特殊/ Unicode字符
- 19. 在加密中丟失特殊的Unicode字符(C#)
- 20. 特殊的Unicode字符不會在Python 3中刪除
- 21. 數據庫表中的特殊Unicode問號字符
- 22. 使用Python unicode的特殊字符/漢字問題
- 23. 特殊字符
- 24. 特殊字符
- 25. 特殊字符
- 26. 特殊字符
- 27. 特殊字符
- 28. 特殊字符
- 29. 特殊字符
- 30. 特殊字符
您可以嘗試'utf8_encode/utf8_decode'函數。或者,使用''表示法。 –
不幸的是,兩者都不起作用 – Ferenjito
您使用的字體可能不包含該字符。我可以讓它與'dejavusans'一起工作。這裏有一個[片段](http://pastie.org/private/j7ynkeo8ywyqg8gs2zug)進行快速測試。 – mermshaus