Python实现数据库数据自动化导出PDF报告

作者:

文章目录
  • 1、 安装依赖库: pip install pymysql reportlab 2、 字体文件准备: 从Windows系统字体目录(C:WindowsFontsSimHei.ttf)复制到程序目录 或替换为其他中文字体(如思源黑体),注意修改注册字体名称 3、 数据库配置: 确保employees表存在,包含name和salary字段 根据实际环境修改数据库连接参数(主机、用户名、密码等)
  • 以上就是Python实现数据库数据自动化导出PDF报告的详细内容,更多关于Python数据库数据导出为PDF的资料请关注风君子博客其它相关文章! 您可能感兴趣的文章: 通过Python编程将CSV文件导出为PDF文件的方法 Python利用pdfplumber提取PDF文档中的表格数据并导出 Python实现将Excel内容批量导出为PDF文件 基于Python实现数据库表结构导出工具 Python实现将MySQL数据库查询结果导出到Excel 利用Python批量导出mysql数据库表结构的操作实例 Python实现将数据库一键导出为Excel表格的实例
  • 目录
    • 技术栈与核心功能
      • 主要技术组件
      • 功能亮点
    • 核心代码解析
      • 1. 数据库连接与数据获取
      • 2. 数据提取与表结构校验
      • 3. 个性化PDF生成
    • 运行前准备
      • 运行后的效果

        本文将介绍如何使用Python构建一个自动化工具,实现从MySQL数据库提取员工数据,并为每位员工生成包含定制化表格的PDF报告。通过该方案,可显著提升数据导出效率,避免手动操作误差,同时支持灵活的格式定制。

        需求:从MySQL数据库提取员工数据,并为每位员工生成包含定制化表格的PDF报告。

        最终想要的结果:

        数据库连接:使用pymysql实现Python与MySQL的交互,支持字符集配置和字典游标(便于数据处理)。

        PDF生成:基于reportlab库构建PDF文档,支持表格样式定制、中文字体渲染和动态内容生成。

        异常处理:通过try-except结构和traceback模块捕获运行时错误,提供详细日志便于调试。

        文件管理:自动创建输出目录,使用时间戳确保文件名唯一,避免文件覆盖。

        自动检测数据库表结构,支持动态字段提取

        为每位员工生成独立PDF,包含姓名、薪资等关键信息

        定制化表格样式(背景色、字体、边框等)

        完整的中文字体支持(通过注册系统字体实现)

        import pymysql
        
        def connect_to_database():
            try:
                connection = pymysql.connect(
                    host='127.0.0.1',
                    user='root',
                    password='root',
                    database='250515sj',
                    charset='utf8mb4',
                    cursorclass=pymysql.cursors.DictCursor
                )
                print("数据库连接成功!")
                return connection
            except Exception as e:
                # 详细异常日志记录
                print(f"数据库连接错误: {str(e)}")
                print("详细错误信息:n", traceback.format_exc())
                return None
        

        关键配置:使用DictCursor直接返回字典格式数据,便于后续处理;charset='utf8mb4'确保支持 emoji 等特殊字符。

        健壮性设计:通过异常捕获避免程序因数据库连接失败崩溃,并提供堆栈跟踪信息。

        数据表内容:

        def get_employees_data(connection):
            try:
                with connection.cursor() as cursor:
                    # 表存在性校验
                    cursor.execute("SHOW TABLES LIKE 'employees'")
                    if not cursor.fetchone():
                        print("错误:employees表不存在!")
                        return None, None
                        
                    # 提取表结构与数据
                    cursor.execute("SHOW COLUMNS FROM employees")
                    columns = [col['Field'] for col in cursor.fetchall()]
                    cursor.execute("SELECT * FROM employees")
                    data = cursor.fetchall()
                    
                    print(f"表结构: {columns}, 获取到 {len(data)} 条记录")
                    return columns, data
            except Exception as e:
                # 数据操作异常处理
                print(f"获取数据错误: {str(e)}", traceback.format_exc())
                return None, None
        

        预处理逻辑:先校验表是否存在,避免后续操作抛出未知错误。

        数据格式:返回字段列表和字典数组,便于与PDF生成模块对接。

        def create_pdf_for_employee(employee_data, columns):
            try:
                # 目录创建
                output_dir = "employee_pdfs"
                os.makedirs(output_dir, exist_ok=True)
                
                # 字段筛选与中文表头映射
                export_data = [employee_data[col] for col in ['name', 'salary']]
                filename = f"{employee_data['name']}_{datetime.now().strftime('%Y%m%d_%H%M%S')}.pdf"
                path = os.path.join(output_dir, filename)
                
                # PDF文档初始化
                doc = SimpleDocTemplate(path, pagesize=letter)
                styles = getSampleStyleSheet()
                
                # 中文字体注册(关键步骤)
                pdfmetrics.registerFont(TTFont('SimHei', 'SimHei.ttf'))
                title_style = ParagraphStyle(
                    'CustomTitle',
                    parent=styles['Heading1'],
                    fontName='SimHei',
                    fontSize=24,
                    spaceAfter=30
                )
                
                # 表格数据与样式
                table_data = [['姓名', '薪资'], export_data]
                table = Table(table_data)
                table.setStyle(TableStyle([
                    ('BACKGROUND', (0,0), (-1,0), colors.grey),    # 表头背景色
                    ('TEXTCOLOR', (0,0), (-1,0), colors.whitesmoke), # 表头文字颜色
                    ('ALIGN', (0,0), (-1,-1), 'CENTER'),            # 全局居中对齐
                    ('FONTNAME', (0,0), (-1,-1), 'SimHei'),          # 中文字体应用
                    ('GRID', (0,0), (-1,-1), 1, colors.black)        # 边框设置
                ]))
                
                # 文档元素组装
                elements = [
                    Paragraph(f"{employee_data['name']}的个人信息", title_style),
                    Spacer(1, 20),
                    table
                ]
                doc.build(elements)
                return path
            except Exception as e:
                print(f"生成PDF错误: {str(e)}", traceback.format_exc())
                return None
        

        中文字体解决方案:通过TTFont注册本地字体文件(需将SimHei.ttf放在程序目录或指定路径),解决中文乱码问题。

        样式定制技巧

        • 分层设置背景色(表头灰色,内容米色)
        • 不同层级字体大小(表头14pt,内容12pt)
        • 全局居中对齐与边框线增强可读性

        文件名策略:使用姓名+时间戳组合,确保唯一性并便于文件管理。

        1、 安装依赖库:

        pip install pymysql reportlab
        

        2、 字体文件准备:

        • 从Windows系统字体目录(C:WindowsFontsSimHei.ttf)复制到程序目录
        • 或替换为其他中文字体(如思源黑体),注意修改注册字体名称

        3、 数据库配置:

        • 确保employees表存在,包含namesalary字段
        • 根据实际环境修改数据库连接参数(主机、用户名、密码等)

        以上就是Python实现数据库数据自动化导出PDF报告的详细内容,更多关于Python数据库数据导出为PDF的资料请关注风君子博客其它相关文章!

        您可能感兴趣的文章:

        • 通过Python编程将CSV文件导出为PDF文件的方法
        • Python利用pdfplumber提取PDF文档中的表格数据并导出
        • Python实现将Excel内容批量导出为PDF文件
        • 基于Python实现数据库表结构导出工具
        • Python实现将MySQL数据库查询结果导出到Excel
        • 利用Python批量导出mysql数据库表结构的操作实例
        • Python实现将数据库一键导出为Excel表格的实例

        站内搜索