任何人都可以建议我一种方法来包装长词(如序列号)吗?我尝试了一些商业软件,没有这样的问题。它是一个 fop 错误还是可能有可用的解决方案?
我不能在文档中每个单词的每个字符之后插入零长度空格。这个解决方案对我来说听起来很疯狂。
任何人都可以建议我一种方法来包装长词(如序列号)吗?我尝试了一些商业软件,没有这样的问题。它是一个 fop 错误还是可能有可用的解决方案?
我不能在文档中每个单词的每个字符之后插入零长度空格。这个解决方案对我来说听起来很疯狂。
您可以fo:block
像这样指定 wrap-option 属性:
<fo:block wrap-option="wrap"> ... stuff </fo:block>
这是该属性的 XSL-FO 规范:
XSL 定义:
价值:无包装 | 换行 | 继承
首字母:换行
适用于:fo:block、fo:inline、fo:page-number、fo:page-number-citation
继承:是
百分比:不适用
媒体:视觉
值具有以下含义:
无包装
不会执行换行。
如果行长于内容矩形的可用宽度,溢出将根据参考区域上指定的“溢出”属性进行处理。
裹
如果行溢出可用的块宽度,就会发生换行。不会发生特殊标记或其他处理。
指定如何处理格式化对象内容的换行(换行)。
当“linefeed-treatment”的值为“preserve”时,实现必须支持本建议书中定义的“no-wrap”值。
您还可以wrap-option
在fo:table-cell
<fo:table-cell wrap-option="wrap"> ... </fo:table-cell>
并且其中的fo:block
s 将继承该属性。
只有当文本包含由空格分隔的多个单词时,Zkoh 的答案(包装)才会对您有所帮助。在长词的情况下(如所讨论的那样),断字是可行的(正如丹尼尔所建议的那样)。
FOP 中的断字可能存在很多问题:
断字能解决你的问题吗?您应该能够使用hyphenate="true"
属性启用断字。此属性的位置将取决于您要启用断字的位置。
这是 FOP 的连字合规性的链接:Apache FOP 合规性页面
这是 XSL 规范的链接:XSL Spec #hyphenate
如果没有,您可能需要尝试一些保留属性(如keep-together.within-line
)。
使用 keep-together.within-column="always" 而不是 keep-together="always" of 在表格单元格中保留长行。
问题是关于序列号,而不是关于字典单词。hyphenate="true"
仅当断字字典或断字算法可以成功地为文本中的单词断字时,指定才有用。序列号很少会生成可以像单词一样有用连字符的序列。
当然,您可以使用 XSLT 在表格单元格的文本中添加零宽度空格,而不是手动进行。StackOverflow 喜欢重复的问题(请参阅https://stackoverflow.blog/2010/11/16/dr-strangedupe-or-how-i-learned-to-stop-worrying-and-love-duplication/),但是,所有同样,请参阅XSL-FO: Force Wrap on Table Entries中的答案。