1

我正在尝试在我的 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 [...]

知道我做错了什么吗?

- 更新 -

正如亚当所说,<br/>应该工作,但在我的情况下没有。经过长时间的调试,我发现导入错误:

正确的:

from reportlab.platypus import Paragraph

我的进口:

from reportlab.platypus.para import Paragraph

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

4

1 回答 1

0

换行标记<br/>应与 PLATYPUS 一起使用,如第 78 页的ReportLab 用户指南的图 6-8所示。如果不使用自动关闭换行符,则会出现错误。标签和将导致错误。 <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)
于 2018-02-27T02:05:33.570 回答