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

iTextPDF从HTML生成PDF时Linux环境波兰语/捷克语字符丢失问题

iTextPDF生成PDF中欧特殊字符Linux环境不显示解决方案

根因说明

该问题是因为iText默认依赖运行环境的系统字体渲染字符,你本地运行的Windows/macOS系统默认预装了支持拉丁扩展字符集的字体,可正常渲染波兰语、捷克语的变音字符;而精简部署的Linux服务器默认仅安装基础英文字体,不支持上述特殊字符,所以出现字符被跳过的情况,和你的UTF-8编码配置无关。

可落地解决思路

  • 方案1:将开源字体打包进项目(优先推荐,可保证多环境渲染一致性)
    选择完全覆盖中欧字符的开源免费商用字体,比如DejaVu Sans、Noto Sans LCG,将字体ttf文件放入项目resources目录下,修改iText解析代码,注册内置字体避免依赖系统字体:
    // 初始化自定义字体提供者,设置不扫描系统字体
    XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
    // 注册项目内置字体,替换为你实际的字体文件路径
    fontProvider.register(getClass().getResource("/fonts/DejaVuSans.ttf").getPath());
    
    // 替换原有parseXHtml方法,传入自定义字体提供者
    XMLWorkerHelper.getInstance().parseXHtml(pdfWriter, document, inputStream, Charset.forName("UTF-8"), fontProvider);
    
    若你的HTML代码中指定了font-family属性,需要保证注册的字体名称和HTML中配置的字体名称匹配,也可以设置该字体为全局 fallback 字体兜底所有字符渲染。
  • 方案2:在Linux服务器安装对应字体
    直接在服务端安装支持中欧字符的字体包即可,无需修改代码:
    • CentOS/RHEL 系列执行命令:yum install dejavu-sans-fonts dejavu-serif-fonts
    • Debian/Ubuntu 系列执行命令:apt install fonts-dejavu
      字体安装完成后重启Java服务即可生效。

注意:生产环境不要使用有版权风险的商用字体,优先选择开源可免费商用的字体规避法律风险。

内容的提问来源于stack exchange,提问作者Mateusz Sobczak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:54:02