xsl-fo fo:table-创建特定行号 PDF 后的行分页符
xsl-fo fo:table-row page-break after specific row number PDF creation
<fo:table-body>
<xsl:for-each select="dummy">
<xsl:variable name="r" select="position()"/>
<fo:table-row>
<fo:table-cell>
<fo:block>
some text
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:for-each>
</fo:table-body>
这就是我的代码。我想要做的是在特定行数(在我的例子中是 17 行)之后分页并继续下一页。
到目前为止我尝试了什么:
<fo:table-body>
<xsl:for-each select="dummy">
<xsl:variable name="r" select="position()"/>
<fo:table-row>
<xsl:if test="$r mod 17 = 0">
<xsl:attribute name="break-after">page</xsl:attribute>
</xsl:if>
<fo:table-cell>
<fo:block>
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
这会将属性添加到行中。
但是,当 fo 用于创建 PDF 时,不会发生分页。
我正在使用 Altsoft XML2PDF 转换器。但我认为问题出在 xslt.
fo:table-row/@page-break-after 在 XSL 1.1 中没有定义。如果 XML2PDF 符合 XSL 1.1:
,您可能可以将此属性修改为以下内容
<xsl:if test="$r mod 17 = 0">
<xsl:attribute name="break-after">page</xsl:attribute>
</xsl:if>
请参阅以下 URL 中适用的 fo:table 行属性:
根据您的评论,我已经使用简单示例进行了测试。
[输入XML]
<?xml version="1.0" encoding="UTF-8"?>
<root>
<dummy>A</dummy>
<dummy>B</dummy>
<dummy>C</dummy>
...
<dummy>P</dummy>
<dummy>Q</dummy>
<dummy>R</dummy>
...
<dummy>X</dummy>
<dummy>Y</dummy>
<dummy>Z</dummy>
</root>
[样式表]
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fo="http://www.w3.org/1999/XSL/Format"
version="2.0">
<xsl:output indent="yes"/>
<xsl:template match="root">
<fo:root>
<fo:layout-master-set>
<fo:simple-page-master master-name="spm" page-width="210mm" page-height="297mm">
<fo:region-body margin="10mm 10mm 10mm"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="spm">
<fo:flow flow-name="xsl-region-body">
<fo:table>
<fo:table-body>
<xsl:for-each select="dummy">
<xsl:variable name="r" select="position()"/>
<fo:table-row>
<xsl:if test="$r mod 17 = 0">
<xsl:attribute name="break-after">page</xsl:attribute>
</xsl:if>
<fo:table-cell>
<fo:block>
<xsl:value-of select="."/>
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:for-each>
</fo:table-body>
</fo:table>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
</xsl:stylesheet>
[结果 FO(节选)]
<fo:table-row>
<fo:table-cell>
<fo:block>P</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row break-after="page">
<fo:table-cell>
<fo:block>Q</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell>
<fo:block>R</fo:block>
</fo:table-cell>
</fo:table-row>
[格式化结果]
<fo:table-body>
<xsl:for-each select="dummy">
<xsl:variable name="r" select="position()"/>
<fo:table-row>
<fo:table-cell>
<fo:block>
some text
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:for-each>
</fo:table-body>
这就是我的代码。我想要做的是在特定行数(在我的例子中是 17 行)之后分页并继续下一页。
到目前为止我尝试了什么:
<fo:table-body>
<xsl:for-each select="dummy">
<xsl:variable name="r" select="position()"/>
<fo:table-row>
<xsl:if test="$r mod 17 = 0">
<xsl:attribute name="break-after">page</xsl:attribute>
</xsl:if>
<fo:table-cell>
<fo:block>
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
这会将属性添加到行中。 但是,当 fo 用于创建 PDF 时,不会发生分页。
我正在使用 Altsoft XML2PDF 转换器。但我认为问题出在 xslt.
fo:table-row/@page-break-after 在 XSL 1.1 中没有定义。如果 XML2PDF 符合 XSL 1.1:
,您可能可以将此属性修改为以下内容<xsl:if test="$r mod 17 = 0">
<xsl:attribute name="break-after">page</xsl:attribute>
</xsl:if>
请参阅以下 URL 中适用的 fo:table 行属性:
根据您的评论,我已经使用简单示例进行了测试。
[输入XML]
<?xml version="1.0" encoding="UTF-8"?>
<root>
<dummy>A</dummy>
<dummy>B</dummy>
<dummy>C</dummy>
...
<dummy>P</dummy>
<dummy>Q</dummy>
<dummy>R</dummy>
...
<dummy>X</dummy>
<dummy>Y</dummy>
<dummy>Z</dummy>
</root>
[样式表]
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fo="http://www.w3.org/1999/XSL/Format"
version="2.0">
<xsl:output indent="yes"/>
<xsl:template match="root">
<fo:root>
<fo:layout-master-set>
<fo:simple-page-master master-name="spm" page-width="210mm" page-height="297mm">
<fo:region-body margin="10mm 10mm 10mm"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="spm">
<fo:flow flow-name="xsl-region-body">
<fo:table>
<fo:table-body>
<xsl:for-each select="dummy">
<xsl:variable name="r" select="position()"/>
<fo:table-row>
<xsl:if test="$r mod 17 = 0">
<xsl:attribute name="break-after">page</xsl:attribute>
</xsl:if>
<fo:table-cell>
<fo:block>
<xsl:value-of select="."/>
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:for-each>
</fo:table-body>
</fo:table>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
</xsl:stylesheet>
[结果 FO(节选)]
<fo:table-row>
<fo:table-cell>
<fo:block>P</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row break-after="page">
<fo:table-cell>
<fo:block>Q</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell>
<fo:block>R</fo:block>
</fo:table-cell>
</fo:table-row>
[格式化结果]