【问题标题】:Split long paragraph拆分长段
【发布时间】:2018-02-26 21:02:52
【问题描述】:

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

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

【问题讨论】:

    标签: reportlab platypus


    【解决方案1】:

    换行标记<br/> 应该与PLATYPUS 一起使用,如第78 页上ReportLab User Guide图6-8 所示。如果自动关闭换行符@987654324 则会出现错误@ 未使用。标签<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)
    

    【讨论】:

    • 非常感谢您的回答,我试图重现您的示例,但我得到:``` from reportlab.lib.pagesizes import letter ImportError: No module named reportlab.lib.pagesizes```使用 3.4.0(最新的 pypi 版本) - 你使用的是什么版本?
    • 你是对的,这应该可以。我发现了问题:我从“reportlab.platypus.para”导入“段落”,而不是从“reportlab.platypus”导入。我真的不知道为什么这是可能的并且大部分工作,但是,谢谢。再次。
    • @schneck 有趣,我不知道“reportlab.platypus.para”中的experimental paragraph implementation
    猜你喜欢
    • 2022-12-22
    • 1970-01-01
    • 2013-10-14
    • 1970-01-01
    • 2014-10-02
    • 2021-07-23
    • 1970-01-01
    • 2015-11-14
    • 2016-12-06
    相关资源
    最近更新 更多