模板文件
{% 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 result
jinja模板封装
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'