【问题标题】:How to place content at the bottom of the last page of my document如何将内容放在文档最后一页的底部
【发布时间】:2015-08-08 14:39:48
【问题描述】:

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

<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,这意味着“使单元格足够大以适合内容”。所以我不能再把这张桌子放在页脚里了。

我的下一个想法是在正文区域的末尾插入表格。 这可以使用脚注结构来完成。当我将脚注放在文档内容的末尾时,会将表格与文档中的最后一个文本放在同一页上。

            <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 页。这种方法仅适用于内容以偶数页结束并且表格适合的情况在剩下的空间里。

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

【问题讨论】:

  • 目前,我正在使用一种解决方法,将表格放在最后一页页脚中。页脚的大小由表中的行数决定(基本上我假设每行的高度为 50 毫米,并将页脚范围设置为此)。

标签: xsl-fo


【解决方案1】:

您可以在最后一个块(带有包含表“页脚”的脚注的块)之前强制偶数分页符

        <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:footnotefo:inline 子项完全为空,这样您的输出就不会包含不需要的文本,即使不可见,仍然可搜索可选择的;如果您的格式化程序抱怨空的 fo:inline,您可以使用不间断空格 &amp;#x00A0;

【讨论】:

  • 哦,这很聪明。谢谢!
  • 这在很多情况下都很好用,但有一个例外:这种策略总是添加至少一个分页符。如果内容在第 4 页结束并且有足够的空间留给地址表,它将插入 2 页并将表放在第 6 页。
  • 哎呀,你是对的,我的解决方案最终可能会浪费更多的空间,而不是分配具有最大可能高度的页脚。我开始认为仅使用标准 FO 可能无法获得最佳解决方案 ...
猜你喜欢
  • 1970-01-01
  • 2019-04-04
  • 2018-12-29
  • 2013-04-09
  • 2015-02-16
  • 1970-01-01
  • 2017-08-01
  • 1970-01-01
  • 2017-12-27
相关资源
最近更新 更多