Reportlab - 如果段落对于一行来说太长,如何引入换行符

Posted

技术标签:

【中文标题】Reportlab - 如果段落对于一行来说太长,如何引入换行符【英文标题】:Reportlab - how to introduce line break if the paragraph is too long for a line 【发布时间】:2011-04-18 11:27:18 【问题描述】:

我有一个要添加到报告实验室框架的文本列表

style = getSampleStyleSheet()['Normal']
style.wordWrap = 'LTR'
style.leading = 12
for legend in legends:
    elements.append(Paragraph(str(legend),style))

如果图例太长,最后的文字根本看不到。 在这种情况下如何引入换行符。

【问题讨论】:

我建议你把这个发到reportlab-users@lists2.reportlab.com,邮件列表可能不是很酷,但ReportLab邮件列表仍然是最好的信息来源:) @juanefren 这仍然是真的吗?我发现文档仍然很浅。 【参考方案1】:

这可能适用也可能不适用,但我刚刚了解到我通常用来在 Python 字符串中引入新行的 \n 被 ReportLab 的 Paragraph 对象忽略。

从mailing list 我了解到,在段落中,您可以使用 html<br/> 来代替引入新行。

这对我很有效。

【讨论】:

<br/><br /> 工作。但是<br> 提出了ValueError: paraparser: syntax error: No content allowed in br tag ReportLab 使用 XML 解析器,因此它比 HTML 更像 XHTML,这意味着您必须有一个结束标记。 字符串前后有一段时间的空白,导致生成报告时出错。【参考方案2】:

正如PolyGeo 所说,您可以使用<br /> 在段落中添加新行。

将新行转换为<br /> 标签

replace('\n','<br />\n')

更新代码

 for legend in legends:
        content = str(legend).replace('\n','<br />\n')
        elements.append(Paragraph(content, style))

【讨论】:

【参考方案3】:
style.wordWrap = 'LTR'

抱歉,如果我将其误解为 letter,但段落本身是“word Wrapped”,与文档页面大小有关。

亚洲语言的用户指南值为“CJK”,可能您的设置根据其他内容(如亚洲语言分词)执行文本搜索终点线。将其设置为 None 应该可以做到这一点。

【讨论】:

以上是关于Reportlab - 如果段落对于一行来说太长,如何引入换行符的主要内容,如果未能解决你的问题,请参考以下文章

reportlab 中的多行(段落)页脚和页眉

如果单词对于textview来说太长,则强制下一个单词到新行

Python Reportlab 分表以适应不同的页面

为啥这个值对于我的 H2 表来说太长了

SQL 对于字符串来说太长了

HTML - 如何将段落分成同样宽的行?