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-dimensiontable-layoutauto:

<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>