xsl-fo fo:特定行号PDF创建后的表行分页符

时间:2016-11-02 08:35:06

标签: xslt xsl-fo

<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 Converter。但我认为问题出在xslt。

1 个答案:

答案 0 :(得分:2)

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

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>

[格式化结果]

Formatting result