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

使用XSL-FO与Apache FOP 1.1在PDF中插入图片报错求助

解决fo:external-graphic不允许使用src属性的问题

问题核心原因

报错通常来自两个关键点:

  • XSL文件未声明XSL-FO标准命名空间,导致解析器无法识别fo:external-graphic的合法属性
  • 图片路径的URI格式不符合FOP的解析要求

修复步骤

  1. 添加XSL-FO命名空间
    在XSL文件的根节点xsl:stylesheet中必须声明FO命名空间,否则解析器会把带fo:前缀的元素视为自定义元素,不认可src这类标准属性:
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:fo="http://www.w3.org/1999/XSL/Format">
  1. 修正external-graphic的写法
    确保src属性的URI格式正确,同时建议添加尺寸属性避免图片显示异常:
<fo:external-graphic 
    src="url(file:///home/someDir/resources/Logo.jpg)"
    content-width="60mm" 
    content-height="auto"/>
  • 绝对路径严格遵循file:///格式(三个斜杠)
  • 若图片放在Maven项目src/main/resources目录下,推荐用类路径引用(更适配项目打包):
<fo:external-graphic 
    src="url(classpath:Logo.jpg)"
    content-width="60mm"/>
  1. 验证资源加载配置
    如果用类路径引用,需确保FOP能读取classpath资源:Maven打包时要保证资源文件正确输出到classpath下,或在Camel的FOP组件中配置合适的ResourceResolver。

修正后的代码片段示例

<fo:table-cell>
    <xsl:attribute name="text-align">left</xsl:attribute>
    <fo:block>
        <fo:external-graphic 
            src="url(file:///home/someDir/resources/Logo.jpg)"
            content-width="60mm" 
            content-height="auto"/>
    </fo:block>
</fo:table-cell>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 17:11:13