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

如何将XML中的图片数据插入XSL模板?(Apache-FOP转PDF场景)

Apache FOP中XML内嵌Base64图片的XSL处理方案

一、替换模板中的type和data值

你的XML里的图片数据是内嵌的Base64格式,要把type和data节点值插入到XSL模板的src属性中,最直接的方式是使用XSLT属性值模板(Attribute Value Templates),用大括号{}包裹XPath表达式,即可自动替换为对应节点的文本内容。

修改后的XSL模板片段:

<fo:external-graphic content-height="60pt" height="auto" width="auto"
                     src="url(data:{type};base64,{data})"/>

注:这段代码的前提是当前XSL模板的上下文节点是<image>节点(比如模板匹配规则为match="image")。如果上下文不是<image>,需要调整XPath,例如用{./image/type}和{./image/data}指定准确节点位置。

二、更优的图片插入方案

1. 优先使用外部图片文件

如果图片体积较大,内嵌Base64会大幅增加XML文件大小,同时提升FOP的内存占用和处理时间。更优的做法是:

  • 将图片保存为独立文件(如image.png)
  • 在XML中存储图片的文件路径:
    <image>
        <path>./images/image.png</path>
    </image>
    
  • XSL模板中直接引用路径:
    <fo:external-graphic content-height="60pt" height="auto" width="auto"
                         src="url({path})"/>
    

这种方式处理效率更高,也更便于图片的管理和复用。

2. 内嵌Base64的替代写法

如果必须内嵌图片,除了属性值模板,也可以用xsl:attribute手动构建src属性,效果完全一致:

<fo:external-graphic content-height="60pt" height="auto" width="auto">
  <xsl:attribute name="src">
    <xsl:text>url(data:</xsl:text>
    <xsl:value-of select="type"/>
    <xsl:text>;base64,</xsl:text>
    <xsl:value-of select="data"/>
    <xsl:text>)</xsl:text>
  </xsl:attribute>
</fo:external-graphic>

注意:确保XML中的Base64数据没有多余的换行或空格,否则Apache FOP可能无法正确解析图片。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 11:55:16