如何显示溢出 table 单元格的块?
How display block that overwflows table cell?
我使用 Apache™ FOP(格式化对象处理器)呈现 table。我想显示一个固定高度和宽度的黄色块。块底部应与行底部位于同一位置。块应该溢出单元格,块不应该使单元格变大。我宁愿不使用 rowspan。知道如何在 FOP 中制作块溢出单元格吗?
具有实际和预期输出的图像:
方法 1:我已经尝试过 rowspan=2。 Table 看起来符合预期。但是代码太复杂了。它需要额外的逻辑来计算我需要跨越哪些行。
方法二:
<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>
我希望 overflow="visible" 能解决问题,但事实并非如此。
(预防性披露:我是一名 FOP 开发人员,虽然现在不太活跃)
我认为您的方法 #1(即使用 number-rows-spanned
)是正确的方法,因为它提供了跨不同格式化程序的最便携的解决方案。
无论如何,如果你想使用 "simpler" 技巧,你可以在特殊的黄色块中使用负数 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"
以避免 space 被丢弃(因为它位于单元格的开头)
- 只有当 normal 和 special 块都产生一行文本时,这个肮脏的技巧才能正常工作
- 使用 FOP 1.1 和 FOP 中继测试
总之,您可能能够避免使用跨行单元格,但它不会简单得多,而且肯定是一个不太通用的解决方案。
我使用 Apache™ FOP(格式化对象处理器)呈现 table。我想显示一个固定高度和宽度的黄色块。块底部应与行底部位于同一位置。块应该溢出单元格,块不应该使单元格变大。我宁愿不使用 rowspan。知道如何在 FOP 中制作块溢出单元格吗?
具有实际和预期输出的图像:
方法 1:我已经尝试过 rowspan=2。 Table 看起来符合预期。但是代码太复杂了。它需要额外的逻辑来计算我需要跨越哪些行。
方法二:
<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>
我希望 overflow="visible" 能解决问题,但事实并非如此。
(预防性披露:我是一名 FOP 开发人员,虽然现在不太活跃)
我认为您的方法 #1(即使用 number-rows-spanned
)是正确的方法,因为它提供了跨不同格式化程序的最便携的解决方案。
无论如何,如果你想使用 "simpler" 技巧,你可以在特殊的黄色块中使用负数 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"
以避免 space 被丢弃(因为它位于单元格的开头)- 只有当 normal 和 special 块都产生一行文本时,这个肮脏的技巧才能正常工作
- 使用 FOP 1.1 和 FOP 中继测试
总之,您可能能够避免使用跨行单元格,但它不会简单得多,而且肯定是一个不太通用的解决方案。