2017-01-23 4 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) 

그러나 표의 텍스트는 정렬 태그로 정렬되지 않습니다. 정렬이 왼쪽으로 설정된 경우에도 동일합니다. 셀 데이터를 센터에 정렬하려면 어떻게합니까?

감사

답변

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') 

테이블 내에서 Paragraphs 및 ParagraphStyle을 사용하는 것이 좋습니다. 당신은 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()'를 기반으로 한 새로운 유형의 스타일을 만들려고했지만 그 중 하나는 작동하지 않았습니다. 좀 도와 주겠니? 나는 꽤 장고를 처음 사용했다. – GreenSaber

+0

나는 더 정확하게하려고 노력했다. 나는 당신이 자신의 StyleClass를 구현해야한다고 생각한다. 내 구현에서는 GetSampleStyleSheet()의 결과를 사용하여 성공하지 못했다. – skidzo