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

如何在Apache FOP的fop.xconf中配置跨平台字体相对路径?

解决FOP配置中字体相对路径问题(旧版本兼容)

1. 直接指定类路径下的字体文件(推荐方案)

由于你的字体文件放在src/main/resources/fonts/下,打包后会进入项目的classpath,直接使用classpath协议指定单个字体是最可靠的方式,旧版本FOP也支持该协议。

修改后的fop.conf配置:

<?xml version="1.0" encoding="utf-8" ?>
<fop>
  <renderers>
    <renderer mime="application/pdf">
      <fonts>
        <font kerning="yes" embed-url="classpath:fonts/Arial.ttf" embedding-mode="subset">
          <font-triplet name="Arial" style="normal" weight="400"/>
        </font>
      </fonts>
    </renderer>
  </renderers>
</fop>

该配置在开发阶段和生产环境(打包成Jar后)都能正常加载字体,无需依赖系统路径或外部目录。

2. 目录方式配置(仅适合开发环境)

如果坚持使用<directory>配置,需要在初始化FOPFactory时设置正确的baseUri,让FOP以此为基准解析相对路径:

Java代码初始化:

// 将项目根目录设为baseUri
FopFactory fopFactory = FopFactory.newInstance(new File(System.getProperty("user.dir")).toURI());
// 加载配置文件
fopFactory.setUserConfig(new File("fop.conf"));

对应fop.conf的目录配置:

<?xml version="1.0" encoding="utf-8" ?>
<fop>
  <renderers>
    <renderer mime="application/pdf">
      <fonts>
        <directory>src/main/resources/fonts/</directory>
      </fonts>
    </renderer>
  </renderers>
</fop>

注意:这种方式仅在开发阶段有效,打包成Jar后src目录不存在,无法加载字体,因此不推荐用于生产环境。

3. 验证字体加载状态

开启FOP的字体调试日志,确认字体是否成功加载:
将org.apache.fop.fonts的日志级别设置为DEBUG,日志中会输出字体查找和加载的详细过程,可快速排查路径或配置错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:25:32