12

任何人都可以建议我一种方法来包装长词(如序列号)吗?我尝试了一些商业软件,没有这样的问题。它是一个 fop 错误还是可能有可用的解决方案?

我不能在文档中每个单词的每个字符之后插入零长度空格。这个解决方案对我来说听起来很疯狂。

4

6 回答 6

13

您可以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-optionfo:table-cell

<fo:table-cell wrap-option="wrap"> ... </fo:table-cell>

并且其中的fo:blocks 将继承该属性。

于 2011-01-13T11:26:13.170 回答
11

只有当文本包含由空格分隔的多个单词时,Zkoh 的答案(包装)才会对您有所帮助。在长词的情况下(如所讨论的那样),断字是可行的(正如丹尼尔所建议的那样)。

FOP 中的断字可能存在很多问题:

  1. FOP 使用来自 TeX 的连字符算法,并且由于一些许可问题,这些算法(至少对于某些语言)不是标准 FOP 二进制分发的一部分(如此所述),必须从OFFO 网站单独下载。网站上有两种断字模式文件。XML 格式(需要首先编译才能与 FOP 一起使用)和 JAR 文件(已编译)。一定要下载编译版!安装很简单并且有据可查- 只需将 OFFO 二进制文件放到 FOP 的 lib 文件夹中即可...
  2. 不要忘记指定文档的语言,如果需要,在块级别启用连字符(它是继承的,所以将它添加到根元素,你应该没问题) - 请参阅FOP 常见问题
于 2014-01-04T07:34:55.943 回答
6

断字能解决你的问题吗?您应该能够使用hyphenate="true"属性启用断字。此属性的位置将取决于您要启用断字的位置。

这是 FOP 的连字合规性的链接:Apache FOP 合规性页面

这是 XSL 规范的链接:XSL Spec #hyphenate

如果没有,您可能需要尝试一些保留属性(如keep-together.within-line)。

于 2010-11-23T05:52:54.663 回答
3

使用 keep-together.within-column="always" 而不是 keep-together="always" of 在表格单元格中保留长行。

于 2014-06-05T11:54:33.763 回答
1

对于文本溢出问题使用keep-together="auto"属性。在此处输入图像描述

文本溢出问题

在此处输入图像描述

keep-together="auto"使用属性后的固定版本。

于 2019-10-03T11:46:48.357 回答
1

问题是关于序列号,而不是关于字典单词。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中的答案。

于 2018-08-15T22:13:34.793 回答