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

iText HTML转PDF多字体失效:添加Cardo字体却用Times字体

解决iText 7 + pdfHTML自定义字体不生效的问题

我来帮你排查下这个字体不生效的问题,结合你用的iText 7.1.6和pdfHTML 2.1.3版本,大概率是这几个原因导致的,你可以一步步验证:

  • 确认HTML中字体家族名的正确性
    首先要确保你的HTML代码里正确指定了Cardo字体的家族名,比如:

    <style>
      body { font-family: 'Cardo', serif; }
      .bold-text { font-family: 'Cardo', serif; font-weight: bold; }
    </style>
    

    很多时候字体文件名(比如Cardo-Bold.ttf)和字体内部的家族名可能不一致,你可以用系统自带的字体查看工具(比如Windows字体查看器)确认字体的实际家族名,必须和HTML里写的完全匹配。

  • 替换addDirectory为手动加载单个字体文件
    DefaultFontProvider.addDirectory()有时候会因为字体元数据问题、目录内其他字体干扰等原因,无法正确识别并加载目标字体。建议你改为逐个加载字体文件,更可控:

    public static final String FONTS = "src/main/resources/fonts/"; 
    public void createPdf(String src, String dest) throws IOException { 
        ConverterProperties properties = new ConverterProperties(); 
        FontProvider fontProvider = new DefaultFontProvider(); 
        // 手动加载每个字体文件
        fontProvider.addFont(FONTS + "Cardo-Regular.ttf");
        fontProvider.addFont(FONTS + "Cardo-Bold.ttf");
        properties.setFontProvider(fontProvider); 
        HtmlConverter.convertToPdf(new File(src), new File(dest), properties); 
    }
    
  • 检查字体路径的运行时有效性
    你当前用的src/main/resources/fonts/是开发环境的路径,但当项目打包成JAR/WAR后,这个路径就不存在了。建议改用类路径来获取字体目录,确保运行时能访问到:

    // 获取类路径下的fonts目录
    URL fontDirUrl = getClass().getResource("/fonts/");
    String fontsPath = fontDirUrl.getPath();
    // 之后用fontsPath来加载字体
    
  • 验证字体是否真的被加载
    可以添加日志打印加载的字体列表,确认Cardo字体是否成功被加载:

    for (FontProgram font : fontProvider.getFonts()) {
        System.out.println("已加载字体: " + font.getFontNames().getFontFamily());
    }
    

    如果输出里没有Cardo相关的字体,说明路径或者字体文件本身有问题(比如文件损坏)。

  • 排查默认字体 fallback 逻辑
    iText的DefaultFontProvider默认会包含Times、Helvetica等标准字体,如果自定义字体加载失败,就会自动 fallback到这些标准字体。所以如果上面的步骤确认字体加载失败,优先解决路径和字体文件的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:23:58