Reportlab 表格样式问题

Reportlab 表格样式问题

Reportlab PDF是一款用来生成PDF的插件,性能及高,功能强大(商业互吹一波!)。支持多种语言,还支持前端HTML+CSS实现,我使用Python实现的。先给大家看一下我做的生产PDF效果图:
36220H145B(1)PO-华城衣歌路
整个PDF我只使用了一个表格,但是表格有些列在合并单元格之后,多行文本使用相同段落样式(ParagraphStyle),为了实现文本居中,触发表格样式神奇内部bug,IndexError: list index out of range,苦不堪言。

  1. 找出线索:参考官方文档reportlab-userguide.pdf,合并的单元格,必须是空字符串,否则会报错,之前添加过空行,直接加空列表,现在换成空字符串。文档说明:
    TableStyle Span Commands
  2. 狂调行高:后来原面料,BOM备注文本太多,行高设置了固定高度,因为客户说需要一页打印(数据多了,天方夜谭),我把以前行高自适应改成固定高度,因为ReportLab不支持自适应样式(None)和固定样式混合使用(这个希望官方以后支持一波),客户那边总有PDF出错,无法预览,很蓝瘦,香菇,然后拼命将物料数据这些行的行高调的越来越大,暂时解决问题(埋了雷,主要是内部插件报错,我也没找到好办法,无奈)。
  3. 重构大法:客户的尺码越来越多,有时候一个款有十二个尺码,当时写死了14个单元格(愚蠢呀,以为可以),因为列不同,样式不同,只能重构代码,将一个表格切割成四个表格,款式表格、动态尺码表格、物料表格、装箱表格,分别组装数据,维护样式(这样维护成本降低了,哪块有问题,调哪里样式,不然全局样式,太多,看的头皮发麻,当初偷懒付出的惨痛代价)。然后尺码表格每列列宽根据尺码数量动态计算,解决问题,但是尺码过多,就十分难看,然后大费力气的给客户做了个excel导出,相同数据,使用了DataFrame,其实还好,数据之前就换成DataFrame花了大力气,这次重构数据已经支持了,调调样式就好,尺码过多建议客户用excel导出(Pandas 大法好),然后物料表格每行行高使用(None)自动推算样式,这个功能还是很nice的,行高随文本字数变多就自动增加,非常棒的。
  4. 水落石出:后来发现是官方的一个bug,解决方式要修改源码(github很强势),下面把修改源码方法揭晓一下:
    blockTableStyle
    文档地址:blockTableStyle used repeatedly plus td style causes index out of range in platypus
    有的时候还是不能偷懒(墨菲定律),碰到使用插件错误要学会曲线救国,或者给官方提issue(但是时间太长,会被产品和客户砍死的)。

猜你喜欢

转载自blog.csdn.net/qq_37051001/article/details/102833646
今日推荐