2011-04-03 33 views
4

我建立使用一個的ReportLab PDF,包含大部分內容的表。添加頁面排版感知水平線的ReportLab的表格佈局

爲了幫助區分視覺行,我想在每行之後放一條水平線,,只要它不是頁面上的最後一行

爲了把水平線後每行,我可以只使用一個TableStyle:

style = TableStyle([ 
    ("LINEBELOW", (0,0), (-1,-1), 1, colors.black), 
    ]) 
t = Table(data) 
t.setStyle(style) 

..但使用這種TableStyles似乎並不可能,因爲在這一點上ReportLab的不會知道我的內容的頁面佈局。

有沒有辦法用onFirstPageonLaterPages參數到doc.build

回答

2

但它應該工作:這就是-1的美:這將是最後的行/列不管。唯一真正的技巧是如何在最後一行之後消除這條線。要做到這一點,只需更改「LINEBELOW」結束處的座標即可。也就是說,你的元組應該是這樣的:

("LINEBELOW", (0, 0), (-1, -2), 1, colors.black) 

這將確保它適用於高達排-2,即倒數第二排。這應該給你正是你想要的。

ETA 2011年4月6日

啊,你需要的是splitlast

("LINEBELOW", (0, 'splitlast'), (-1, 'splitlast'), 0, colors.black) 

自己選擇任何你想要的顏色,只要你的大小設置爲0

+0

我想省略:如果您在現有的「LINEBELOW」命令後添加一個樣式命令因此它應該工作對於PDF_的每個頁面中的最後一行_LINEBELOW(表格跨越許多頁面)。將其更改爲(-1,-2)僅刪除表格中最後一行下面的行。 – ejucovy 2011-04-06 16:08:38

+0

哦。以下是文檔中的相關部分:「在任何樣式命令中,第一行索引可以設置爲特殊字符串'splitlast'或'splitfirst'中的一個以指示該樣式只應用於拆分表的最後一行,或者延續的第一行,這樣就可以在拆分的時候分割更好的效果表。「 – 2011-04-06 20:21:41

+0

謝謝,這讓我更加接近。儘管如此,仍然無法運作。 :-( 我知道後表的命令都應該覆蓋早期的,但LINEBELOWs似乎是添加劑:畫線,重量0不會清除與體重1.我也嘗試'(「LINEBELOW」行了, (0, 'splitlast'),( - 1, 'splitlast'),1,colors.white)' - 這導致了灰線(白色黑色的) 這讓我找對了方向,雖然。我發現http://stackoverflow.com/questions/78450/python-reportlab-use-of-splitfirst-splitlast/94869#94869,它看起來像一個類似的子類的方法可能會奏效 – ejucovy 2011-04-07 19:41:19