10

我在文档中定义了这种风格:

styles.add(ParagraphStyle(name='Table Header', font ='Helvetica-Bold',fontSize=16, alignment=TA_CENTER))

我使用它来定义文本段落以进入每个表格的第一行(以便它们正确换行):

L2sub = [(Paragraph(L[0][0], styles['Table Header']))]

后来我添加表格的时候,还有一个定义样式的地方:

report.append(Table(data,style=[
                ('GRID',(0,0),(len(topiclist)-1,-1),0.5,colors.grey),
                ('FONT', (0,0),(len(topiclist)-1,0),'Helvetica-Bold',16),
                ('FONT', (0,1),(len(topiclist)-1,1),'Helvetica-Bold',12),
                ('ALIGN',(0,0),(-1,-1),'CENTER'),
                ('VALIGN',(0,0),(-1,-1),'MIDDLE'),
                ('SPAN',(0,0),(len(topiclist)-1,0)),
                ]))

我的问题是:定义第一行单元格垂直高度的设置在哪里?我遇到了一些问题,即文本对于单元格来说太大和/或在单元格中设置得太低,但我无法确定是什么原因导致它或如何解决它。我已经改变了这两种尺寸,但我不能让单元格的高度都一样。当我只是将文本而不是段落放入单元格时,表格 def'n 工作得很好,但是段落引起了问题。

4

2 回答 2

9

我不相信有一个设置TableStyle可以让你改变行高。Table创建新对象时会给出该测量值:

Table(data, colwidths, rowheights)

其中colwidthsrowheights是测量值列表,如下所示:

from reportlab.lib.units import inch
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.platypus import Paragraph
from reportlab.platypus import Table
from reportlab.lib import colors

# Creates a table with 2 columns, variable width
colwidths = [2.5*inch, .8*inch]

# Two rows with variable height
rowheights = [.4*inch, .2*inch]

table_style = [
    ('GRID', (0, 1), (-1, -1), 1, colors.black),
    ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),
    ('ALIGN', (1, 1), (1, -1), 'RIGHT')
]

style = getSampleStyleSheet()

title_paragraph = Paragraph(
    "<font size=13><b>My Title Here</b></font>",
    style["Normal"]
)
# Just filling in the first row
data = [[title_paragraph, 'Random text string']]

# Now we can create the table with our data, and column/row measurements
table = Table(data, colwidths, rowheights)

# Another way of setting table style, using the setStyle method.
table.setStyle(tbl_style)

report.append(table)

colwidths并且rowheights可以更改为适合内容所需的任何测量值。colwidths从左到右rowheights读取,从上到下读取。

如果您知道所有表格行的高度相同,则可以使用这个不错的快捷方式:

rowheights = [.2*inch] * len(data)

这为您提供了一个列表,例如变量[.2*inch, .2*inch, ...]中的每一行。data

于 2013-01-02T15:24:56.257 回答
7

(没有足够的声誉来评论其他答案)

关于最后一个快捷方式,只需“ROW_HEIGHT = 5 * mm”即可。无需将行高乘以表中的行数。

ROW_HEIGHT = 5 * mm
curr_table = Table(data, COL_WIDTHS, rowHeights=ROW_HEIGH )

节省一点内存。:)

于 2019-02-21T09:19:30.157 回答