Php html2pdf中的特殊unicode字符

Php html2pdf中的特殊unicode字符,php,html2pdf,Php,Html2pdf,我想转换包含特殊unicode字符'✝' 使用html2pf从html转换为pdf。但是,在呈现文档时,'✝' 显示为“?”。对此我能做些什么?✝" (U+271D拉丁十字)字符可能无法在PDF文档中正确呈现,因为使用的字体不支持该字符 以下是一些想法: 1) 将该字符替换为更常见的类似字符。“†”(U+2020匕首)将是一个明显的选择,因为它是普通Windows-1252字符集的一部分 代码: $var = str_replace("\xE2\x9C\x9D", "\xE2\x80\xA0",

我想转换包含特殊unicode字符'✝' 使用html2pf从html转换为pdf。但是,在呈现文档时,'✝' 显示为“?”。对此我能做些什么?

✝" (U+271D拉丁十字)字符可能无法在PDF文档中正确呈现,因为使用的字体不支持该字符

以下是一些想法:

1) 将该字符替换为更常见的类似字符。“†”(U+2020匕首)将是一个明显的选择,因为它是普通Windows-1252字符集的一部分

代码:

$var = str_replace("\xE2\x9C\x9D", "\xE2\x80\xA0", $var);
$var
必须包含UTF-8编码的数据。除此之外,我总是喜欢使用二进制表示法在源代码中插入更多的“不常见”字符。原因之一是:许多编辑器字体也不包含此类字符。这可以防止出现问题

2) 将PDF文档的字体更改为支持该字符的字体。以下是一个示例(与我对问题的评论中的片段相同):

$font='dejavusans';
$content=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');
$input=Output(_DIR__.'/test.pdf,'F');
呈现的PDF输出:

不过,解决方案2和3有一个相当大的缺点:您可能必须将额外的字体嵌入PDF文档(默认情况下是html2pdf),使其大小增加很多

PDF和tcpdf(html2pdf是基于此构建的)中有一个功能,只添加文档中实际出现的字体(称为子集)中的字符,但据我所知,html2pdf没有公开此功能

如果您需要支持许多不常见的Unicode字符,解决方案2可能是一个不错的选择。

✝(U+271D拉丁十字)字符可能无法在PDF文档中正确呈现,因为使用的字体不支持它

以下是一些想法:

1) 将该字符替换为更常见的类似字符。“†”(U+2020匕首)将是一个明显的选择,因为它是普通Windows-1252字符集的一部分

代码:

$var = str_replace("\xE2\x9C\x9D", "\xE2\x80\xA0", $var);
$var
必须包含UTF-8编码的数据。除此之外,我总是喜欢使用二进制表示法在源代码中插入更多的“不常见”字符。原因之一是:许多编辑器字体也不包含此类字符。这可以防止出现问题

2) 将PDF文档的字体更改为支持该字符的字体。以下是一个示例(与我对问题的评论中的片段相同):

$font='dejavusans';
$content=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');
$input=Output(_DIR__.'/test.pdf,'F');
呈现的PDF输出:

不过,解决方案2和3有一个相当大的缺点:您可能必须将额外的字体嵌入PDF文档(默认情况下是html2pdf),使其大小增加很多

PDF和tcpdf(html2pdf是基于此构建的)中有一个功能,只添加文档中实际出现的字体(称为子集)中的字符,但据我所知,html2pdf没有公开此功能

如果您需要支持许多不常见的Unicode字符,解决方案2可能是一个不错的选择。

✝(U+271D拉丁十字)字符可能无法在PDF文档中正确呈现,因为使用的字体不支持它

以下是一些想法:

1) 将该字符替换为更常见的类似字符。“†”(U+2020匕首)将是一个明显的选择,因为它是普通Windows-1252字符集的一部分

代码:

$var = str_replace("\xE2\x9C\x9D", "\xE2\x80\xA0", $var);
$var
必须包含UTF-8编码的数据。除此之外,我总是喜欢使用二进制表示法在源代码中插入更多的“不常见”字符。原因之一是:许多编辑器字体也不包含此类字符。这可以防止出现问题

2) 将PDF文档的字体更改为支持该字符的字体。以下是一个示例(与我对问题的评论中的片段相同):

$font='dejavusans';
$content=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');
$input=Output(_DIR__.'/test.pdf,'F');
呈现的PDF输出:

不过,解决方案2和3有一个相当大的缺点:您可能必须将额外的字体嵌入PDF文档(默认情况下是html2pdf),使其大小增加很多

PDF和tcpdf(html2pdf是基于此构建的)中有一个功能,只添加文档中实际出现的字体(称为子集)中的字符,但据我所知,html2pdf没有公开此功能

如果您需要支持许多不常见的Unicode字符,解决方案2可能是一个不错的选择。

✝(U+271D拉丁十字)字符可能无法在PDF文档中正确呈现,因为使用的字体不支持它

以下是一些想法:

1) 将该字符替换为更常见的类似字符。“†”(U+2020匕首)将是一个明显的选择,因为它是普通Windows-1252字符集的一部分

代码:

$var = str_replace("\xE2\x9C\x9D", "\xE2\x80\xA0", $var);
$var
必须包含以UTF-8编码的数据。除此之外,我总是喜欢使用二进制表示在源代码中插入更多的“不常见”字符