拆分长段落
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)
我正在尝试在我的 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)