One - One Code All

Blog Content

python中jinja2模板生成pdf,中文乱码

Python   2019-05-08 21:24:47

模板文件





    
        html, body {
            width: 500px;
            font-size: 12px;
            background: #fff;
            padding: 0px;
        }
        #my-custom-table {
            width: 500px;
            border: 0;
            margin-top: 20px;
        }
        #my-custom-table td {
            padding: 5px 0px 1px 5px;
            text-align: left;
        }
    




{% for row_ix, row in df.iterrows() %}

    
        
            
                Title of the PDF report - Row {{ row_ix + 1 }}
            
            
                {{ date }}
            
        
    

    
        {% for variable_name, variable_value in row.iteritems() %}
        {% if loop.index0 == 0 %}
        
            Variable name
            Variable value
        
        {% else %}
        
            {{ variable_name }}
            {{ variable_value }}
        
        {% endif %}
        {% endfor %}
    

    
    

{% endfor %}




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'



上一篇:pandas dataframe多列批量数据类型转换astype
下一篇:PostgreSQL数据库备份pg_dump导入压缩文件

The minute you think of giving up, think of the reason why you held on so long.