Vtiger CRM 6 导出 PDF 中文乱码解决方案

本文最后更新于2014年12月31日,已超过半年没有更新,如果内容失效,请反馈,谢谢!

网上有很多 CRM 5.x 导出中文 PDF 的解决方案,但对于 CRM 6 输出 PDF 中文解决方案较少介绍。有网友反应使用 5.x 的方法有些问题,我没有试过,这里介绍我使用的一种解决方法。 Vtiger CRM 使用的是 TCPDF 输出 PDF 的解决方案,只不过版本比较老,貌似是 4.0,目前 TCPDF 最新版本为 6.0。TCPDF 中对简体中文的支持可以使用 cjp0cs 字体,也可以使用 stsongstdlight 或者 droidsansfallback 字体。具体可以下载 TCPDF 完整源文件测试 TCPDF/example/example_038.php 文件。本人对 Vtiger 代码不是很熟,按我的理解中文输出无非就是 TCPDF 的相关设置问题。下面分别介绍非嵌入字体和嵌入字体的方法。

非嵌入 stsongstdlight 字体

在 Vtiger CRM 6 中已内置 stsongstdlight 字体,我们只需要引用即可。非嵌入方式需要支持 stsongstdlight (表示为 “STSongStdLight” 字体,这是Adobe Reader的默认简体中文字体)字体的 PDF 阅读器,未内置此字体的 PDF 阅读器显示就会有问题。
缺点:需要 PDF 阅读器安装字体
优点:生成的 PDF 文件小,速度快,一般就几百KB
以下两种方法可以任选一种尝试。
方法一:
在 TCPDF.php 文档中增加 stsongstdlight 字体的支持:
打开安装目录下 vtlib/Vtiger/PDF/TCPDF.php 文件
找到 function SetFont() 函数中的:

//Select a font; size given in points
     if ($size == 0) {
	$size = $this->FontSizePt;
     }

在其后面(大约是第 76 行)插入以下代码:

     //解决中文导出PDF乱码,加上内置的宋体支持Maie-2014-11-20
     $family = 'stsongstdlight';

保存,上传覆盖,导出中文乱码问题解决。
懒人点击这里下载修改好的 Vtiger 导出 PDF 中文乱码修复文件

方法二:
Vtiger 默认是使用的 freeserif 字体,我们可以把它替换成 stsongstdlight 字体:
找到 Vtiger 安装目录下 vtlib\Vtiger\PDF\inventory\HeaderViewer.php 文件,搜索其中的

$->SetFont('freeserif'

或者只搜索

'freeserif'

全部替换为:

'stsongstdlight'

STSongStdLight 字体效果

嵌入 droidsansfallback 字体

为了保证生成的PDF文件在任何环境下都有同样的显示效果,在 PDF 中嵌入字体有里也是必需的。但有些字体太大(比如微软雅黑等),有些不支持 Unicode ,这里我们综合比较选用 Droid Sans Fallback 字体,原因如下:

  • 首先它是免费字体;
  • 其次它也是 Unicode 编码,支持简体繁体中文以及日文韩文等等;
  • 然后它的体积很小,不超过5M。

Droid Sans Fallback 字体是 ttf 字体,需要转换为 TCPDF 支持的字体,虽然TCPDF 提供相应的转换工具,这里我们不再详细介绍,直接使用转换好的字体文件即可。
点击这里下载 PHP 和 TCPDF 支持的 Droid Sans Fallback 字体(sourceforge.net)
来个百度网盘备份吧: 点击这里下载 PHP 和 TCPDF 支持的 Droid Sans Fallback 字体(百度网盘)

将下载后的解压得到的下列三个文件拷贝到 Vtiger 安装目录下libraries\tc\fonts\ 目录下 droidsansfallback.ctg.z droidsansfallback.php droidsansfallback.z 修改 Vtiger 文件的步骤同上类似: 找到 Vtiger 安装目录下 vtlib\Vtiger\PDF\inventory\HeaderViewer.php 文件,搜索其中的

$pdf->SetFont('freeserif'

或者只搜索

'freeserif'

全部替换为:

'droidsansfallback'

嵌入字体的缺点是文件尺寸太大。同样的文档不嵌入字体只有200 多 KB,嵌入字体后变为近 2MB,如何使用只有自己取舍了。

Droid Sans Fallback 字体效果

上述方法仅为抛砖引玉,经简单测试可用,欢迎大家提供反馈更完善的方法。

除非注明,流浪天下 文章均为原创,转载请以链接形式注明出处。
本文链接地址:
订阅本站:http://maie.name/feed投稿联系:m[at]maie.name

猜你也喜欢:

共有 15 条评论

  1. 请教下老大,vtiger在迁移的时候,直接复制到完全一样的系统环境下,为什么无法正常使用

    1. 你这说的太空洞了。迁移时建议:1)先导出数据库,再创建并导入数据库;2)复制目录;3)删除config文件;4)重新运行install.php安装;5)连接配置数据库

  2. 亲,问下 6.0版本 在导入cvs的时候出现乱码,这个怎么破?谢谢!

  3. 我的6rc版本根本就无法选择产品名称,点击开后是空的,知道是什么原因吗?

      1. 从产品出发做报价单可以,从客户出发做报价单不行,估计还是软件bug吧,中文pdf尝试了下没弄成,明后天再看看

          1. 我也不知道为什么不行,等等看其他人用的如何?我用的是GA版本,说错了。你可以尝试下你的软件,在客户界面右侧点报价单,这样话选不上产品和服务。至少我的现状是这样

            1. 不清楚了,难不成是我的php版本太低?安装时有报错,我没管。更麻烦的是我的安装在群晖NAS上,还不知道怎么升级(默认crm5.4的),慢慢研究了

            2. 是不是浏览器问题,已知 Vtiger 6.0 在 IE11 以下的浏览器中点击部分菜单、下拉列表会无响应,在 Webkit 内核的浏览器上一切正常。

            3. 不是浏览器问题,我的NAS默认版本还是5.4,等厂家系统升级后再折腾吧,估计是安装的时候参数问题

发表评论

电子邮件地址不会被公开。 必填项已用*标注