1

我在 codeigniter 中使用 DOMPDF 库从 mysql 获取数据。但是当我尝试为印地语字体生成 PDF 时,我的表中有一些字段是印地语(印地语的 unicode 形式),它没有显示正确的内容。请帮助我摆脱困境。

这是我的控制器

public function genrate_pdf($benef_detial,$count){
  $data['repo_result'] = $benef_detial;
  $data['total_benif'] = $count;
  $data['page_title'] = "Benificiary Details";
  $this->load->library('pdf');  
  $html = utf8_decode($this->pdf->load_view('public_reports/pdf_view',$data));
  $dompdf = new DOMPDF();
  $dompdf->load_html($html);
  $dompdf->set_paper("a4", "landscape" );
  $this->template->set_template('default');
  $this->pdf->render();
  $this->pdf->stream("public_reports/pdf_view.pdf"); }

我添加了元标记

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

在 pdf_view 和模板中

如果我用英语制作表格字段数据,那么它可以正常工作,但在印地语 unicode 的情况下,它会显示类似的结果

सिà¤,गरà¥OEली</p>

请帮我。

谢谢

4

2 回答 2

3

为了在 PDF 中正确呈现印地语字符,您需要检查一些事项:

1. 确保 PHP 使用的是 MBString(默认启用)

2. 确保您使用的是 Dompdf 0.6.0 或更高版本

3. 检查您的设置

如果使用 Dompdf 0.6.x 将 DOMPDF_ENABLE_UNICODE 设置为 true。Dompdf 0.7.0 及更高版本默认启用此功能。

您需要对字体目录和字体缓存目录进行读/写访问。默认情况下,这些目录位于 dompdf 目录下(两者都是 dompdf/lib/fonts)。在 Dompdf 0.6.x 中,这将是 DOMPDF_FONT_DIR 和 DOMPDF_FONT_CACHE 配置常量。在 Dompdf 0.7.0 和更高版本中,请务必设置 fontDir 和 fontCache 选项的值(例如$dompdf->set_option("fontDir", "/my/font/dir");)。

如果通过加载字体,@font-face请确保您还具有对临时目录的读/写访问权限。在 Dompdf 0.6.0 中检查 DOMPDF_TEMP_DIR 配置常量。在 Dompdf 0.7.0 和更高版本中设置 tempDir 选项。

此外,一般来说,如果您通过 HTTP 加载任何资源,请确保您启用了远程资源加载。在 Dompdf 0.6.0 中检查 DOMPDF_ENABLE_REMOTE 配置常量。在 Dompdf 0.7.0 和更高版本中设置 isRemoteEnabled 选项。

4.加载支持字体到Dompdf

加载字体的最简单和推荐的方法是使用@font-faceCSS 声明。

到目前为止,最简单的入门方法是使用 Google 字体,因为您所要做的就是链接到样式表。对于Hind 字体,您只需将以下内容添加到文档头部:

<link href="https://fonts.googleapis.com/css?family=Hind:400,700&amp;subset=devanagari,latin-ext" rel="stylesheet">

不幸的是Dompdf 不支持字体的数字权重。由于这是 Google 定义字体粗细的方式,因此您不能真正将其与 Dompdf 一起使用,直至 0.8.1(包括 0.8.1)。您可以解决这个问题,但最简单的方法是下载字体。

在您的文档样式表中:

@font-face {
  font-family: Hind;
  font-style: normal;
  font-weight: normal;
  src: url(http://example.com/hind.ttf) format('truetype');
}

注意:不要忘记定义您想要支持的各种权重和样式。

5.将font-family文本的样式属性设置为您加载的字体

在您的文档样式表中,使用适当的字体系列为相关容器设置样式。例如,如果您希望整个文档使用该字体,您只需将以下内容添加到您的文档样式表中:

* { 
  font-family: Hind, DejaVu Sans, sans-serif;
}

这在Unicode How-to中都有介绍。

于 2013-08-14T03:42:35.627 回答
0

对于您的问题,mpdf比 DomPDF 和其他更好。它具有以下特点

  1. 添加自定义字体

  2. 完整的 Unicode 支持

    它默认支持 100 多种语言,包括英语、印地语、泰米尔语、僧伽罗语、片假名、平假名、埃塞俄比亚语、泰语、马来语、卡纳达语、泰卢固语、古吉拉特语、孟加拉语、阿拉伯语、希腊语等等

  3. 复杂的脚本支持

3.1 从右到左的语言

阿拉伯语和希伯来语以从右到左的方向 (RTL) 书写。mPDF 可识别阿拉伯语和希伯来语语言并自动反转文本方向。

ألسّلام عليكم שלום

3.2 印度语、老挝语、藏语等

其他复杂的脚本在显示之前需要对字符进行一些处理。例如,一些元音由 2 个字符组成,放置在相邻辅音之前和之后,例如

U+0D1C + U+0D4C [元音AU] = [一起写成ജൌ]

ജ + ൌ = ജൌ

辅音连词是两个相邻的字符被写成一个单一的“连词”形式,例如

प + ॡ = पॣ

3.3 竖写

mPDF 不支持垂直书写(例如蒙古文和八字巴),尽管可以使用合适的字体显示单个字符。

  1. TrueType 集合
  2. Unicode 补充平面
于 2020-12-03T04:42:04.800 回答