【问题标题】:How to vertical align text bottom for long table in XSL-FO如何在 XSL-FO 中垂直对齐长表的文本底部
【发布时间】:2021-01-14 09:02:53
【问题描述】:

我的表格很长(2 页或更多),有两列,想把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 中,我得到第一页底部的文本,而不是表格:

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 错误?

【问题讨论】:

    标签: alignment xsl-fo apache-fop


    【解决方案1】:

    如果“Row 20”和“Right Column Cell”的行数总是相同(或者如果“Row 20”也可能比“Right Column Cell”的行数更多),那么你可以只放“Right Column Cell” ' 在第 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)来重复内容,尽管这并不完全相同。

    【讨论】:

    • 感谢您的回答,但很遗憾,右边的单元格可能有很长的文字。
    猜你喜欢
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    相关资源
    最近更新 更多