使用XSL-FO与Apache FOP 1.1在PDF中插入图片报错求助
解决fo:external-graphic不允许使用src属性的问题
问题核心原因
报错通常来自两个关键点:
- XSL文件未声明XSL-FO标准命名空间,导致解析器无法识别
fo:external-graphic的合法属性 - 图片路径的URI格式不符合FOP的解析要求
修复步骤
- 添加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">
- 修正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"/>
- 验证资源加载配置
如果用类路径引用,需确保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
相关产品推荐
相关产品推荐

