2

我希望一段文本在溢出时换行到下一行。文本没有空格或破折号。Apache FOP 不会换行也不会剪裁它,即使该块包含 overflow="hidden" 和 wrap-option="wrap" 属性。FO 文件不包含任何保持在一起的设置,因此不会导致此问题。


版本:Apache FOP 0.95、1.0 和 1.1 出现问题。不幸的是,旧版本在我的 DocBook Maven 设置中不起作用,所以我没有测试这些。


这是我的 FO 文件中的块:

<fo:block
 overflow="hidden"
 wrap-option="wrap"
 white-space-collapse="false"
 white-space-treatment="preserve"
 linefeed-treatment="preserve"
 text-align="start"
 margin-top="0.5em"
 margin-right="0.5pt"
 margin-bottom="1em"
 margin-left="0.5pt"
 border-width="0.5pt"
 border-left-style="solid"
 border-left-color="#D3CEC6"
 padding="2mm"
 font-family="Courier New"
 font-size="8pt"
 background-color="#EBE5D7">veryverylongtextwithoutspacesordashes
</fo:block>
4

2 回答 2

3

为了使字符串包装,您必须在该行中包含可破坏的字符。考虑通过在某些位置插入零宽度空格字符(或)
来预处理您的输入。格式化程序会看到它,并且仅在必要时才会在这些字符处换行。不会看到此字符的其他出现。&#x200b;&#8203;

<fo:block>very&#x200b;very&#x200b;long&#x200b;text&#x200b;without&#x200b;spaces&#x200b;or&#x200b;dashes</fo:block>

如果文本是一串数字,则在每个第 n 个符号处插入零宽度空格字符可能是合乎逻辑的。

或者,您可以设置格式化程序以根据特定语言的断字规则对字符串进行断字事实上,断字本质上是基于在原文中添加断字标记。同样,它要求字符串包含属于某种语言的有意义的文本。

于 2013-07-08T19:53:25.190 回答
0

这可能很旧,但我遇到了这个并编写了一个 FOP 函数来解决我的问题。

<#function breakValue value limit>
  <#if value?length lte limit>
    <#return value>
  <#else>
    <#return value?substring(0, limit) + "&#x200b;" + breakValue(value?substring(limit))>
  </#if>
</#function>

wherevalue是您要中断的字符串,limit是您要添加的索引,&#x200b;然后对字符串的其余部分调用相同的函数。

于 2016-08-09T17:21:34.087 回答