美文网首页
python使用ReportLab 自动生成PDF

python使用ReportLab 自动生成PDF

作者: 我就是鱼鱼鱼 | 来源:发表于2022-04-12 19:40 被阅读0次

    1、一些比较常见的问题

    1.1、正文中中文字体问题

    一般是中文字体在报告中没有办法显示,这个时候需要在生成报告时候对字体进行设置

    pdfmetrics.registerFont(TTFont('SimSun', 'SimSun.ttf'))
    

    以上的字体以SimSun为例如果想要使用其他的字体可以直接下载安装,下载后需要按照到reportlab安装包下面的font文件夹中。

    1.2、图表中中文字体问题

    plt.rcParams['font.sans-serif'] = ['KaiTi', 'SimHei', 'FangSong'] #汉字字体,优先使用楷体,如果找不到楷体则使用黑体
    plt.rcParams['font.size'] = 12  # 字体大小
    plt.rcParams['axes.unicode_minus'] = False  # 正常显示负号
    

    2、生成PDF

    2.1、导入相关包

    import pandas #数据处理
    from reportlab.lib import colors #生成PDF颜色相关的包
    from reportlab.platypus import Table,TableStyle,Spacer,SimpleDocTemplate,Image#用于PDF中的表格、图片生成
    from reportlab.pdfbase import pdfmetrics
    from reportlab.pdfbase.ttfonts import TTFont
    from reportlab.lib.units import inch
    from matplotlib import pyplot as plt #画图的包
    

    2.2、标题与描述

    style = getSampleStyleSheet()
    title = """<para> 标题内容</para>""" #填写标题内容
    description = """
                                    <para>
                                    <font face='SimSun'>
                                    该部分是正文内容
                                    </font>
                                    </para>
                            """ #填写正文内容
    D.append(Paragraph(description, style['BodyText']))#将正文内容添加到PDF中
    D.append(Paragraph(title, style['Title']))#将标题添加到PDF中
    

    2.3、表格

    D = [] #创建一个空列表用于存放内容
    data= [['00', '01', '02', '03', '04'],
     ['10', '11', '12', '13', '14'],
     ['20', '21', '22', '23', '24'],
     ['30', '31', '32', '33', '34']]
    #表格样式设置,这个样式是按照我的数据设置的,效果可见图片
    table_styles = [
        ('GRID',(0,0),(-1,-1),1,colors.black),
        ('SPAN',(0,0),(0,1)),#合并单元格
        ('SPAN',(1,0),(2,0)),#合并单元格
        ('SPAN',(3,0),(4,0)),
        ('SPAN',(5,0),(6,0)),
        ('SPAN',(7,0),(8,0)),
        ('SPAN',(9,0),(10,0)),
        ('BACKGROUND', (0, 0), (10, 1), colors.red),#背景颜色
        ('TEXTCOLOR',(0, 0), (10, 1),colors.white),#设置字体颜色
        ('FONTSIZE',(0,0),(-1,-1),12),
        ('ALIGN',(0,0),(-1,-1),'CENTER'),
        ('FONT',(0,0),(-1,-1),'SimSun')
    ]
    #将表格的内容添加到空列表中用于生成PDF
    mytable = Table(table_data_time,rowHeights=30) #表格数据
    mytab_style = TableStyle(table_styles) #表格样式
    mytable.setStyle(mytab_style)
    D.append(mytable)
    D.append(Spacer(1,0.4*inch))
    

    注意数据的格式,一般可以使用data = data.to_numpy().tolist() 对数据格式进行转换,使用该方法转换数据的时候需要主要这个转换的数据类型需要是serries或者Dataframe

    表格样式.png

    2.4、图表

    如果图表中有中文字体,可在创建图表前增加上面的常见图表问题处理

    data = [5, 20, 15, 25, 30]
    plt.bar(range(len(data)), data)
    plt.title('图表')
    plt.tight_layout()
    plt.savefig('plot.png')#将图表转化成图片
    img = Image('plot.png') #转化程成replotlib中图表格式
    D.append(img) # 将图片添加到PDF元素中
    

    2.5、构建PDF元素,生成PDF

    doc = SimpleDocTemplate(
        "hhh.pdf", #PDF名称
        pagesize=(841.89, 585.27),#PDF大小,这个设置有点想PPT中的大小
        topMargin=30, #上边距
        bottomMargin=30 #下边距
    )
    doc.build(D)
    

    相关文章

      网友评论

          本文标题:python使用ReportLab 自动生成PDF

          本文链接:https://www.haomeiwen.com/subject/swhrsrtx.html