XSL-FO fop.长文本流入相邻的单元格/块,遮挡了那里的东西

Ale*_*lex 11 pdf-generation xsl-fo apache-fop

任何人都可以建议我一个长话(如序列号)包裹的方法吗?我试过一些商业软件,没有这样的问题.它是一个fop bug还是可能有解决方案?

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

Zko*_*koh 12

您可以在fo:block喜欢中指定wrap-option属性:

<fo:block wrap-option="wrap"> ... stuff </fo:block>
Run Code Online (Sandbox Code Playgroud)

这是该属性的XSL-FO规范:

XSL定义:

价值:无包装| 包裹| 继承

初始:换行

适用于:fo:block,fo:inline,fo:page-number,fo:page-number-citation

继承:是的

百分比:N/A.

媒体:视觉

值具有以下含义:

无包装

不会执行换行.

如果行长度超出内容矩形的可用宽度,则将根据参考区域上指定的"溢出"属性处理溢出.

包裹

如果线溢出可用块宽,则会发生断行.不会发生特殊标记或其他治疗.

指定如何处理格式化对象内容的换行(换行).

当"换行处理"的值为"保留"时,实现必须支持本建议书中定义的"无包装"值.

您还可以在wrap-option中定义属性fo:table-cell

<fo:table-cell wrap-option="wrap"> ... </fo:table-cell>
Run Code Online (Sandbox Code Playgroud)

并且fo:blocks内将继承该属性.

  • `wrap-option ="wrap"`告诉格式化程序**执行换行**,但这并不能保证换行符**找到合适的换行位置; 而且,`wrap`是默认属性值,因此通常不需要显式设置它. (5认同)

Mic*_*evý 8

只有当文本包含由空格分割的多个单词时,Zkoh的答案(包装)才会有所帮助.如果长话(如有问题的那样),连字是可行的(正如丹尼尔建议的那样).

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

  1. FOP是用从TeX的断字算法和由于某些授权问题,(对于某些语言至少)这些算法都不是标准的FOP二进制分发的一部分(如规定在这里),必须从单独下载OFFO网站.网站上有两种连字模式文件.XML格式(需要首先编译为与FOP一起使用)和JAR文件(已编译).一定要下载编译版!安装很简单,文档很好 - 只需将OFFO二进制文件放入FOP的lib文件夹即可...
  2. 不要忘记指定文档的语言,如果需要,在块级别启用连字符(它继承,所以将它添加到根元素,你应该没问题) - 请参阅FOP常见问题解答


Dan*_*ley 6

连字法会解决你的问题吗?您应该能够使用hyphenate="true"属性启用连字符.此属性的放置取决于您要启用连字的位置.

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

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

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