fo:external-graphic src =“data:image / png; base64,...”作为属性

时间:2014-03-17 14:26:32

标签: xml xslt xsl-fo apache-fop

我的xslt中有一个小节点,如:

    <fo:block>
    <fo:external-graphic src="data:image/png;base64, //base64 code//" />
    </fo:block>

不要混淆我的主样式表,我创建了另一个x64lt,它将base64图像作为参数,如:

     <xsl:param name="logo">data:image/png;base64, //base64 code//</xsl:param>

如果我将主样式表更改为:

    .
    .
    <xsl:include href="image.xsl" />
    .
    .
    <fo:block>
    <fo:external-graphic>
    <xsl:attribute name="src"><xsl:value-of select="$logo" /></xsl:attribute>
    </fo:external-graphic>
    </fo:block>

第一个我得到堆大小的错误,在使用-Xmx4096m之后我得到一个解析错误..当我在主样式表中嵌入了base64图像时,我不需要4gb堆和pdf i make有意图的图像。

使用Apache FOP 1.1并抱歉我的英语,而不是我的主要语言..

1 个答案:

答案 0 :(得分:3)

我想你正在尝试使用属性值模板。使用{}表示$logo不是文字值,而是变量或参数。

<fo:external-graphic src="{$logo}" />

就像这样,它更加简洁,因为您不必键入xsl:value-of

否则,$logo将存储为文字文本内容。阅读有关属性值模板here


为了说明这一点:

<强>样式表

<?xml version="1.0" encoding="utf-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">

   <xsl:output method="xml" indent="yes"/>

   <xsl:template match="/">
      <xsl:param name="logo">data:image/jpg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/4QNaRXhpZgAATU0AKgAAAAgADQEPAAIAAAAGAAAAqgEQ</xsl:param>

      <fo:external-graphic src="{$logo}"/>
   </xsl:template>

</xsl:stylesheet>

<强>输出

<?xml version="1.0" encoding="utf-8"?>
<fo:external-graphic xmlns:fo="http://www.w3.org/1999/XSL/Format" src="data:image/jpg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/4QNaRXhpZgAATU0AKgAAAAgADQEPAAIAAAAGAAAAqgEQ"/>