You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;

验证步骤

  1. 清空ProcessMaker缓存目录:{ProcessMaker安装目录}/workflow/public_html/cache
  2. 重新生成输出文档,检查阿拉伯字符显示情况

内容的提问来源于stack exchange,提问作者Aboud Murad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 09:12:24