我想要一个文本块在溢出时包裹到下一行。文本没有空格或破折号。 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>
答案 0 :(得分:3)
为了获得字符串换行,您必须在该行中包含易碎的字符
考虑通过在特定位置插入零宽度空格字符(​
或​
)来预处理输入。格式化程序将看到它,并且只在必要时才会破坏这些字符的行。其他出现的这种角色将不会出现。
<fo:block>very​very​long​text​without​spaces​or​dashes</fo:block>
如果文本是一串数字,则在每第n个符号插入零宽度空格字符可能是合乎逻辑的。
或者,您可以根据特定语言的连字规则将格式化程序设置为连字符字符串。事实上,连字主要基于在原始文本中添加连字符标记。同样,它需要字符串包含属于某种语言的有意义的文本。
答案 1 :(得分:0)
这可能是旧的,但我遇到了这个并写了一个FOP函数来解决我的问题。
<#function breakValue value limit>
<#if value?length lte limit>
<#return value>
<#else>
<#return value?substring(0, limit) + "​" + breakValue(value?substring(limit))>
</#if>
</#function>
其中value
是要中断的字符串,limit
是要添加​
的索引,然后在字符串的剩余部分调用相同的函数。