如何使用Reportlab在单个段落中的行之间添加空格

时间:2011-04-18 23:14:18

标签: python reportlab paragraph

我有一个从数据库中动态提取的文本块,在提供给用户之前放在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)

然而,这在这里不起作用,因为我只有一个大段。

2 个答案:

答案 0 :(得分:11)

非常确定你想要改变的是领先。从第6章的用户手册。

  

要获得双倍行距文本,请使用高   领导。如果你设置   autoLeading(默认为“off”)到   “min”(使用观察导致即使   小于指定的)或“最大”(使用   观察和指定的较大者)   然后尝试确定   在逐行的基础上领先。   如果线条可能有用   包含不同的字体大小等。

前言在第2章中定义:

  

行间距(行距)

     

点之间的垂直偏移   哪一行开始,哪一行开始   下一次开始称为领先   偏移量。

因此尝试使用不同的值,例如:

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

答案 1 :(得分:0)

添加前导到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()

结果 enter image description here