用户要求将300多讲者信息生成为图片, 思路:将excel里的内容放到html里 将html转换成图片 使用到的工具如下:
pip install pandas == 0.24.1
pip install imgkit == 1.0.2
pip install wkhtmltopdf == 0.2
因为需要将数据内容放到html 所以是在django里进行完成的 使用的是django 自带的 loader,Context 来进行替换的,python代码如下
# -*- coding:utf-8 -*-
import imgkit
import pandas as pd
from django.template import loader,Context
import os,django
os.environ['DJANGO_SETTINGS_MODULE'] = 'xxxx.settings' # 使用Django 的环境
django.setup()
config = imgkit.config(wkhtmltoimage='C:/Program Files/wkhtmltopdf/bin/wkhtmltoimage.exe') # wkhtmltoimage 安装路径 没有的话会报 No wkhtmltoimage executable found: ""
df = pd.read_excel('E:/htmlimg/doc.xlsx')
for i in df.index.values:
row_data = df.ix[i, ['name','info']].to_dict()
t = loader.get_template('demo.html') # html代码放在templates下
c =Context({"name":row_data['name'] ,"content":row_data['info'].replace('\n', '<br/>')})
html = t.render(c) # 生成想要的html
name = "E:/htmlimg/imgs/%s.png"%(i+1)
imgkit.from_string(html, name, config=config,options={
'width': 400,
'height': 800,
'encoding': 'UTF-8',
})
html 代码如下:
<!DOCTYPE html>
<html lang="en" style="width: 400px">
<head>
<meta charset="UTF-8">
<title>Title</title>
<meta name="viewport" content="width=350px,initial-scale=1.0,maximum-scale=1.0,user-scalable=0,viewport-fit=cover">
</head>
<body style="width: 400px" >
<div style="margin: 10px auto;border: 5px solid #23913a;border-radius: 10px;height: 750px;width:400px">
<div style="font-size: 30px; height: 80px;line-height: 80px;font-weight: bold;border-bottom: 2px solid #23913a;margin: 0px 10px;text-align: center">{{ name }}</div>
<div style="padding: 15px">
{{ content|safe }}
</div>
</div>
</body>
</html>
用的 excel 文件如下:
生成结果如下: