【问题标题】:How to add space between lines within a single paragraph with Reportlab如何使用 Reportlab 在单个段落中的行之间添加空格
【发布时间】:2011-08-08 06:28:54
【问题描述】:

我有一个从数据库中动态提取的文本块,并在提供给用户之前放置在 PDF 中。文本被放置在带衬里的背景上,就像记事本纸一样。我想间隔文本,以便每个背景行之间只有一行文本。

我能够使用以下代码在段落之间创建垂直间距(用于生成 PDF 的另一部分)。

    style = getSampleStyleSheet()['Normal']
    style.fontName = 'Helvetica'
    style.spaceAfter = 15
    style.alignment = TA_JUSTIFY

    story = [Paragraph(choice.value,style) for choice in chain(context['question1'].itervalues(),context['question2'].itervalues())]
    generated_file = StringIO()
    frame1 = Frame(50,100,245,240, showBoundary=0)
    frame2 = Frame(320,100,245,240, showBoundary=0)
    page_template = PageTemplate(frames=[frame1,frame2])
    doc = BaseDocTemplate(generated_file,pageTemplates=[page_template])
    doc.build(story)

但是,这在这里不起作用,因为我只有一个大段落。

【问题讨论】:

    标签: python reportlab paragraph


    【解决方案1】:

    很确定你想要改变的是领先的。来自第 6 章的用户手册。

    要获得双倍行距的文本,请使用高 领导。如果你设置 自动前导(默认“关闭”)到 “min”(使用观察到的前导,即使 小于指定)或“max”(使用 观察到的和指定的较大者) 然后尝试确定 逐行领先。 如果行 包含不同的字体大小等。

    前导在第 2 章中已定义:

    行间距(前导)

    点之间的垂直偏移 一行从哪里开始,在哪里 下一个开始被称为领先 偏移量。

    所以尝试不同的前导值,例如:

    style = getSampleStyleSheet()['Normal']
    style.leading = 24
    

    【讨论】:

    • 我在发布之前将该段落阅读了三遍......嗯,这就是我通过浏览文档得到的。谢谢!
    【解决方案2】:

    添加引导到 ParagraphStyle

    orden = ParagraphStyle('orden')
    orden.leading = 14
    orden.borderPadding = 10
    orden.backColor=colors.gray
    orden.fontSize = 14
    

    生成 PDF

    buffer = BytesIO()
    p = canvas.Canvas(buffer, pagesize=letter)
    
    text = Paragraph("TEXT Nro 0001", orden)
    text.wrapOn(p,500,10)
    text.drawOn(p, 45, 200)
    
    
    p.showPage()
    p.save()
    pdf = buffer.getvalue()
    buffer.close()
    

    结果

    【讨论】: