是否有可能您的段落覆蓋由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)
我看過tables.py。我發現這些表是用0樣式實現的。雖然我沒有看到關於段落的任何內容。所以我試圖創建一個基於'GetSampleStyleSheet()'的新類型的樣式,但這也不起作用。你介意多幫我一把嗎?我對Django很新穎。 – GreenSaber
我試圖做得更精確,我認爲你應該實現你自己的StyleClass,在我的實現中,我只使用GetSampleStyleSheet()的結果沒有成功, – skidzo