2017-01-23 62 views
1

我想要對齊ReportLab表中的數據,以便將表的一半對齊到左側,並將表的一半對齊到右側。該表由段落和變量組成。以下是代碼:在ReportLab表中對齊數據

table_data = [] 
quote_title = Paragraph(qn, styles['Heading1']) 
table_data.append([ttab_empty, quote_title, ttab_empty]) #tab_empy are empty strings 
title_table = Table(table_data, colWidths=[5 * cm, 5 * cm, 5 * cm]) 
title_table.setStyle(TableStyle([('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black), 
    ('BOX', (0, 0), (-1, -1), 0.25, colors.black), 
    ('ALIGN', (0, 0), (-1, -1), "CENTER")])) 
elements.append(title_table) 

但是,align標籤未對齊表格中的文本。如果對齊方式設置爲左側,則同樣如此。我怎樣才能將我的細胞數據與中心對齊?

謝謝

回答

0

是否有可能您的段落覆蓋由TableStyle設置的對齊方式?請注意,您使用自己的對齊方式['Heading1'] ...

段落繼承reportlab.platypus.Flowable並將在構建時繪製自己。

提示:看錶的實施reportlab.platypus.tables.py

一些提示:

使用對齊符號:

from reportlab.lib.enums import TA_JUSTIFY,TA_LEFT,TA_CENTER,TA_RIGHT 

和自定義的字體名稱:

_baseFontName ='Helvetica' 
_baseFontNameB ='Helvetica-Bold' 
_baseFontNameI ='Helvetica-Oblique' 
_baseFontNameBI='Helvetica-BoldOblique' 

嘗試使用:

sty= ParagraphStyle(name='Heading1', 
        parent=self.stylesheet['Normal'], 
        fontName = _baseFontNameB, 
        fontSize=18, 
        leading=22, 
        spaceAfter=6, 
        alignment=TA_CENTER) 
        alias='h1') 

在表格中使用段落和段落樣式是一種很好的做法。 您可以使用pdfmetrics模塊計算寬度:

from reportlab.pdfbase.pdfmetrics import stringWidth, getFont 

或通過內置的功能:

para=Paragraph(text,sty) 

para.minWidth() 
print(para.__repr__()) 

所有的可流動應該有一個名爲minWidth()功能,這就是爲什麼你可以使用:

if isinstance(obj,Flowable): 
    return obj.minWidth() 

終於::

from reportlab.lib.enums import TA_JUSTIFY,TA_LEFT,TA_CENTER,TA_RIGHT 
from reportlab.pdfbase.pdfmetrics import stringWidth, getFont 

_baseFontName ='Helvetica' 
_baseFontNameB ='Helvetica-Bold' 
_baseFontNameI ='Helvetica-Oblique' 
_baseFontNameBI='Helvetica-BoldOblique' 

from reportlab.platypus import Paragraph, Table, TableStyle, SimpleDocTemplate 

from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle 
from reportlab.lib import colors 
from reportlab.lib.units import inch, cm, mm 

styles = getSampleStyleSheet() 
qn = "some title" 

doc = SimpleDocTemplate("test.pdf") 

elements = [] 

ttab_empty = "" 
table_data = [] 


print(vars(styles['Heading1'])) 

# that's why you should use your own paragraph style: 
sty = ParagraphStyle(name='Heading1', 
        parent=styles['Normal'], 
        fontName = _baseFontNameB, 
        fontSize=18, 
        leading=22, 
        spaceAfter=6, 
        alignment=TA_CENTER) 


quote_title = Paragraph(qn, sty) 

table_data.append([ttab_empty, quote_title, ttab_empty]) #tab_empy are empty strings 
title_table = Table(table_data, colWidths=[5 * cm, 5 * cm, 5 * cm]) 
title_table.setStyle(TableStyle([('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black), 
    ('BOX', (0, 0), (-1, -1), 0.25, colors.black), 
    ('ALIGN', (0, 0), (-1, -1), "CENTER")])) 
elements.append(title_table) 

doc.multiBuild(elements) 
+0

我看過tables.py。我發現這些表是用0樣式實現的。雖然我沒有看到關於段落的任何內容。所以我試圖創建一個基於'GetSampleStyleSheet()'的新類型的樣式,但這也不起作用。你介意多幫我一把嗎?我對Django很新穎。 – GreenSaber

+0

我試圖做得更精確,我認爲你應該實現你自己的StyleClass,在我的實現中,我只使用GetSampleStyleSheet()的結果沒有成功, – skidzo