python将表格展示的数据生成图片

概述

最近有一个需求,在界面对表格进行自动截图,然后将图片存起来

方案

第一种: selenium +chromedirver + pillow
使用自动化工具,网页截图, 通过元素定位到具体位置,pillow进行裁剪得出最理想结果,此方案还是存在很大误差,因为表格数据数量非固定的,计算误差很大,难以精准

第二种: prettytable + pillow
通过prettytable将数据生成简单表格布局,通过pillow 生成图片,这个方案简单容易,但是表格样式过于丑陋,暂不考虑

第三种: html-table + imgkit
通过html-table将数据生成带样式的html文件,然后使用imgkit 转换成图片,该方案是目前最理想的

实施过程

1、环境安装

  • python库安装
pip insatll  html-table==1.0
pip insatll imgkit==1.0.2
  • 还需下载一个核心工具wkhtmltopdf
    官方途径下载:https://wkhtmltopdf.org/downloads.html
    这个下载可能有点慢,建议从其他途径下载,由于系统window版的,所以本人从此处下载的http://www.pc6.com/softview/SoftView_559241.html
    安装完成后,需要配置环境变量

2、demo演示

import imgkit
from HTMLTable import  HTMLTable

# 标题
table = HTMLTable(caption='果园收成表')
# 表头行
table.append_header_rows((
    ('名称', '产量 (吨)','增长量 (吨)','增长率 (%)'),
))

# 数据行
table.append_data_rows((
    ('荔枝', 11, 1, 10),
    ('芒果', 9, -1, -10),
    ('香蕉', 6, 1, 20),
))
# 标题样式
table.caption.set_style({
    'font-size': '15px',
})
# 表格样式,即标签样式
table.set_style({
    'border-collapse': 'collapse',
    'word-break': 'keep-all',
    'white-space': 'nowrap',
    'font-size': '14px',
})
# 统一设置所有单元格样式,
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', }) # 调小次表头字体大小 table[1].set_cell_style({ 'padding': '8px', 'font-size': '15px', }) # 遍历数据行,如果增长量为负,标红背景颜色 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 = "{0}".format(body) # 生成图片 imgkit.from_string(html, 'out.jpg')

imgkit官方文档:https://github.com/jarrekk/imgkit

你可能感兴趣的:(python将表格展示的数据生成图片)