使用Python自动生成带有图表文字的PDF(附带万字完整代码)

目录

1、前言

2、数据取数与Reportlab包说明

3 、导入PDF生成相关包

4、初始化函数封装

5、PDF页脚

6、PDF页眉

7、PDF封面

8、PDF正文内容:表格

9、PDF正文内容:图表以及展示布局

10、生成PDF


1、前言

生成文件样本案例,本次模板生成偏向于PPT页面比例,如果要用使用A4纸张大小的页面可以自行进行设置,设置的参数会在后续代码中介绍,参考文档可以查看文件:https://download.csdn.net/download/sinat_39027078/87260262

生成的文件示例如下图截图所示,生成的文件格式为.pdf文件:

2、数据取数与Reportlab包说明

Reportlab是一个第三方Python库,专门用来生成PDF,以及被广泛运用与编辑文档和创造文档。

本PDF中数据使用查询数据库的方式进行。

数据查询和发送邮件的代码如下(最好将代码进行封装调用)

import pandas as pd
import numpy as np
import yagmail
import pymysql
from datetime import datetime
import time
from datetime import timedelta
conn=pymysql.connect(
host="11.11.11.11",#IP
port=1111,#端口
user="11",#用户名
#password="",#密码
database ="1111", #数据库名
charset="utf8")
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) #执行SQL必须使用的语句
sql=("11111") #填写要查询的SQL
cursor.execute(sql)
data=cursor.fetchall() # 显示读取的全部数据
cursor.close()
conn.close()
df=pd.DataFrame(data)
df.to_csv("./11.csv")
yag = yagmail.SMTP(user="1111",password="111",host="smtp.11.com") #host可以在邮箱设置中看到
contents=['正文部分内容']
yag.send(to='111@xx.com',subject='发送附件',contents=contents,attachments=["附件地址"])

3 、导入PDF生成相关包

import pandas as pd
import numpy as np
import calendar
import logging
from matplotlib import pyplot as plt
from db.db_connection import DBConnection#封装的数据库查询
from mail_utils.send_mail_client import SendMailClient#封装的邮件发送
from dateutil.relativedelta import relativedelta
from datetime import datetime
from datetime import date
from reportlab.lib import colors
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Image, Table, TableStyle,Frame, PageTemplate
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.platypus import PageBreak
from reportlab.lib.units import cm
from reportlab.platypus.flowables import BalancedColumns
#以下代码为调动SQL查询
from sql_test import sql_month_Completion_rate 
from sql_test import sql_month_pay_money
from sql_test import sql_month_security_amount
from sql_test import sql_month_target
from sql_test import sql_completion_jijin_product
from sql_test import sql_old_new_staff_customer
from sql_test import sql_month_visit_data_max_staff
from sql_test import sql_month_visit_record
from sql_test import sql_month_M_visit_acount

4、初始化函数封装

class OfficeAutomationMonth(object): #定义一个类用于存放PDF中的所有内容

    def __init__(self):
        logger.info("start 数据库初始化...")
        self.db_connection = DBConnection()
        self.date_year = (datetime.now()).strftime("%Y")#当前时间年
        self.date_month = (datetime.now()).strftime("%m")#当前时间月
        self.now = (datetime.now()).strftime("%Y-%m-%d")#当前时间
        init_date = datetime.now()
        month_now = self.date_month
        self.current_month_first_day = date(init_date.year, init_date.month, 1)#当前月的第一天
        self.current_month_last_day = date(init_date.year, init_date.month,calendar.monthrange(init_date.year, init_date.month)[1])#当前月的最后一天
        self.quarter_start_day = date(init_date.year,init_date.mon
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是鱼儿啊~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值