Pdf 如何处理很长fo:list项标签的缩进?

Pdf 如何处理很长fo:list项标签的缩进?,pdf,xsl-fo,apache-fop,Pdf,Xsl Fo,Apache Fop,我有以下fo标记: <fo:list-block> <fo:list-item> <fo:list-item-label end-indent="label-end()"> <fo:block>[KEY]</fo:block> </fo:list-item-label> <fo:list-item-body start-indent="bo

我有以下
fo
标记:

<fo:list-block>
    <fo:list-item>
        <fo:list-item-label end-indent="label-end()">
            <fo:block>[KEY]</fo:block>
        </fo:list-item-label>
        <fo:list-item-body start-indent="body-start()">
            <fo:block>Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah 
            Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah </fo:block>
        </fo:list-item-body>
    </fo:list-item>
</fo:list-block>

[关键]
废话废话废话废话废话废话废话废话
废话废话废话废话废话废话废话废话
虽然这在打印时看起来不错,但如果我将其更改为:

<fo:list-block>
    <fo:list-item>
        <fo:list-item-label end-indent="label-end()">
            <fo:block>[VERYLONGKEY]</fo:block>
        </fo:list-item-label>
        <fo:list-item-body start-indent="body-start()">
            <fo:block>Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah 
            Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah </fo:block>
        </fo:list-item-body>
    </fo:list-item>
</fo:list-block>

[VERYLONGKEY]
废话废话废话废话废话废话废话废话
废话废话废话废话废话废话废话废话

fo:list item标签
和以下
fo:list item body
重叠。如何设置
开始缩进
结束缩进
以使用标签的实际宽度?目前看来,
label-end()
body-start()
是一个常量,但我希望有一个动态标签宽度。这在xsl fo中可能吗?

严格来说,在xsl 1.1中是不可能的

如果FOP支持自动表格布局,您可以通过使用标签和主体的两列表格来修改它

您还可以通过对列表项的正文内容使用
fo:inline container
来伪造每个列表项,但是目前FOP中的
fo:inline container
支持是有限的(请参阅)


但是,您可以使用Print&Page Layout社区组中的XSLT扩展来获取FOP区域树,以便根据格式化的大小做出决策。这里有一些使用扩展名在和处设置列表缩进的示例。

要做到这一点,您需要知道最长标签的长度。如果您这样做,请设置起点之间的临时距离以适应它。这与设置缩进的任何文字处理器没有什么不同。给定所需的最长缩进的已知长度,并在一行上显示所有缩进的内容,将该属性设置为保留标签的空间。例如,如果您的标签约为100磅,则:

       <fo:list-block provisional-distance-between-starts="100pt" provisional-label-separation="3pt">
            <fo:list-item>
                <fo:list-item-label end-indent="label-end()">
                    <fo:block>A.</fo:block>
                </fo:list-item-label>
                <fo:list-item-body start-indent="body-start()">
                    <fo:block>Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah 
                        Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah </fo:block>
                </fo:list-item-body>
            </fo:list-item>
            <fo:list-item>
                <fo:list-item-label end-indent="label-end()">
                    <fo:block>[VERYLONGKEY]</fo:block>
                </fo:list-item-label>
                <fo:list-item-body start-indent="body-start()">
                    <fo:block>Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah 
                        Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah </fo:block>
                </fo:list-item-body>
            </fo:list-item>
        </fo:list-block>

A.
废话废话废话废话废话废话废话废话
废话废话废话废话废话废话废话废话
[VERYLONGKEY]
废话废话废话废话废话废话废话废话
废话废话废话废话废话废话废话废话
结果如下:

请注意,这只是因为字符串[VERYLONGKEY]没有断点才需要的。如果您设置了起点之间的临时距离,并且标签类似于“我是一个非常长的标签,我应该包装”,那么它将包装

像这样:

         <fo:list-block provisional-distance-between-starts="100pt" provisional-label-separation="3pt">
            <fo:list-item>
                <fo:list-item-label end-indent="label-end()">
                    <fo:block>A.</fo:block>
                </fo:list-item-label>
                <fo:list-item-body start-indent="body-start()">
                    <fo:block>Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah 
                        Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah </fo:block>
                </fo:list-item-body>
            </fo:list-item>
            <fo:list-item>
                <fo:list-item-label end-indent="label-end()">
                    <fo:block>[VERYLONGKEY]</fo:block>
                </fo:list-item-label>
                <fo:list-item-body start-indent="body-start()">
                    <fo:block>Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah 
                        Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah </fo:block>
                </fo:list-item-body>
            </fo:list-item>
            <fo:list-item>
                <fo:list-item-label end-indent="label-end()">
                    <fo:block>I am a label that is very long and I should wrap</fo:block>
                </fo:list-item-label>
                <fo:list-item-body start-indent="body-start()">
                    <fo:block>Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah 
                        Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah </fo:block>
                </fo:list-item-body>
            </fo:list-item>
        </fo:list-block>

A.
废话废话废话废话废话废话废话废话
废话废话废话废话废话废话废话废话
[VERYLONGKEY]
废话废话废话废话废话废话废话废话
废话废话废话废话废话废话废话废话
我是一个很长的标签,我应该包装
废话废话废话废话废话废话废话废话
废话废话废话废话废话废话废话废话