XSL FO将内容设置到页面底部失败

时间:2013-10-22 05:38:15

标签: xslt xsl-fo

我正在尝试在页面底部打印表格(A4格式),但不是这样,最后一个表格在前一个元素之后继续打印,尽管存在margin-bottom属性。另外,如果我试图设置页脚(使用fo:footnote with fo:inline) - 这个页脚也不会出现在页面底部,而是出现在最后一个元素下面。

    <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <xsl:template match="/">
        <fo:root>
            <fo:layout-master-set >
                <fo:simple-page-master master-name="simple" page-height="29.7cm" page-width="21cm"
                                       margin-top="2cm" margin-bottom="2cm" margin-left="2cm" margin-right="2cm">
                    <fo:region-body />
                    <!--<fo:region-after region-name="first-page-footer" margin-bottom="2cm" extent="11in" display-align="after"/>-->
                </fo:simple-page-master>
            </fo:layout-master-set>
            <fo:page-sequence master-reference="simple">
                <xsl:call-template name="mainTemplate"/>
            </fo:page-sequence>
        </fo:root>
    </xsl:template>

    <xsl:template name="mainTemplate">

        <xsl:variable name="newline">
            <xsl:text>&#160;</xsl:text>
        </xsl:variable>
        <xsl:variable name="logoURL" >
            <xsl:value-of select="/export/logotype"/>
        </xsl:variable>
        <xsl:variable name="signatureURL">
            <xsl:value-of select="/export/signature"/>
        </xsl:variable>

        <fo:flow flow-name="xsl-region-body">
            <fo:block space-before="2cm" space-after="2cm" font-size="12pt"
                      font-family="Times New Roman">

                <fo:block  space-before="2cm" space-after="2cm" >
                    <fo:table  border-color="black" border-style="solid"
                          border-width="0.5pt"  >
                        <fo:table-column column-width="3cm" border-color="black" border-style="solid"
                                     border-width="0.5pt"/>
                        <fo:table-column column-width="3cm" border-color="black" border-style="solid"
                                     border-width="0.5pt"/>
                        <fo:table-column column-width="3cm" border-color="black" border-style="solid"
                                     border-width="0.5pt"/>
                        <fo:table-column column-width="8cm" border-color="black" border-style="solid"
                                     border-width="0.5pt"/>
                        <fo:table-body>
                            <fo:table-row>
                                <fo:table-cell border-color="black" border-style="solid" border-width="0.5pt">
                                    <fo:block font-weight="bold" text-align="center">Number</fo:block>
                                </fo:table-cell>
                                <fo:table-cell border-color="black" border-style="solid" border-width="0.5pt">
                                    <fo:block font-weight="bold" text-align="center">Date</fo:block>
                                </fo:table-cell>
                                <fo:table-cell border-color="black" border-style="solid" border-width="0.5pt">
                                    <fo:block font-weight="bold" text-align="center">Bill</fo:block>
                                </fo:table-cell>
                                <fo:table-cell border-color="black" border-style="solid" border-width="0.5pt">
                                    <fo:block font-weight="bold" text-align="center">Owner</fo:block>
                                </fo:table-cell>
                            </fo:table-row>

                            <xsl:for-each select="/export/Cars/car">
                                <xsl:variable name="param1" select="number"/>
                                <xsl:variable name="param2" select="date"/>
                                <xsl:variable name="param3" select="bill"/>
                                <xsl:variable name="param4" select="owner"/>
                                <fo:table-row>
                                    <fo:table-cell border-color="black" border-style="solid" border-width="0.5pt"
                                               padding-left="3pt">
                                        <fo:block text-align="center">
                                            <xsl:value-of select="$param1"/>
                                        </fo:block>
                                    </fo:table-cell>
                                    <fo:table-cell border-color="black" border-style="solid" border-width="0.5pt"
                                               padding-left="3pt" padding-right="3pt" display-align="center">
                                        <fo:block text-align="center">
                                            <xsl:value-of select="$param2"/>
                                        </fo:block>
                                    </fo:table-cell>
                                    <fo:table-cell border-color="black" border-style="solid" border-width="0.5pt"
                                               padding-left="3pt" padding-right="3pt" display-align="center">
                                        <fo:block text-align="center">
                                            <xsl:value-of select="$param3"/>
                                        </fo:block>
                                    </fo:table-cell >
                                    <fo:table-cell border-color="black" border-style="solid" border-width="0.5pt"
                                               padding-left="3pt" padding-right="3pt" display-align="center">
                                        <fo:block text-align="center">
                                            <xsl:value-of select="$param4"/>
                                        </fo:block>
                                    </fo:table-cell>
                                </fo:table-row>
                            </xsl:for-each>
                        </fo:table-body>
                    </fo:table>
                </fo:block>

                <fo:block>
                    <xsl:value-of select="$newline"/>
                </fo:block>
                <fo:block>
                    <xsl:value-of select="$newline"/>
                </fo:block>

                <fo:block space-after="2cm" >
                    <fo:table  border-color="black" border-style="solid"
                               border-width="0.5pt"  >
                        <fo:table-column column-width="3cm" border-color="black" border-style="solid" border-width="0.5pt"/>
                        <fo:table-column column-width="14cm" border-color="black" border-style="solid" border-width="0.5pt"/>
                        <fo:table-body>
                            <fo:table-row>
                                <fo:table-cell border-color="black" border-style="solid" border-width="0.5pt">
                                    <fo:block font-weight="bold" text-align="center">Graph 6</fo:block>
                                </fo:table-cell>

                                <fo:table-cell border-color="black" border-style="solid" border-width="0.5pt">
                                    <fo:block  text-align="center"><xsl:value-of select="/export/graph6"/></fo:block>
                                </fo:table-cell>
                            </fo:table-row>
                            <fo:table-row>
                                <fo:table-cell border-color="black" border-style="solid" border-width="0.5pt">
                                    <fo:block font-weight="bold" text-align="center">Graph 5</fo:block>
                                </fo:table-cell>

                                <fo:table-cell border-color="black" border-style="solid" border-width="0.5pt">
                                    <fo:block  text-align="center"><xsl:value-of select="/export/graph5"/></fo:block>
                                </fo:table-cell>
                            </fo:table-row>
                            <fo:table-row>
                                <fo:table-cell border-color="black" border-style="solid" border-width="0.5pt">
                                    <fo:block font-weight="bold" text-align="center">Graph 4</fo:block>
                                </fo:table-cell>

                                <fo:table-cell border-color="black" border-style="solid" border-width="0.5pt">
                                    <fo:block  text-align="center"><xsl:value-of select="/export/graph4"/></fo:block>
                                </fo:table-cell>
                            </fo:table-row>
                            <fo:table-row>
                                <fo:table-cell border-color="black" border-style="solid" border-width="0.5pt">
                                    <fo:block font-weight="bold" text-align="center">Graph1</fo:block>
                                </fo:table-cell>

                                <fo:table-cell border-color="black" border-style="solid" border-width="0.5pt">
                                    <fo:block  text-align="center"><xsl:value-of select="/export/graph1"/></fo:block>
                                </fo:table-cell>
                            </fo:table-row>
                            <fo:table-row>
                                <fo:table-cell border-color="black" border-style="solid" border-width="0.5pt">
                                    <fo:block font-weight="bold" text-align="center">Graph 2</fo:block>
                                </fo:table-cell>

                                <fo:table-cell border-color="black" border-style="solid" border-width="0.5pt">
                                    <fo:block  text-align="center"><xsl:value-of select="/export/graph2"/></fo:block>
                                </fo:table-cell>
                            </fo:table-row>
                            <fo:table-row>
                                <fo:table-cell border-color="black" border-style="solid" border-width="0.5pt">
                                    <fo:block font-weight="bold" text-align="center">Graph3</fo:block>
                                </fo:table-cell>

                                <fo:table-cell border-color="black" border-style="solid" border-width="0.5pt">
                                    <fo:block  text-align="center"><xsl:value-of select="/export/graph3"/></fo:block>
                                </fo:table-cell>
                            </fo:table-row>
                        </fo:table-body>
                    </fo:table>
                </fo:block>

                <fo:block>
                    <xsl:value-of select="$newline"/>
                </fo:block>
                <fo:block>
                    <xsl:value-of select="$newline"/>
                </fo:block>

                <fo:block text-align="justify" >
                    <xsl:value-of select="/export/contactInfo"/>
                </fo:block>

                <fo:block>
                    <xsl:value-of select="$newline"/>
                </fo:block>

                <fo:table  border-width="0" margin-bottom="3cm" >
                    <fo:table-column column-width="5.6cm" />
                    <fo:table-column column-width="5.6cm" />
                    <fo:table-column column-width="5.6cm" />
                    <fo:table-body>
                        <fo:table-row>
                            <fo:table-cell display-align="after">
                                <fo:block text-align="left">
                                    Occupation <xsl:value-of select="/export/occupation"/>
                                </fo:block>
                            </fo:table-cell>
                            <fo:table-cell display-align="before">
                                <fo:block text-align="center">
                                    Signature <fo:external-graphic src='url({$signatureURL})'/>
                                </fo:block>
                            </fo:table-cell>
                            <fo:table-cell display-align="after">
                                <fo:block text-align="left">
                                    Name <xsl:value-of select="/export/name"/>
                                </fo:block>
                            </fo:table-cell>
                        </fo:table-row>
                    </fo:table-body>
                </fo:table>

            </fo:block>

        </fo:flow>
    </xsl:template>

</xsl:stylesheet>

Output file in .doc format
Code on pastebin
脚注的问题是 - 当我试图将内容放入脚注时(fo:块语句而不是上一个代码部分中的最后一个表:)

...
<fo:block>
            The quick brown fox jumps over a lazy dog. The quick brown fox jumps over
            a lazy dog. The quick brown fox jumps over a lazy dog.
        <fo:footnote>
            <fo:inline baseline-shift="super"  font-size="10pt">
                (*)
            </fo:inline>
            <fo:footnote-body>
                <fo:block>
                    * This is the first footnote
                </fo:block>
            </fo:footnote-body>
        </fo:footnote>
            The quick brown fox jumps over a lazy dog. The quick brown fox jumps over
            a lazy dog.
 </fo:block>
</fo:flow>
</xsl:template>
</xsl:stylesheet>

输出结果如下所示:

...
快速的棕色狐狸跳过一只懒狗。快速的棕色狐狸跳过一只懒狗。快速的棕色狐狸跳过一只懒狗。 (*)快速的棕色狐狸跳过一只懒狗。快速的棕色狐狸跳过一只懒狗 *这是第一个脚注

脚注字符串在前一个文本之后立即放置,而不是放在页面底部

2 个答案:

答案 0 :(得分:2)

margin-bottom属性表示您希望在表格下方留出空格。它与将对象放在页面底部无关。 如果您希望表格显示在页面底部,则有两个选项:

  1. 将其插入region-after area,而不是身体区域。
  2. 将其包裹在具有绝对位置的block-container中。

答案 1 :(得分:1)

我将页面底部我想要的内容放入一个带有空内联引文的空块中的脚注构造。让格式化程序担心页面底部的位置。我告诉我的学生,对于文档最后一页底部的法律免责声明等问题,这是一种合适的方法。

绝对定位的块容器的问题在于,如果其尺寸与主体重叠,则身体内容可能会覆盖它。如果该内容的主体内容缩小,则需要适应页面几何中的不同区域。

我觉得把它扔进脚注是最容易的。

相关问题