在Codeigniter中使用DOMPDF的印地语字体

时间:2013-08-12 09:25:42

标签: fonts dompdf hindi

我在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和模板中的

如果我用英语制作表格字段数据然后正常工作但是在hindi unicode的情况下它显示结果如

  

सिà¤,à¤-澶°A¥OEली

请帮助我。

由于

2 个答案:

答案 0 :(得分: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-face CSS声明。

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

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

不幸的是Dompdf does not support numeric weights字体。由于这是谷歌定义字体权重的方式,因此您无法真正使用Dompdf,包括0.8.1。你可以解决这个问题,但最简单的方法是下载字体。

在您的文档样式表中:

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

注意:不要忘记要支持的define the various weights and styles

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

在文档样式表样式中,相关容器具有相应的字体系列。例如,如果您希望整个文档使用该字体,则只需将以下内容添加到文档样式表中即可:

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

Unicode How-to已涵盖这一点。

答案 1 :(得分:0)

对于您的问题,mpdf比DomPDF和其他版本更好。它具有以下功能

  1. Add custom fonts

  2. Full Unicode support

    它支持100多种语言,包括英语,印地语,泰米尔语,僧伽罗语,片假名,平假名,ETHIOPIC,泰语,马来阿拉姆语,卡纳达语,泰卢古语,古吉拉提语,孟加拉语,阿拉伯语,希腊语以及默认情况下的更多语言

  3. 复杂脚本支持

3.1从右到左语言

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

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

3.2印度文,老挝文,藏文等

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

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

ജ+ ൌ = ജൌ

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

प+ॡ=पॣ

3.3垂直写作

尽管可以使用合适的字体显示各个字符,但mPDF(例如蒙古语和Phags-pa)不支持垂直书写。

  1. TrueType集合
  2. Unicode补充平面