6

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

但是,这在这里行不通,因为我只有一个大段。

4

2 回答 2

15

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

要获得双倍行距文本,请使用高前导。如果将 autoLeading(default "off") 设置为 "min"(即使小于指定值,也使用观察到的前导)或 "max"(使用观察到的和指定的较大值),则尝试通过以下方式确定行上的前导线基础。如果行包含不同的字体大小等,这可能很有用。

领先在第 2 章前面的定义:

行间距(前导)

一条线的开始点和下一条线的开始点之间的垂直偏移量称为前导偏移量。

所以尝试不同的领先值,例如:

style = getSampleStyleSheet()['Normal']
style.leading = 24
于 2011-04-18T23:30:23.047 回答
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()

结果 在此处输入图像描述

于 2016-02-24T16:58:08.860 回答