前两天买了一个账单源码,基于laravel框架开发,其中有一个账单下载功能,因程序支持多语言,当切换到中文时,下载的账单pdf文件出现了???的乱码,在网上找了一些资料借鉴,最终终于将这个问题解决。

Dompdf可以把HTML内容生成PDF文件,但默认不支持中文显示。
如果纯是本地测试需要先请确认已通过Composer在项目中安装好Dompdf库,官方地址为 https://github.com/dompdf/dompdf

下载Dompdf的工具包,地址为 https://github.com/dompdf/utils

下载完成后,解压,复制其中的load_font.php文件到项目下的verdor/dompdf/dompdf目录下,与lib和src目录同级。

下载字体文件
可以使用任意支持中文的字体文件,这里以宋体(simsun)为例,下载地址:https://ufonts.com/download/simsun/82073.html
下载完成后,我们把该字体文件simsun.ttf直接放在D盘根目录下。

安装字体
在放置load_font.php的dompdf目录下,使用系统命令行工具执行该文件,具体命令如下:

D:\myproject\vendor\dompdf\dompdf> php load_font.php simsun D:\simsun.ttf

       ?                                             ?          ? 
 dompdf所在目录                                   生成字体名称     下载字体路径

Linux下的方法也基本一样,只需要修改各自的路径即可。

检查字体是否安装成功
如果字体安装成功,则可以在项目的vendor/dompdf/dompdf/lib/fonts目录中看到新生成的simsun.ttf及simsun.ufm文件。
并且可以在该目录下的dompdf_font_family_cache.php文件中看到如下相关信息:

'simsun' => array(
'normal' => $fontDir . '/simsun',
'bold' => $fontDir . '/simsun',
'italic' => $fontDir . '/simsun',
'bold_italic' => $fontDir . '/simsun',
)

 

使用中文字体
在需要进行pdf转换的HTML中使用中文字体的方式与普通的HTML相同,可以是内联样式,也可以使用在<style>标签中。

font-family:simsun;//使用刚刚生成的simsun字体

上面基本是百度能找到的结果,我测试的源码叫做billar,方式略有不同,但差别不大,需要注意的是,billar这个源码,加载字体的php文件名称是dompdf_font_family_cache.dist.php

安装字体后的文件是dompdf_font_family_cache.php,那么就需要将dompdf_font_family_cache.php的内容复制到dompdf_font_family_cache.dist.php,并且注意变量名称是否一致。

然后去dompdf/lib目录找到Cpdf.php 编辑他,在里面定义public $defaultFont = ‘./fonts/simsun.ttf’; 使用simsun字体。

最后去生成pdf账单的php文件里,将字体设置为font-family:simsun;即可

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。