2011-10-09 31 views
4

我使用ReportLab構建PDF。我的程序有MyDocTemplate(SimpleDocTemplate)類,有兩種方法:beforePage(self)afterPage(self),它在每個頁面上添加頁眉和頁腳(如PNG圖像)。還有一個描述ParagraphStyleMyDocStyle類。ReportLab:模板'First'的框架'正常'頁面1上的可流動性過大

主要方法是這樣的:

TITLE = Paragraph(Title, MyDocStyle.h1) 
TO = Paragraph(To, MyDocStyle.h2) 
FROM = Paragraph(From, MyDocStyle.h2) 
SUBJECT = Paragraph(Subject, MyDocStyle.h2) 
LONG_PARAGRAPH = Paragraph(Text, MyDocStyle.h3) 
... 

Elements = [TITLE, TO, FROM, SUBJECT, LONG_PARAGRAPH, ...] 
doc = MyDocTemplete('output.pdf', pagesize=A4, 
        leftMargin=2*cm, rightMargin=2*cm, 
        topMargin=4*cm, bottomMargin=4*cm) 
doc.build(Elements) 

數據來自CSV文件和圖形用戶界面。時不時(取決於數據長度)我收到一個錯誤:

Flowable <Spacer at 0x2631120 frame=normal>...(1 x 5.66929133858) too large 
on page 1 in frame 'normal'(469.88976378 x 603.118110236) of template 'First' 

此異常停止我的程序。對於我在MyDocStyleh2.keepWithNext = 1中設置的簡短段落,它不是完美的解決方案。如果段落末尾與頁面末尾(文本區域)不「重合」,ReportLab將正確分割長段落。

我該如何處理?

回答

-2

已解決。請勿使用Spacer(例如​​)作爲Paragraph的分隔符。相反,在ParagraphStyle定義spaceBeforespaceAfter,例如:當ReportLab的嘗試兩頁分割的間隔發生

ParagraphStyle(name = 'Normal', 
       fontName = "Verdana", 
       fontSize = 11, 
       leading = 15, 
       alignment = TA_JUSTIFY, 
       allowOrphans = 0, 
       spaceBefore = 20, 
       spaceAfter = 20, 
       wordWrap = 1) 
+6

我面臨同樣的問題,很少有測試顯示Spacer似乎不是問題。請不要讓用戶害怕使用它,除非您的假設背後有其他基礎。 – Priyeshj

2

此錯誤。似乎解決此問題的唯一方法是將Spacer放入KeepTogether元素中:

elements.append(KeepTogether(Spacer(width, height)))