XSL-FO:如何设置动态 table 宽度?
XSL-FO: How to set dynamic table width?
我有这个问题:
我需要一个 FO-table,它与内容(单元格)的宽度一样宽。
但是当我在我的 FO 标记中添加一个 table 时,它总是表现得像一个块级元素并使用 wohle 行的宽度。
让我感到困惑:如果我将它包装到一个内联元素(具有预期的行为)中,Table 没有内联元素的行为,而是再次变成一个块元素.
有人知道如何解决这个问题吗?
这是我的标记:
<inline width="auto">
<table table-layout="fixed">
<table-column column-width="6.36mm"/>
<table-column/>
<table-column column-width="6.36mm"/>
<table-column/>
<table-column column-width="6.36mm"/>
<table-column/>
<table-column column-width="6.36mm"/>
<table-column/>
<table-body>
<table-row>
<table-cell padding-right="1.6mm">
<block-container height="3mm" width="4.76mm" overflow="hidden">
<block>
<external-graphic content-height="3mm" src="image1.jpg"/>
</block>
</block-container>
</table-cell>
<table-cell>
<block>
Image name 1
</block>
</table-cell>
<table-cell padding-right="1.6mm">
<block-container height="3mm" width="4.76mm" overflow="hidden">
<block>
<external-graphic content-height="3mm" src="image2.jpg"/>
</block>
</block-container>
</table-cell>
<table-cell>
<block>
Image name 2
</block>
</table-cell>
<table-cell padding-right="1.6mm">
<block-container height="3mm" width="4.76mm" overflow="hidden">
<block>
<external-graphic content-height="3mm" src="image3.jpg"/>
</block>
</block-container>
</table-cell>
<table-cell>
<block>
Image name 3
</block>
</table-cell>
<table-cell padding-right="1.6mm">
<block-container height="3mm" width="4.76mm" overflow="hidden">
<block>
<external-graphic content-height="3mm" src="image4.jpg"/>
</block>
</block-container>
</table-cell>
<table-cell>
<block>
image name4
</block>
</table-cell>
</table-row>
</table-body>
</table>
</inline>
(可能重要的通知:我的列需要在固定宽度和自动宽度之间切换)
谢谢你!!!
你需要的是 automatic table layout 并且 理论上 实现了设置 inline-progression-dimension
和 table-layout
到 auto
:
<fo:table inline-progression-dimension="auto" table-layout="auto">
... columns, table-body ...
</fo:table>
然而,FOP does not support auto layout yet;如果您没有为 table 设置宽度,则将使用整个线宽,并将根据它们的 column-width
(固定或百分比)或相等的列在列之间划分如果列没有明确设置的宽度,部分。
Confusing for me: If I wrap it into an Inline-Element (which has the
expected behavior), the Table has not the behavior of the
Inline-Element but turns again to be a Block-Element.
fo:table
总是创建 方块区域 ,将其包裹在 fo:inline
中不会改变这一点。
编辑:解决方法
在单行对象的特定情况下(如问题中)可能根本不需要table,并且仅使用内联对象就可以实现所需的输出:
<inline keep-together.within-line="always">
<external-graphic height="3mm" width="4.76mm" overflow="hidden"
content-height="3mm" src="image1.jpg"/>
Image name 1
<external-graphic height="3mm" width="4.76mm" overflow="hidden"
content-height="3mm" src="image2.jpg"/>
Image name 2
<external-graphic height="3mm" width="4.76mm" overflow="hidden"
content-height="3mm" src="image3.jpg"/>
Image name 3
<external-graphic height="3mm" width="4.76mm" overflow="hidden"
content-height="3mm" src="image4.jpg"/>
Image name 4
</inline>
我有这个问题: 我需要一个 FO-table,它与内容(单元格)的宽度一样宽。 但是当我在我的 FO 标记中添加一个 table 时,它总是表现得像一个块级元素并使用 wohle 行的宽度。
让我感到困惑:如果我将它包装到一个内联元素(具有预期的行为)中,Table 没有内联元素的行为,而是再次变成一个块元素.
有人知道如何解决这个问题吗?
这是我的标记:
<inline width="auto">
<table table-layout="fixed">
<table-column column-width="6.36mm"/>
<table-column/>
<table-column column-width="6.36mm"/>
<table-column/>
<table-column column-width="6.36mm"/>
<table-column/>
<table-column column-width="6.36mm"/>
<table-column/>
<table-body>
<table-row>
<table-cell padding-right="1.6mm">
<block-container height="3mm" width="4.76mm" overflow="hidden">
<block>
<external-graphic content-height="3mm" src="image1.jpg"/>
</block>
</block-container>
</table-cell>
<table-cell>
<block>
Image name 1
</block>
</table-cell>
<table-cell padding-right="1.6mm">
<block-container height="3mm" width="4.76mm" overflow="hidden">
<block>
<external-graphic content-height="3mm" src="image2.jpg"/>
</block>
</block-container>
</table-cell>
<table-cell>
<block>
Image name 2
</block>
</table-cell>
<table-cell padding-right="1.6mm">
<block-container height="3mm" width="4.76mm" overflow="hidden">
<block>
<external-graphic content-height="3mm" src="image3.jpg"/>
</block>
</block-container>
</table-cell>
<table-cell>
<block>
Image name 3
</block>
</table-cell>
<table-cell padding-right="1.6mm">
<block-container height="3mm" width="4.76mm" overflow="hidden">
<block>
<external-graphic content-height="3mm" src="image4.jpg"/>
</block>
</block-container>
</table-cell>
<table-cell>
<block>
image name4
</block>
</table-cell>
</table-row>
</table-body>
</table>
</inline>
(可能重要的通知:我的列需要在固定宽度和自动宽度之间切换)
谢谢你!!!
你需要的是 automatic table layout 并且 理论上 实现了设置 inline-progression-dimension
和 table-layout
到 auto
:
<fo:table inline-progression-dimension="auto" table-layout="auto">
... columns, table-body ...
</fo:table>
然而,FOP does not support auto layout yet;如果您没有为 table 设置宽度,则将使用整个线宽,并将根据它们的 column-width
(固定或百分比)或相等的列在列之间划分如果列没有明确设置的宽度,部分。
Confusing for me: If I wrap it into an Inline-Element (which has the expected behavior), the Table has not the behavior of the Inline-Element but turns again to be a Block-Element.
fo:table
总是创建 方块区域 ,将其包裹在 fo:inline
中不会改变这一点。
编辑:解决方法
在单行对象的特定情况下(如问题中)可能根本不需要table,并且仅使用内联对象就可以实现所需的输出:
<inline keep-together.within-line="always">
<external-graphic height="3mm" width="4.76mm" overflow="hidden"
content-height="3mm" src="image1.jpg"/>
Image name 1
<external-graphic height="3mm" width="4.76mm" overflow="hidden"
content-height="3mm" src="image2.jpg"/>
Image name 2
<external-graphic height="3mm" width="4.76mm" overflow="hidden"
content-height="3mm" src="image3.jpg"/>
Image name 3
<external-graphic height="3mm" width="4.76mm" overflow="hidden"
content-height="3mm" src="image4.jpg"/>
Image name 4
</inline>