XSL-FO:如何设置动态表格宽度?

时间:2015-02-10 10:50:34

标签: xsl-fo apache-fop

我有这个问题: 我需要一个FO表,它与内容(单元格)的宽度一样宽。 但是当我在我的FO标记中添加一个表时,它总是像块级元素一样使用并且使用wohle行的宽度。

让我感到困惑:如果我将它包装成Inline-Element(具有预期的行为),则Table不具有Inline-Element的行为,而是再次成为Block-Element。

有人知道如何解决这个问题吗?

这是我的标记:

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

(也许重要提示:我的专栏需要切换固定和自动宽度)

谢谢你!!!

1 个答案:

答案 0 :(得分:7)

您需要的是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;如果您没有为表格设置宽度,则将使用整个线宽,并根据其column-width(固定或百分比)或相等部分在列之间进行划分列没有明确设置的宽度。

  

让我感到困惑:如果我把它包装成一个内联元素(它有   预期的行为),表没有的行为   内联元素但又变成了一个块元素。

fo:table始终会创建阻止区域,并将其包装在fo:inline内并不会改变它。

编辑:解决方法

单行对象的特定情况下(如问题所示)可能根本不需要表格,并且可以使用所需的输出来实现只是内联对象:

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