我在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ली
请帮助我。
由于
答案 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&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和其他版本更好。它具有以下功能
它支持100多种语言,包括英语,印地语,泰米尔语,僧伽罗语,片假名,平假名,ETHIOPIC,泰语,马来阿拉姆语,卡纳达语,泰卢古语,古吉拉提语,孟加拉语,阿拉伯语,希腊语以及默认情况下的更多语言
复杂脚本支持
3.1从右到左语言
阿拉伯语和希伯来语以从右到左的方向(RTL)书写。 mPDF可以识别阿拉伯语和希伯来语,并自动反转文本方向。
ألسّلامعليكمשלום
3.2印度文,老挝文,藏文等
其他复杂脚本在显示之前需要对字符进行一些处理。例如,某些元音由2个字符组成,例如在相邻辅音之前和之后放置。
U + 0D1C + U + 0D4C [元音AU] = [一起写为ജൌ]
ജ+ ൌ = ജൌ
辅音连词是两个相邻字符以单个“连词”形式写成的形式,例如
प+ॡ=पॣ
3.3垂直写作
尽管可以使用合适的字体显示各个字符,但mPDF(例如蒙古语和Phags-pa)不支持垂直书写。