Freemarker 在我的 fo:table-body 之外动态引用标签
Freemarker Dynamically reference tag outside my fo:table-body
我无法向您展示完整的代码,但以下基本上是我在 fo-table-body 标记内生成动态代码所采取的步骤。
在 <fo:table-body>
内的某个阶段,我希望能够引用名为 "ref" 的块并将值从里到外更改。这可能吗?
<#assign value="Hello World"/>
<fo:block name"ref">
<fo:inline font-weight="bold">Value: </fo:inline>
<fo:inline>${Value}</fo:inline>
</fo:block>
<fo:table-body start-indent="0pt">
// All sorts of data inside the tags
<fo:table-row>
<fo:table-cell></fo:table-cell>
</fo:table-row>
</fo:table-body>
FreeMarker 模板在执行时不断写入输出,因此如果您已经打印了一段输出,那么它就不再由 FreeMarker 控制了。 (它可能仍然位于 Writer
后面的某个缓冲区中,但 FreeMarker 并不知道这一点。)你可以做的是首先生成依赖部分(fo:table-body
),但是捕获它而不是打印它,如 <#assign tableBody><fo:table-body...>...</fo:table-body></#assign>
,然后像往常一样生成依赖部分(fo:block
),然后打印捕获的部分(${tableBody}
,或 <#noescape>${tableBody}</#noescape>
,具体取决于哪种自动-转义你使用)。
我无法向您展示完整的代码,但以下基本上是我在 fo-table-body 标记内生成动态代码所采取的步骤。
在 <fo:table-body>
内的某个阶段,我希望能够引用名为 "ref" 的块并将值从里到外更改。这可能吗?
<#assign value="Hello World"/>
<fo:block name"ref">
<fo:inline font-weight="bold">Value: </fo:inline>
<fo:inline>${Value}</fo:inline>
</fo:block>
<fo:table-body start-indent="0pt">
// All sorts of data inside the tags
<fo:table-row>
<fo:table-cell></fo:table-cell>
</fo:table-row>
</fo:table-body>
FreeMarker 模板在执行时不断写入输出,因此如果您已经打印了一段输出,那么它就不再由 FreeMarker 控制了。 (它可能仍然位于 Writer
后面的某个缓冲区中,但 FreeMarker 并不知道这一点。)你可以做的是首先生成依赖部分(fo:table-body
),但是捕获它而不是打印它,如 <#assign tableBody><fo:table-body...>...</fo:table-body></#assign>
,然后像往常一样生成依赖部分(fo:block
),然后打印捕获的部分(${tableBody}
,或 <#noescape>${tableBody}</#noescape>
,具体取决于哪种自动-转义你使用)。