xsl:fo retrieve-marker 无效 child
xsl:fo retrieve-marker not valid child
我的 xsl:fo 转换需要 table 中的 <fo:retrieve-marker>
,但我不知道这是否可能,因为我使用 FOP 处理器进行转换。
如果我在 table 中使用 <fo:retrieve-marker>
,我总是会收到一条错误消息,指出标签必须位于静态内容中。
这是带有标记
的 table
<xsl:call-template name="MMEL-Table-Header"/>
<!-- Bottom table Line -->
<fo:table-footer>
<fo:table-row>
<fo:table-cell>
<fo:marker marker-class-name="footer-continued"> <fo:inline>(continued)</fo:inline></fo:marker>
</fo:table-cell>
</fo:table-row>
</fo:table-footer>
<fo:table-body >
<xsl:variable name="identification">
<xsl:value-of select="ident/message"/>
</xsl:variable>
<xsl:apply-templates select="ident"><xsl:with-param name="ident" select="$identification"/></xsl:apply-templates>
<xsl:apply-templates select="provisos/proviso"><xsl:with-param name="ident" select="$identification"/></xsl:apply-templates>
<fo:table-row>
<fo:table-cell> <fo:retrieve-marker retrieve-position="first-starting-within-page" retrieve-class-name="footer-continued" retrieve-boundary="document" /> </fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
(披露:我是 FOP 开发人员)
此示例具有动态 table header 和 table 页脚,因此它应该满足您的要求:
- 如果 table 适合单个页面,则 table header 和 table 页脚均为空
- 如果 table 被分成几页
- 第 页面的 table header 是空的,而在接下来的页面中显示“(继续)”
- table last 页的页脚是空的,而在前面的页脚中显示“(在下一页继续)”
- 使用 FOP 2.0 测试(旧版本 不 支持 table 标记);由于 FOP 当前的限制,non-breaking space
 
在 table header 和 table页脚是必需的 "placeholder"(header / 页脚尺寸只计算一次,没有标记内容)
- 没有 formatter-specific 扩展,因此这也可以与其他格式化程序一起使用(XslFormatter 支持 table 标记;XEP 有替代解决方法)
FO片段:
<fo:table table-layout="fixed" width="100%">
<fo:table-column column-width="100%"/>
<fo:table-header>
<fo:table-row>
<fo:table-cell>
<fo:block>
<fo:retrieve-table-marker retrieve-class-name="mc1"
retrieve-position-within-table="first-starting"
retrieve-boundary-within-table="table-fragment"/>
 
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-header>
<fo:table-footer>
<fo:table-row>
<fo:table-cell>
<fo:block>
<fo:retrieve-table-marker retrieve-class-name="mc2"
retrieve-position-within-table="last-ending"
retrieve-boundary-within-table="table-fragment"/>
 
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-footer>
<fo:table-body>
<!-- first row -->
<fo:table-row>
<fo:table-cell>
<fo:block>
<fo:marker marker-class-name="mc1"></fo:marker>
<fo:marker marker-class-name="mc2">(continues on the next page)</fo:marker>
cell1
</fo:block>
</fo:table-cell>
</fo:table-row>
<!-- middle row -->
<fo:table-row>
<fo:table-cell>
<fo:block>
<fo:marker marker-class-name="mc1">(continued)</fo:marker>
<fo:marker marker-class-name="mc2">(continues on the next page)</fo:marker>
cell2
</fo:block>
</fo:table-cell>
</fo:table-row>
<!-- ... other similar rows ... -->
<!-- last row -->
<fo:table-row>
<fo:table-cell>
<fo:block>
<fo:marker marker-class-name="mc1">(continued)</fo:marker>
<fo:marker marker-class-name="mc2"></fo:marker>
cell9
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
我的 xsl:fo 转换需要 table 中的 <fo:retrieve-marker>
,但我不知道这是否可能,因为我使用 FOP 处理器进行转换。
如果我在 table 中使用 <fo:retrieve-marker>
,我总是会收到一条错误消息,指出标签必须位于静态内容中。
这是带有标记
的 table <xsl:call-template name="MMEL-Table-Header"/>
<!-- Bottom table Line -->
<fo:table-footer>
<fo:table-row>
<fo:table-cell>
<fo:marker marker-class-name="footer-continued"> <fo:inline>(continued)</fo:inline></fo:marker>
</fo:table-cell>
</fo:table-row>
</fo:table-footer>
<fo:table-body >
<xsl:variable name="identification">
<xsl:value-of select="ident/message"/>
</xsl:variable>
<xsl:apply-templates select="ident"><xsl:with-param name="ident" select="$identification"/></xsl:apply-templates>
<xsl:apply-templates select="provisos/proviso"><xsl:with-param name="ident" select="$identification"/></xsl:apply-templates>
<fo:table-row>
<fo:table-cell> <fo:retrieve-marker retrieve-position="first-starting-within-page" retrieve-class-name="footer-continued" retrieve-boundary="document" /> </fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
(披露:我是 FOP 开发人员)
此示例具有动态 table header 和 table 页脚,因此它应该满足您的要求:
- 如果 table 适合单个页面,则 table header 和 table 页脚均为空
- 如果 table 被分成几页
- 第 页面的 table header 是空的,而在接下来的页面中显示“(继续)”
- table last 页的页脚是空的,而在前面的页脚中显示“(在下一页继续)”
- 使用 FOP 2.0 测试(旧版本 不 支持 table 标记);由于 FOP 当前的限制,non-breaking space
 
在 table header 和 table页脚是必需的 "placeholder"(header / 页脚尺寸只计算一次,没有标记内容) - 没有 formatter-specific 扩展,因此这也可以与其他格式化程序一起使用(XslFormatter 支持 table 标记;XEP 有替代解决方法)
FO片段:
<fo:table table-layout="fixed" width="100%">
<fo:table-column column-width="100%"/>
<fo:table-header>
<fo:table-row>
<fo:table-cell>
<fo:block>
<fo:retrieve-table-marker retrieve-class-name="mc1"
retrieve-position-within-table="first-starting"
retrieve-boundary-within-table="table-fragment"/>
 
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-header>
<fo:table-footer>
<fo:table-row>
<fo:table-cell>
<fo:block>
<fo:retrieve-table-marker retrieve-class-name="mc2"
retrieve-position-within-table="last-ending"
retrieve-boundary-within-table="table-fragment"/>
 
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-footer>
<fo:table-body>
<!-- first row -->
<fo:table-row>
<fo:table-cell>
<fo:block>
<fo:marker marker-class-name="mc1"></fo:marker>
<fo:marker marker-class-name="mc2">(continues on the next page)</fo:marker>
cell1
</fo:block>
</fo:table-cell>
</fo:table-row>
<!-- middle row -->
<fo:table-row>
<fo:table-cell>
<fo:block>
<fo:marker marker-class-name="mc1">(continued)</fo:marker>
<fo:marker marker-class-name="mc2">(continues on the next page)</fo:marker>
cell2
</fo:block>
</fo:table-cell>
</fo:table-row>
<!-- ... other similar rows ... -->
<!-- last row -->
<fo:table-row>
<fo:table-cell>
<fo:block>
<fo:marker marker-class-name="mc1">(continued)</fo:marker>
<fo:marker marker-class-name="mc2"></fo:marker>
cell9
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>