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

FOP 2+XSL生成PDF图片丢失:如何配置图片基础URL?

问题描述

迁移服务器后,使用FOP 2+XSL生成PDF时图片无法显示,日志提示:

[FOUserAgent] Image not found. URI: test/myimg2/logo.png (No context info available)

XSL中使用相对路径,图片完整路径为/myserv/mydir/test/myimg2/logo.png。已知FOP 2可通过FopFactoryBuilder设置基础URL,但当前代码通过FopConfParser读取userconfig.xml创建builder,现询问:

  1. 如何指定图片基础URL?
  2. 是否可在userconfig.xml中配置?
  3. 调试发现fop对象的BaseUri指向userconfig.xml,此情况是否正常?该BaseUri是否为图片搜索所用的基础URL?

注:未使用Servlet、JSF。

解决方案

1. 代码中指定图片基础URL

通过FopConfParser创建FopFactoryBuilder后,直接调用builder的setBaseURL()方法即可指定图片根路径,示例代码如下:

// 读取userconfig.xml创建解析器
FopConfParser parser = new FopConfParser(new File("path/to/userconfig.xml"));
FopFactoryBuilder builder = parser.getFopFactoryBuilder();
// 将本地路径转为URL格式,设置为基础路径
builder.setBaseURL(new File("/myserv/mydir/").toURI().toString());
// 后续创建FopFactory及Fop对象
FopFactory fopFactory = builder.build();

设置后FOP会自动把XSL中的相对路径和这个基础URL拼接,定位到正确的图片文件。

2. 在userconfig.xml中配置基础URL

可以直接在配置文件里配置,在<fop>根节点下添加<base-url>元素,填写图片根目录的URI(本地路径需用file协议):

<fop version="2.0">
  <!-- 其他原有配置 -->
  <base-url>file:/myserv/mydir/</base-url>
</fop>

解析该配置文件后,FopFactoryBuilder会自动读取这个值作为图片搜索的基础URL,无需额外代码设置。

3. BaseUri指向userconfig.xml的相关问题

这种情况是正常的。当通过FopConfParser读取配置文件时,FOP默认会将配置文件所在路径设为初始BaseUri,但这个值不是图片搜索依赖的基础URL。图片搜索使用的是你通过setBaseURL()方法或配置文件<base-url>设置的路径,和这个默认BaseUri没有关联,只需按前两种方式设置正确的基础路径即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 21:36:29