如何在XSL-FO中垂直对齐长表的文本底部

问题描述

我有两列的长(两页及更多)表,并且想将Right Column Cell放在表的末尾。对于第一行,我已经做到了:

<fo:table-row>
    <fo:table-cell>
        <fo:block>Row 1</fo:block>
    </fo:table-cell>
    <fo:table-cell display-align="after" number-rows-spanned="20">
        <fo:block>Right Column Cell</fo:block>
    </fo:table-cell>
</fo:table-row>

但是在生成的PDF中,我在首页底部得到了文本,但没有表格:

enter image description here

XSL-FO处理器:Apache FOP v2.5。

我的示例.fo:

<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <fo:layout-master-set>
        <fo:simple-page-master margin-right="2cm" margin-left="2cm" margin-bottom="2cm" margin-top="2cm" page-width="210mm" page-height="297mm" master-name="page">
            <fo:region-body region-name="xsl-region-body"/>
        </fo:simple-page-master>
    </fo:layout-master-set>
    <fo:page-sequence master-reference="page">
        <fo:flow flow-name="xsl-region-body">
            <fo:block font-size="36pt">
                <fo:table width="100%" table-layout="fixed">
                    <fo:table-column column-width="30%"/>
                    <fo:table-column column-width="70%"/>
                    <fo:table-body>
                        <fo:table-row>
                            <fo:table-cell>
                                <fo:block>Row 1</fo:block>
                            </fo:table-cell>
                            <fo:table-cell display-align="after" number-rows-spanned="20">
                                <fo:block>Right Column Cell</fo:block>
                            </fo:table-cell>
                        </fo:table-row>
                        <fo:table-row>
                            <fo:table-cell>
                                <fo:block>Row 2</fo:block>
                            </fo:table-cell>                            
                        </fo:table-row>
                        <fo:table-row>
                            <fo:table-cell>
                                <fo:block>Row 3</fo:block>
                            </fo:table-cell>                            
                        </fo:table-row>
                        <fo:table-row>
                            <fo:table-cell>
                                <fo:block>Row 4</fo:block>
                            </fo:table-cell>                            
                        </fo:table-row>
                        <fo:table-row>
                            <fo:table-cell>
                                <fo:block>Row 5</fo:block>
                            </fo:table-cell>                            
                        </fo:table-row>
                        <fo:table-row>
                            <fo:table-cell>
                                <fo:block>Row 6</fo:block>
                            </fo:table-cell>                            
                        </fo:table-row>
                        <fo:table-row>
                            <fo:table-cell>
                                <fo:block>Row 7</fo:block>
                            </fo:table-cell>                            
                        </fo:table-row>
                        <fo:table-row>
                            <fo:table-cell>
                                <fo:block>Row 8</fo:block>
                            </fo:table-cell>                            
                        </fo:table-row>
                        <fo:table-row>
                            <fo:table-cell>
                                <fo:block>Row 9</fo:block>
                            </fo:table-cell>                            
                        </fo:table-row>
                        <fo:table-row>
                            <fo:table-cell>
                                <fo:block>Row 10</fo:block>
                            </fo:table-cell>                            
                        </fo:table-row>
                        <fo:table-row>
                            <fo:table-cell>
                                <fo:block>Row 11</fo:block>
                            </fo:table-cell>                            
                        </fo:table-row>
                        <fo:table-row>
                            <fo:table-cell>
                                <fo:block>Row 12</fo:block>
                            </fo:table-cell>                            
                        </fo:table-row>
                        <fo:table-row>
                            <fo:table-cell>
                                <fo:block>Row 13</fo:block>
                            </fo:table-cell>                            
                        </fo:table-row>
                        <fo:table-row>
                            <fo:table-cell>
                                <fo:block>Row 14</fo:block>
                            </fo:table-cell>                            
                        </fo:table-row>
                        <fo:table-row>
                            <fo:table-cell>
                                <fo:block>Row 15</fo:block>
                            </fo:table-cell>                            
                        </fo:table-row>
                        <fo:table-row>
                            <fo:table-cell>
                                <fo:block>Row 16</fo:block>
                            </fo:table-cell>                            
                        </fo:table-row>
                        <fo:table-row>
                            <fo:table-cell>
                                <fo:block>Row 17</fo:block>
                            </fo:table-cell>                            
                        </fo:table-row>
                        <fo:table-row>
                            <fo:table-cell>
                                <fo:block>Row 18</fo:block>
                            </fo:table-cell>                            
                        </fo:table-row>
                        <fo:table-row>
                            <fo:table-cell>
                                <fo:block>Row 19</fo:block>
                            </fo:table-cell>                            
                        </fo:table-row>
                        <fo:table-row>
                            <fo:table-cell>
                                <fo:block>Row 20</fo:block>
                            </fo:table-cell>                            
                        </fo:table-row>                     
                    </fo:table-body>
                </fo:table>
            </fo:block>
        </fo:flow>
    </fo:page-sequence>
</fo:root>

我做错了什么?还是FOP错误

解决方法

如果“行20”和“右列单元格”将始终是相同的行数(或者如果“行20”也可能比“右列单元格”更多的行),则只需将“右列单元格”放入'在第20行的第二列中。

如果不是那么简单,那么您可能不走运。我使用AH Formatter V7.0尝试了您的示例,并在第一页底部显示了“右列单元格”。

如果您使用的是AH Formatter,则可以使用axf:repeat-cell-content-at-break(请参阅https://www.antenna.co.jp/AHF/help/v70e/ahf-ext.html#axf.repeat-cell-content-at-break)重复内容,尽管那不是完全一样。