HTML转为PDF
安装pdfkit
pip3 install pdfkit
官网:https://wkhtmltopdf.org/downloads.html
pip3 install pdfkit
yum install wkhtmltopdf
https://cloud.tencent.com/developer/article/1747611
实现代码
import datetime
import pdfkit
from jinja2 import Environment, FileSystemLoader
from testFunc.pdf.data import datas
from testFunc.pdf.datetime_str import datetime_toString
def generate_html_content(html_template_name, html_name, **data):
env = Environment(
loader=FileSystemLoader(r"C:\Users\pdf\htmlTemplate"))
template = env.get_template(html_template_name)
html_content = template.render(data)
with open(html_name, "w", encoding="utf-8") as f:
f.write(html_content)
return html_content
def html_to_pdf(pdf_name, html_content):
path_wk = r'C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe'
config = pdfkit.configuration(wkhtmltopdf=path_wk)
pdfkit.from_string(html_content, pdf_name, configuration=config)
if __name__ == '__main__':
dt = datetime.datetime.now()
datetime_to_string = datetime_toString(dt)
pdf_name = "./pdfFolder/{}.pdf".format(datetime_to_string)
html_name = "./htmlFolder/{}.html".format(datetime_to_string)
columns = ["column1", "column2", "column3", "column4", "column5", "column6", "column7", "column8"]
html_content = generate_html_content("table.html", html_name, columns=columns, datas=datas)
html_to_pdf(pdf_name, html_content)
table.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>666666</title>
</head>
<body>
<table border="1">
<tr>
{% for column in columns %}
<th style="font-size: 10px;font-weight: bold">{{ column }}</th>
{% endfor %}
</tr>
{% for data in datas %}
<tr>
<td style="max-width: 500px;font-size: 8px">{{ data.column1 }}</td>
<td style="max-width: 500px;font-size: 8px">{{ data.column2 }}</td>
<td style="max-width: 500px;font-size: 8px">{{ data.column3 }}</td>
<td style="max-width: 500px;font-size: 8px">{{ data.column4 }}</td>
<td style="max-width: 500px;font-size: 8px">{{ data.column5 }}</td>
<td style="max-width: 500px;font-size: 8px">{{ data.column6 }}</td>
<td style="max-width: 500px;font-size: 8px">{{ data.column7 }}</td>
<td style="max-width: 500px;font-size: 8px">{{ data.column8 }}</td>
</tr>
{% endfor %}
</table>
</body>
</html>