概述
最近有一個需求,在界面對表格進行自動截圖,,然后將圖片存起來
方案
第一種: selenium +chromedirver + pillow
使用自動化工具,,網(wǎng)頁截圖, 通過元素定位到具體位置,,pillow進行裁剪得出最理想結(jié)果,,此方案還是存在很大誤差,因為表格數(shù)據(jù)數(shù)量非固定的,,計算誤差很大,,難以精準
第二種: prettytable + pillow
通過prettytable將數(shù)據(jù)生成簡單表格布局,通過pillow 生成圖片,,這個方案簡單容易,,但是表格樣式過于丑陋,暫不考慮
第三種: html-table + imgkit
通過html-table將數(shù)據(jù)生成帶樣式的html文件,,然后使用imgkit 轉(zhuǎn)換成圖片,,該方案是目前最理想的
實施過程
1、環(huán)境安裝
pip insatll html-table==1.0
pip insatll imgkit==1.0.2
2,、demo演示
import imgkit
from HTMLTable import HTMLTable
# 標題
table = HTMLTable(caption='果園收成表')
# 表頭行
table.append_header_rows((
('名稱', '產(chǎn)量 (噸)','增長量 (噸)','增長率 (%)'),
))
# 數(shù)據(jù)行
table.append_data_rows((
('荔枝', 11, 1, 10),
('芒果', 9, -1, -10),
('香蕉', 6, 1, 20),
))
# 標題樣式
table.caption.set_style({
'font-size': '15px',
})
# 表格樣式,,即<table>標簽樣式
table.set_style({
'border-collapse': 'collapse',
'word-break': 'keep-all',
'white-space': 'nowrap',
'font-size': '14px',
})
# 統(tǒng)一設(shè)置所有單元格樣式,<td>或<th>
table.set_cell_style({
'width': '250px',
'border-color': '#000',
'border-width': '1px',
'border-style': 'solid',
'padding': '5px',
})
# 表頭樣式
table.set_header_row_style({
'color': '#fff',
'background-color': '#48a6fb',
'font-size': '18px',
})
# 覆蓋表頭單元格字體樣式
table.set_header_cell_style({
'padding': '15px',
})
# 調(diào)小次表頭字體大小
table[1].set_cell_style({
'padding': '8px',
'font-size': '15px',
})
# 遍歷數(shù)據(jù)行,,如果增長量為負,,標紅背景顏色
for row in table.iter_data_rows():
if row[2].value < 0:
row.set_style({
'background-color': '#ffdddd',
})
body = table.to_html()
# html的charset='UTF-8'必須加上,否則中午會亂碼
html = '<!DOCTYPE html><html><head><meta charset='UTF-8'></head><body>{0}</body></html>'.format(body)
# 生成圖片
imgkit.from_string(html, 'out.jpg')
imgkit官方文檔:https://github.com/jarrekk/imgkit