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(但是時間太長,會被產品和客戶砍死的)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章