目录
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