XSL-FO 后备箱。长文本流入相邻的单元格/块,掩盖那里的东西
Posted
技术标签:
【中文标题】XSL-FO 后备箱。长文本流入相邻的单元格/块,掩盖那里的东西【英文标题】:XSL-FO fop. Long text flows into adjacent cells/block, obscuring stuff there 【发布时间】:2011-05-14 06:15:24 【问题描述】:谁能给我一个方法来让长词(比如序列号)被包装起来?我尝试了一些商业软件,没有这样的问题。是 fop 错误还是可能有可用的解决方案?
我不能在文档中每个单词的每个字符后插入零长度空格。这个解决方案对我来说听起来很疯狂。
【问题讨论】:
【参考方案1】:您可以像这样在fo:block
中指定 wrap-option 属性:
<fo:block wrap-option="wrap"> ... stuff </fo:block>
这是该属性的 XSL-FO 规范:
XSL 定义:
值:不换行 |换行 |继承
首字母:换行
适用于:fo:block, fo:inline, fo:page-number, fo:页码引用
继承:是的
百分比:不适用
媒体:视觉
值的含义如下:
无包装
不会执行换行。
如果行长于 的可用宽度 内容矩形,溢出将 按照规定进行处理 上指定的“溢出”属性 参考区域。
换行
如果 行溢出可用块 宽度。没有特殊标记或其他 会进行治疗。
指定如何换行 (换行)的内容 格式化对象将被处理。
实现必须支持 "no-wrap" 值,如此定义 推荐,当值 “换行处理”是“保留”。
您还可以在fo:table-cell
中定义wrap-option
属性
<fo:table-cell wrap-option="wrap"> ... </fo:table-cell>
并且其中的fo:block
s 将继承该属性。
【讨论】:
wrap-option="wrap"
告诉格式化程序执行换行,但不能保证换行会找到合适的地方换行符;此外,wrap
是默认属性值,因此通常不需要显式设置。【参考方案2】:
Zkoh 的回答(换行)仅在文本包含多个由空格分隔的单词时才会为您提供帮助。在长词的情况下(如所讨论的那样),断字是可行的(正如丹尼尔所建议的那样)。
FOP 中的断字可能会出现很多问题:
-
FOP 使用来自 TeX 的连字符算法,并且由于某些许可问题,这些算法(至少对于某些语言而言)不是标准 FOP 二进制分发的一部分(如 here 所述)并且必须从OFFO web site 单独下载。网站上有两种断字模式文件。 XML 格式(需要首先编译才能与 FOP 一起使用)和 JAR 文件(已编译)。一定要下载编译版!安装很简单,well documented - 只需将 OFFO 二进制文件放到 FOP 的 lib 文件夹中即可...
不要忘记指定文档的语言,如果需要,在块级别启用连字符(它继承,所以将它添加到根元素,你应该没问题) - 见FOP FAQ
【讨论】:
这应该是公认的答案。此处指定的 OFFO 网站已关闭,这是另一个指向 OFFO 的链接。此外,如前所述,应该将语言 xml:lang="en" 添加到文件的根目录中(这很难弄清楚......)。【参考方案3】:断字能解决您的问题吗?您应该能够使用hyphenate="true"
属性启用断字。此属性的位置取决于您要启用连字的位置。
这是 FOP 连字合规性的链接:Apache FOP Compliance Page
这里是 XSL 规范的链接:XSL Spec #hyphenate
如果没有,您可能需要尝试一些保留属性(例如keep-together.within-line
)。
【讨论】:
【参考方案4】:使用 keep-together.within-column="always" 而不是 keep-together="always" of 在表格单元格中保留长行。
【讨论】:
【参考方案5】:问题是关于序列号,而不是字典单词。指定hyphenate="true"
仅在断字字典或断字算法可以成功断字文本中的单词时才有用。序列号很少会生成可以像单词一样有用连字符的序列。
当然,您可以使用 XSLT 在表格单元格的文本中添加零宽度空格,而不是手动进行。 *** 喜欢重复的问题(请参阅https://***.blog/2010/11/16/dr-strangedupe-or-how-i-learned-to-stop-worrying-and-love-duplication/),但是,请参阅XSL-FO: Force Wrap on Table Entries 中的答案。
【讨论】:
【参考方案6】:对于文本溢出问题使用keep-together="auto"
属性。
文本溢出问题
使用keep-together="auto"
属性后的固定版本。
【讨论】:
以上是关于XSL-FO 后备箱。长文本流入相邻的单元格/块,掩盖那里的东西的主要内容,如果未能解决你的问题,请参考以下文章