如何处理非常长的fo:list

编程入门 行业动态 更新时间:2024-10-08 08:33:00
如何处理非常长的fo:list-item-labels的缩进?(How to handle indents of very long fo:list-item-labels?)

我有以下标记:

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

enter image description here

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>

enter image description here

更多推荐

本文发布于:2023-08-02 04:01:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1369109.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:如何处理   fo   list

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!