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 行属性:

6.7.9 fo:table-row

根据您的评论,我已经使用简单示例进行了测试。

[输入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>

[格式化结果]