python - 在 Reportlab 中 splitbyRows 做了什么?
问题描述
尝试使用reportlab将一张大表添加到PDF中。但是内容跨越了页面的左右边缘。
即使我将 columnWidth 设置为表格的固定宽度,内容看起来也太模糊了。所有单元格内容都是可流动的格式。
我可以使用 splitbyRows 解决吗?或者最好的方法是什么?
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Image, Paragraph, Spacer, LongTable
from reportlab.lib.pagesizes import A4, inch, cm
import numpy as np
from reportlab.lib import colors
# Pdf design parameters
FONT_STYLE_BOLD = 'Helvetica-Bold'
FONT_STYLE = 'Helvetica'
def addtable(col, row, table_data):
"""
Add table to the pdf
"""
# Defininig table structure(nos of rows, nos of columns, size of rows, size of columns)
#tableobj = Table(table_data, col * [3.26 * inch], row * [0.25 * inch], hAlign='LEFT')
tableobj = Table(table_data, colWidths = [1 * inch] * col, splitByRow=2, rowSplitRange=(5,20))
# Defining Table style
tablestyle = [('FONTNAME', (0, 0), (0, -1), FONT_STYLE),
('FONTNAME', (0, 0), (-1, 0), FONT_STYLE_BOLD),
('BACKGROUND', (0, 0), (-1, 0), colors.lightgrey),
('INNERGRID', (0, 0), (-1, -1), 0.25, colors.grey),
('RIGHTPADDING', (0, 1), (-1, -1), 3),
('BOX', (0, 0), (-1, -1), 0.25, colors.grey),
('FONTSIZE', (0, 0), (-1, -1), 9),
('ALIGN', (1, 0), (-1, -1), 'CENTER'),
]
tableobj.setStyle(TableStyle(tablestyle))
elements.append(tableobj)
elements = []
clust_data = [["Name", "Date", "Address", "CONTACT DETAILS", "JOB", "DESCRIPTION", "MISC", "JOB", "DESCRIPTION", "MISC", "OTHER", 'FIELD11', 'FIELD22'],
["Name", "Date", "Address", "CONTACT DETAILS", "JOB", "DESCRIPTION", "MISC", "JOB", "DESCRIPTION", "MISC", "OTHER", 'FIELD11', 'FIELD22'],
["Name", "Date", "Address", "CONTACT DETAILS", "JOB", "DESCRIPTION", "MISC", "JOB", "DESCRIPTION", "MISC", "OTHER", 'FIELD11', 'FIELD22'],
["Name", "Date", "Address", "CONTACT DETAILS", "JOB", "DESCRIPTION", "MISC", "JOB", "DESCRIPTION", "MISC", "OTHER", 'FIELD11', 'FIELD22'],
]
addtable(len(clust_data[0]), len(clust_data), clust_data)
doc = SimpleDocTemplate('table.pdf', pagesize=A4)
doc.topMargin = .13 * inch
doc.build(elements)
del elements[:]
解决方案
这是旧的,所以我相信你不再关心了。但这是答案。
您的 A4 页面大小为(8.27x11.69)in
. 你说给我addtable
创建一个有 13 列 ( len(data[0])
) 的表。并将它们全部设为 1 英寸宽(colWidths = [1 * inch] * col
)。
由于 13 英寸 + 边距 > 8.27 英寸,reportlab 将项目从页面上绘制出来。
很难找到文档提示。colWidths=['*']
将所有列设置为相等宽度,仅填充可用页面宽度。
推荐阅读
- ios - 尝试使用 Alamofire 4 和 OAuth2 发出 POST 请求时出错 - Swift
- oauth-2.0 - 如何强制使 salesforce 访问令牌过期?
- javascript - javascript从按钮运行动态代码
- javascript - 在 Puppeteer 中使用分部
- html - 剪辑路径是否适用于 Safari / Internet Explorer / Edge?
- sql - SQL - 我有一个“人”表和一个“帐户”表。如何按行列出所有人员,并为每个帐户类型设置一个余额列?
- c++ - 为什么纹理只出现在第一象限
- mysql - Mysql Master 主复制错误主/从
- wordpress - 联系表格 7 get_posted_data 在钩子 wpcf7_before_send_mail 中不起作用
- vba - MS Word 是否有相当于 ExecuteExcel4Macro