如何将内容放在文档最后一页的底部

时间:2015-08-08 14:39:49

标签: xsl-fo

我在最后一页的底部有一份包含一些内容(包含一个或多个地址的表格)的文档。 到目前为止,该表是标准大小的,所以我可以将表格插入页脚并将该页脚附加到最后一页:

<fo:page-sequence-master master-name="leaflet">
                <fo:repeatable-page-master-alternatives>
                    <fo:conditional-page-master-reference page-position="first" master-reference="page_first_leaflet"/>
                    <fo:conditional-page-master-reference page-position="last" master-reference="page_last_leaflet"/>
                    <fo:conditional-page-master-reference master-reference="page_even_2" odd-or-even="even"/>
                    <fo:conditional-page-master-reference master-reference="page_odd_2_leaflet" odd-or-even="odd"/>
                </fo:repeatable-page-master-alternatives>
            </fo:page-sequence-master>

当表具有可预测的大小时,这很有效:我设置了我的最后一页页脚的大小一次,我就完成了。

但是现在有一个要求使表格大小可变(5到15厘米之间)。如果我将页脚设置为15厘米,我会浪费很多空间。所以我想动态设置页脚大小。
我没有办法从XML文档中读取表格高度:默认情况下,单元格高度设置为0,这意味着&#34;使单元格足够大以使内容适合&#34;。所以我不能再将这张桌子放在页脚中了。

我的下一个想法是将桌子插入身体区域的末端。 这可以使用脚注构造来完成。当我将脚注放在文档内容的末尾时,将表放在与文档中最后一个文本相同的页面上。

            <fo:flow flow-name="body">
                <xsl:apply-templates/><!--normal chapter content is placed here-->
                    <fo:block>
                        <fo:footnote><fo:inline color="white">1</fo:inline><!--footnote number is not visible-->
                            <fo:footnote-body>
                                <fo:block>
                                    <fo:table>
                                        <fo:table-column column-width="20mm" column-number="1"/>
                                        <fo:table-column column-width="200mm" column-number="2"/>                                   
                                        <fo:table-body>
                                            <fo:table-row>
                                                <fo:table-cell column-number="2">
                                                    <fo:block>
                                                        <xsl:apply-templates select="table[1]"/><!--table that contains the addresses-->
                                                    </fo:block>
                                                </fo:table-cell>
                                            </fo:table-row>
                                        </fo:table-body>
                                    </fo:table>
                                </fo:block>
                            </fo:footnote-body>
                        </fo:footnote>
                    </fo:block>
        </fo:flow>

不幸的是,页面计数必须是均匀的,因此有时在文档内容结束后会添加一个空页面:

<xsl:attribute name="force-page-count">end-on-even</xsl:attribute>

因此,如果我的内容长达3页,则地址表最终会显示在第3页的底部。但我需要它在第4页。此方法仅在内容以偶数页结束且表适合时才有效在剩下的空间里。

我可以使用其他方法在文档最后一页的底部获取可变大小的块吗?

1 个答案:

答案 0 :(得分:1)

你可以在最后一个块之前强制偶数页分页(脚注包含表&#34;页脚&#34;)

        <fo:block break-before="even-page">
            <fo:footnote><fo:inline color="white">1</fo:inline><!--footnote number is not visible-->
                <fo:footnote-body>
                    <fo:block>
                        <fo:table>
                            <fo:table-column column-width="20mm" column-number="1"/>
                            <fo:table-column column-width="200mm" column-number="2"/>
                            <fo:table-body>
                                <fo:table-row>
                                    <fo:table-cell column-number="2">
                                        <fo:block>
                                            this is the footnote table
                                        </fo:block>
                                    </fo:table-cell>
                                </fo:table-row>
                            </fo:table-body>
                        </fo:table>
                    </fo:block>
                </fo:footnote-body>
            </fo:footnote>
        </fo:block>

顺便说一句,我认为您可以安全地让fo:inline的{​​{1}}孩子完全为空,这样您的输出就不会包含不需要的文字,即使不可见,仍然是可搜索的可选;如果你的格式化程序抱怨空的fo:inline,你可以使用一个不间断的空格fo:footnote