2011-04-18 291 views
2

我有一段文本從數據庫中動態提取,並在提供給用戶之前放置在PDF中。文本被放置在襯裏背景上,很像記事本紙。我想要將文本間隔開,以便每條背景線之間只有一行文本。如何在單個段落內的行之間添加空格與Reportlab

我能夠使用下面的代碼來創建段落之間的垂直間距(用於生成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) 

但是,這不會在這裏工作,因爲我只有一個單一的大段落。

回答

11

很確定你想改變的是領導。請參閱第6章的用戶手冊。

要獲得雙倍行距文本,請使用高位 。如果設置 autoLeading(默認爲「關」),以 「分鐘」(使用觀察領先即使 小於指定)或「MAX」(使用 的較大觀察和指定) 然後試圖以確定 在逐行的基礎上領先。 如果 包含不同的字體大小等。

線領先是第2章中前面所定義的,這可能是有用的:

間間隔(主導)

之間的垂直偏移其中一行開始並且 下一次開始的點 被稱爲前導 偏移量。

所以儘量領導不同的值,例如:

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

在發帖之前,我讀了三段文章...那麼,這就是我爲了閱讀文檔而得到的結果。謝謝! – Arion 2011-04-18 23:36:10

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