pdf - Apache FOP 不会换行我的文本

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

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


版本:Apache FOP 0.95、1.0 和 1.1 出现问题。不幸的是,旧版本无法在我的 DocBook Maven 设置中运行,因此我尚未测试这些版本。


这是我的 FO 文件中的 block :

<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>

最佳答案

为了使字符串换行,行内必须有可中断字符。
考虑通过在某些位置插入零宽度空格字符()来预处理您的输入。格式化程序会看到它,并且仅在必要时才会在这些字符处换行。将看不到该字符的其他出现。

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

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

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

关于pdf - Apache FOP 不会换行我的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17529831/

相关文章:

xml - XSLT FO 列表元素

pdf-generation - wkhtmltopdf 和基于表单的身份验证

ios - WKWebView将pdf保存到ibooks,从链接保存pdf

c# - ITextSharp 将文本插入现有的 pdf

c++ - 像 Photoshop 质量一样将 PDF 转换为 JPG - 商业 C++/Delphi 库

html - Rotativa 生成的 PDF 无法正确呈现 - 分页符/元素中断

documentation - 从同一来源生成 CHM 帮助和 PDF 手册

xml - 如何为整个表格创建边框

xslt - 如何在不扩大行高的情况下在段落的第一行生成首字母?

ios - 通过 AirDrop 发送 PDF 时命名文件