dompdf中的特殊字符

16

我成功地将HTML转换成PDF,但特殊字符无法正常显示。

以下是我试图显示的一个特殊字符,它可以在我的Mac浏览器中简单地放在HTML文档中显示(但不能在我的Windows计算机上显示)。

<?php
require_once("../dompdf_config.inc.php");
$html = '&#8364;';
$dompdf = new DOMPDF(); $html = iconv('UTF-8','Windows-1250',$html);
$dompdf->load_html($html);
$dompdf->render();
$dompdf->stream("contract.pdf");
exit(0);
?>

当渲染PDF时,我一直得到一个"?"(问号)。

我知道有很多关于特殊字符的问题已经被记录下来,但是我想尝试使用我的实际代码来解决这个问题。

如果DomPdf不是推荐的HTML转PDF工具,我愿意接受任何其他建议!


你正在使用的字体中是否包含了你想要插入到 PDF 中的字符? - Orbling
1
我不知道那是一个因素。我该如何找出来? - coffeemonitor
5个回答

18

我在将一个 UTF-8 HTML 页面转换为 DOMPDF 时遇到了问题。

我只是通过添加以下代码简单地解决了这个问题:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

在 < head > 标签之间。 如果您使用自己的编码类型进行设置,它可能是一种替代方法。

注意: 不要在同一个pdf实例上使用 stream()output() 方法。如果这样做,它将无法正常工作。


我在这里浪费了很多时间,不要在同一个pdf实例上使用stream()output()方法。如果你这样做,它将无法工作。 - dbr
这个符号“<”在我的Dom Pdf中没有被打印出来,请帮忙。 - Jignesh Mistry
@JigneshMistry 尝试使用 < 代替。 - Ricardo Martins
无法添加,因为数据库中保存的数据如下:“鼻塞伴有阻塞<夜间。否则改善。最后一次服药...Kali carb 1M”,所以在阻塞后,dompdf 中不会显示任何内容。 - Jignesh Mistry
替换为 "obstruction< night" - Ricardo Martins

10

在尝试了所有网络上的解决方案之后,我成功地解决了问题,而不需要修改dompdf。问题出在HTML内容上。我只需添加正确和适当的HTML结构并设置字体即可。在v0.6.0和v0.6.1上进行了测试。以下是我的代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

<head>
  <meta http-equiv="Content-Type" content="charset=utf-8" />
  <style type="text/css">
    * {
      font-family: "DejaVu Sans Mono", monospace;
    }
  </style>
</head>

<body>your content ćčžšđ...</body>

</html>

8

DOMPDF Latin Turkish (Türkçe)字符问题,我的解决方案100%有效。

服务器要求控制: 服务器要求控制

字符“dejavu sans mono”(土耳其支持)或:

步骤1:编辑dompdf_config.inc.php为

mb_internal_encoding('UTF-8');
def("DOMPDF_UNICODE_ENABLED", true);

步骤2:编辑lib/fonts/dompdf_font_family_cache.dist.php文件以添加代码:

'futural' => 
  array (
    'normal' => DOMPDF_FONT_DIR . 'FUTURAL',
    'bold' => DOMPDF_FONT_DIR . 'FUTURAL',
    'italic' => DOMPDF_FONT_DIR . 'FUTURAL',
    'bold_italic' => DOMPDF_FONT_DIR . 'FUTURAL',
  ),

步骤3:下载字体文件并复制到lib/fonts文件夹中。 下载字体文件链接 http://www.2shared.com/file/k6hdky_b/fonts.html 步骤4:您的代码编辑示例:
require_once("dompdf_config.inc.php");
$html='<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<style>
    html{padding:-30px;}
    body { font-family: futural; }
</style>
</head><body>';
$html.='ı İ Ş ş ç Ç ö Ö ü Ü ğ Ğ ÿ þ ð ê ß ã Ù Ñ È »  ¿ İsa Şahintürk';
$html.='</body></html>';
if ( isset( $html ) ) {
    if ( get_magic_quotes_gpc() )
    $html = stripslashes($html);
    $old_limit = ini_set("memory_limit", "16M");
    $dompdf = new DOMPDF();
    $dompdf->load_html($html,'UTF-8');
    $dompdf->set_paper('a4', 'portrait');// or landscape
    $dompdf->render();
    $dompdf->stream("limitless.pdf");
exit(0);
}

结束完成 PDF > 示例在此输入图片描述 http://limitsizbilgi.com/pdf/dompdf-chartest.pdf


我的服务器缺少mbstring扩展。感谢您的答案。 - Ejaz

5
您需要使用另一个字符集,例如dejavu Sans Mono。请添加您的代码。
<style>
*{
    font-family:"DeJaVu Sans Mono",monospace;
}
</style>

我也在这个视频中提到了它。


4

0.6.x版本之前对于iso-8859-1编码以外的字符支持有限。在0.5.x中,可以使用适当的Windows ANSI字符代码(&#0128;)来支持欧元,但是其他情况需要进行一些PDF编码操作。

0.6.0版本具有更好的“特殊”字符支持。默认编码基于Windows ANSI(PDF 1.3规范中少数被认可的编码之一)。您可以通过加载基于Unicode的字体,在dompdf中启用Unicode并在文档中指定该编码来实现更好的字符支持。

以下内容适用于dompdf 0.6.0或更高版本:

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>
  <p></p>
</body>
</html>

(或者为了方便使用欧元实体&euro;在你的测试中)

有一份文件概述了需要启用DOMPDF中的Unicode支持的步骤。 此外,阅读此答案可以了解如何加载字体


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接