如何在Reportlab中为单个段落的行间添加间距

6 投票
2 回答
14400 浏览
提问于 2025-04-16 15:59

我有一段文字,这段文字是从数据库中动态提取的,然后放到一个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

给段落样式添加前导符

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()

结果 在这里输入图片描述

15

你想要改变的东西很可能是行间距。从用户手册的第六章可以找到相关信息。

要实现双倍行距,可以使用较大的行间距。如果你把自动行间距(默认是“关闭”)设置为“最小”(即使观察到的行间距小于指定的行间距也使用)或“最大”(使用观察到的和指定的中较大的那个),那么系统会尝试逐行确定行间距。这在行中包含不同字体大小等情况时可能会很有用。

行间距在第二章中有定义:

行间距(Leading)

一行开始的地方和下一行开始的地方之间的垂直距离叫做行间距偏移。

所以可以尝试不同的行间距值,比如:

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

撰写回答