【问题标题】:Apache FOP will not wrap my textApache FOP 不会换行我的文本
【发布时间】:2013-07-08 14:57:07
【问题描述】:

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


版本: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>

【问题讨论】:

    标签: pdf pdf-generation xsl-fo apache-fop docbook


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      这可能很旧,但我遇到了这个并写了一个 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>
      

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

      【讨论】:

        猜你喜欢
        • 2013-10-03
        • 2014-12-30
        • 2013-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-04
        • 2020-11-30
        相关资源
        最近更新 更多