拆分长段落

Split long paragraph

我正在尝试在我的 reportlab 文档中添加长段落。

当我只添加整个文本时就成功了,例如:

self.story.append(Paragraph(text, STYLE_PARAGRAPH))

并使用

构建它
self.doc.multiBuild(self.story, canvasmaker=MyCanvas)

问题是没有考虑换行符 (\n)。我试图用 <br/> 替换它们,但这似乎不被鸭嘴兽支持,我得到一个错误,说 br 标签是未知的。

我的下一次尝试是将其分成单独的段落:

for p in text.replace('\r', '').split('\n'):
    self.story.append(Paragraph(p, STYLE_PARAGRAPH))

这导致:

reportlab.platypus.doctemplate.LayoutError: Splitting error(n==1) on page 47 in [...]

知道我做错了什么吗?

--更新--

正如 Adam 所说,<br/> 应该有效,但在我的情况下却没有。经过长时间的调试,发现某处导入错误:

正确:

from reportlab.platypus import Paragraph

我的导入:

from reportlab.platypus.para import Paragraph

虽然我不知道为什么错误的导入仍然有效。

换行标记 <br/> 应该与 PLATYPUS 一起使用,如第 78 页 ReportLab User Guide 图 6-8 所示。有一个错误如果未使用 self-closing 换行符 <br/>。标签 <br></br> 将导致错误。

我创建并测试了一个简短的例子,用一个包含换行符的长段落来演示这一点。第三句之后和段落末尾有两个换行符标记。该段落被重复以在多个页面上进行演示。

from reportlab.lib.pagesizes import letter
from reportlab.lib.styles import ParagraphStyle
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.platypus import SimpleDocTemplate, Paragraph

stylesheet = getSampleStyleSheet()
stylesheet.add(ParagraphStyle(name='Paragraph', spaceAfter=10))
elements = []
# Create a long paragraph with multiple line breaks.
paragraph = "Lorem ipsum dolor sit amet, consectetur adipiscing elit." * 3
paragraph += "<br/><br/>"
paragraph += "Lorem ipsum dolor sit amet, consectetur adipiscing elit." * 10
paragraph += "<br/><br/>"
paragraph *= 10
elements.append(Paragraph(paragraph, stylesheet['Paragraph']))
pdf = SimpleDocTemplate('example.pdf', pagesize=letter)
pdf.build(elements)