我有一个从数据库中动态提取的文本块,在提供给用户之前放在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)
然而,这在这里不起作用,因为我只有一个大段。
答案 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()