如何覆盖表格单元格的显示块?

时间:2015-05-29 10:23:41

标签: apache cell tablelayout apache-fop

我使用Apache™FOP(格式化对象处理器)渲染表。我想显示一个高度和宽度固定的黄色块。块底应位于行底的同一位置。块应该溢出单元格,块不应该使单元格更大。我宁愿不使用rowspan。知道如何在FOP中制作块溢出单元吗?

具有实际和预期输出的图像:

output

方法1:我已经尝试过rowspan = 2。表看起来像预期的。但代码太复杂了。它需要额外的逻辑来计算我需要跨越的行。

方法2:

<fo:table-row>
<fo:table-cell><fo:block>item4</fo:block></fo:table-cell>
<fo:table-cell display-align="after">
    <fo:block-container overflow="visible">
        <fo:block background-color="yellow" padding-top="1.5mm" padding-bottom="1.5mm">
            Thanks
        </fo:block>
    </fo:block-container>
</fo:table-cell>

我希望溢出=&#34;可见&#34;会做的伎俩,但事实并非如此。

1 个答案:

答案 0 :(得分:0)

(预防性披露:我是FOP开发人员,虽然现在不是很活跃)

我认为您的方法#1(即使用number-rows-spanned)是正确,因为它提供了跨不同格式化程序的最便携式解决方案。

无论如何,如果你想要更简单的&#34;你可以在特殊的黄色块中使用负space-before

<fo:table width="100%" table-layout="fixed">
    <fo:table-column column-width="50%"/>
    <fo:table-column column-width="50%"/>
    <fo:table-body>
        <fo:table-row>
            <fo:table-cell border="1pt solid #000000"><fo:block>orange 1</fo:block></fo:table-cell>
            <fo:table-cell border="1pt solid #000000"><fo:block></fo:block></fo:table-cell>
        </fo:table-row>
        <fo:table-row>
            <fo:table-cell border="1pt solid #000000"><fo:block>orange 2</fo:block></fo:table-cell>
            <fo:table-cell border="1pt solid #000000"><fo:block></fo:block></fo:table-cell>
        </fo:table-row>
        <fo:table-row>
            <fo:table-cell border="1pt solid #000000"><fo:block>orange 3</fo:block></fo:table-cell>
            <fo:table-cell border="1pt solid #000000">
                <fo:block space-before="-12.8pt" space-before.conditionality="retain" background-color="yellow" padding-top="4pt" padding-bottom="4pt" font-size="16pt">Thanks</fo:block>
            </fo:table-cell>
        </fo:table-row>
    </fo:table-body>
</fo:table>
  • 否定space-before必须是普通块的高度与特殊块的高度之间的差异(如果正常块的高度所有长度都用点表示,就像我在例子中所做的那样:在这种情况下(12 * 1.2) - (16 * 1.2 + 4 + 4)= -12.8
  • 需要
  • space-before.conditionality="retain"以避免丢弃空间(因为它位于单元格的开头)
  • 如果普通特殊块产生单行文本
  • ,这个脏技巧才能正常工作
  • 使用FOP 1.1和FOP主干进行测试

总之,可能能够避免使用行跨越单元格,但它不会简单得多,而且肯定是一种不那么通用的解决方案。