模板文件
{% for row_ix, row in df.iterrows() %}
| Title of the PDF report - Row {{ row_ix + 1 }} | {{ date }} |
| Variable name | Variable value |
| {{ variable_name }} | {{ variable_value }} |
python代码
from datetime import date
import jinja2
import pandas as pd
from xhtml2pdf import pisa
df = pd.DataFrame({
"Average Introducer Score": [9, 9.1, 9.2],
"Reviewer Scores": ["Academic: 6, 6, 6", "Something", "Content"],
"Average Academic Score": [5.7, 5.8, 5.9],
"Average User Score": [1.2, 1.3, 1.4],
"Applied for (RC)": [9.2, 9.3, 9.4],
"Applied for (FEC)": [5.5, 5.6, 5.7],
"Duration (Months)": [36, 37, 38]})
html = jinja2.Environment( # Pandas DataFrame to HTML
loader=jinja2.FileSystemLoader(searchpath='')).get_template(
'report_template.html').render(date=date.today().strftime('%d, %b %Y'),
df=df)
# Convert HTML to PDF
with open('report.pdf', "w+b") as out_pdf_file_handle:
pisa.CreatePDF(
src=html, # HTML to convert
dest=out_pdf_file_handle) # File handle to receive resultjinja模板封装
def jinji_render_file(data=None, local_file_path=None, template_path=None): TemplateLoader = FileSystemLoader(searchpath='', encoding='utf-8') TemplateEnv = Environment(loader=TemplateLoader) template = TemplateEnv.get_template(template_path) data = template.render(**data) # write with open(local_file_path, 'w', encoding='utf8') as f: f.write(data)
中文乱码处理
def font_patch():
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfbase import pdfmetrics
from xhtml2pdf.default import DEFAULT_FONT
pdfmetrics.registerFont(TTFont('yh', '{}/font/msyh.ttf'.format(
settings.STATICFILES_DIRS[0])))
DEFAULT_FONT['helvetica'] = 'yh'