ProcessMaker中TCPDF无法渲染阿拉伯字符的问题求助
ProcessMaker v3.8.1 导出PDF时阿拉伯字符显示方块/问号的解决方案
问题场景
在Windows Server 2016环境下手动安装的ProcessMaker v3.8.1(内置TCPDF v6.4.4),导出HTML、DOC格式文件时阿拉伯字符显示正常,但导出PDF时字符变为方块或问号。已尝试以下方案未解决:
- 下载安装arialuni字体
- 在OutputDocument.php中设置
$pdf->SetFont('arialuni', '', 12) - 升级TCPDF版本
- 在pmos.conf添加
AddDefaultCharset UTF-8 - 通过ProcessMaker命令
./tcpdf_addfont.php -b -t TrueTypeUnicode -i {installation path}/shared/fonts/arialuni.ttf添加字体
针对性解决方案
1. 确认字体权限与路径
Windows环境下需保证ProcessMaker运行账户能读取字体文件:
- 将
arialuni.ttf复制到ProcessMaker的TCPDF字体目录,默认路径为{ProcessMaker安装目录}/vendor/tecnickcom/tcpdf/fonts - 右键字体文件→「属性」→「安全」,给ProcessMaker对应的运行账户(如IIS_IUSRS或应用池账户)添加「读取」权限
2. 修正字体注册命令
Windows下需使用兼容的路径格式,在ProcessMaker的PHP环境中执行字体注册:
- 打开命令提示符,切换到
{ProcessMaker安装目录}/vendor/tecnickcom/tcpdf目录 - 执行命令(替换为实际Windows格式路径):
php tcpdf_addfont.php -b -t TrueTypeUnicode -i C:\processmaker\shared\fonts\arialuni.ttf
- 确认
fonts目录生成arialuni.php、arialuni.z等文件
3. 开启RTL支持与字体配置
阿拉伯语为从右到左(RTL)语言,需在代码中同时开启RTL模式:
- 打开
{ProcessMaker安装目录}/workflow/engine/classes/class.outputDocument.php - 修改字体设置代码:
$pdf->SetFont('arialuni', '', 12, '', true); // 启用RTL排版 $pdf->setRTL(true); // 开启字体子集化,减少文件体积同时保证字符显示 $pdf->SetFontSubsetting(true);
注:可查看fonts/arialuni.php中的$fontname变量,确认字体注册名称是否为arialuni
4. 修正HTML模板编码
确保输出文档的HTML模板编码正确:
- 在模板
<head>标签内添加编码声明:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- 保存模板时选择UTF-8编码,避免字符转码丢失
5. 调整TCPDF区域配置
修改TCPDF默认语言配置以适配阿拉伯语:
- 打开
{ProcessMaker安装目录}/vendor/tecnickcom/tcpdf/config/tcpdf_config.php - 修改以下配置:
$tcpdf_config['default_lang'] = 'ar'; $tcpdf_config['font_subsetting'] = true;
验证步骤
- 清空ProcessMaker缓存目录:
{ProcessMaker安装目录}/workflow/public_html/cache - 重新生成输出文档,检查阿拉伯字符显示情况
内容的提问来源于stack exchange,提问作者Aboud Murad
相关产品推荐
相关产品推荐

