我有以下标记:
<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>fo:list-item-label和以下fo:list-item-body重叠。 如何设置start-indent和end-indent以使用标签的实际宽度? 目前看来label-end()和body-start()是一个常量,但我希望有一个动态标签宽度。 这可能在xsl-fo中吗?
I have the following fo markup:
<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>While this looks fine in print but if I change it to:
<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>the fo:list-item-label and the following fo:list-item-body overlap. How can I set the start-indent and end-indent to use the actual width of my labels? Currently it seems that label-end() and body-start() is a constant but I would like to have a dynamic label width. Is this possible in xsl-fo?
最满意答案
您需要知道最长标签的长度才能做到这一点。 如果您这样做,则设置临时距离 - 开始之间以适应它。 这与您设置缩进的任何字处理器没有什么不同。 鉴于您所需的最长缩进的已知长度以及您在一行中的所有内容,请将该属性设置为为您的标签保留空间。 例如,如果您的标签大约是100pt,那么:
<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>产量如下:
请注意,这只是必需的,因为您的字符串[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>
You need to know the length of your longest label to do that. If you do you set the provisional-distance-between-starts to accommodate it. This is no different than any Word Processor where you would set the indent. Given the known length of your longest indent required and you what it all on one line, set that attribute to hold space for your label. For example, if your label is about 100pt then:
<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>Yields the following:
And note this is only required because your string [VERYLONGKEY] has no break points. If you set the provisional-distance-between-starts and your label is something like "I am a label that is very long and I should wrap" it would wrap.
Like this:
<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>更多推荐
发布评论