当前位置:首页 > Python > 正文

如何使用Python生成PDF?- Python PDF生成详细教程

如何使用Python生成PDF?完整教程与代码示例

本文将详细介绍使用Python生成PDF文件的多种方法,包含实际代码示例,帮助开发者快速掌握PDF生成技术。

一、Python生成PDF的常用库

1. ReportLab - 功能最全面的PDF生成库
2. FPDF - 简单轻量的PDF生成工具
3. PyPDF2 - PDF文件操作与合并
4. WeasyPrint - HTML转PDF工具

二、使用ReportLab生成PDF

安装ReportLab

pip install reportlab

基础PDF生成示例

from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas

def create_pdf():
    filename = "reportlab_example.pdf"
    c = canvas.Canvas(filename, pagesize=letter)
    
    # 设置字体和大小
    c.setFont("Helvetica", 12)
    
    # 添加文本
    c.drawString(100, 700, "Python生成的PDF文档")
    c.drawString(100, 680, "使用ReportLab库创建")
    
    # 添加图形
    c.rect(50, 650, 500, 1, fill=1)
    
    # 添加图片
    c.drawImage("logo.png", 100, 600, width=100, height=50)
    
    # 保存PDF
    c.save()
    print(f"PDF已生成: {filename}")

create_pdf()

三、使用FPDF生成PDF

安装FPDF

pip install fpdf

创建简单PDF文档

from fpdf import FPDF

def generate_pdf():
    pdf = FPDF()
    pdf.add_page()
    
    # 添加字体(支持中文)
    pdf.add_font('SimSun', '', 'simsun.ttc', uni=True)
    pdf.set_font('SimSun', size=12)
    
    # 添加单元格
    pdf.cell(200, 10, txt="Python FPDF教程", ln=True, align='C')
    
    # 添加多行文本
    pdf.multi_cell(0, 10, "这是一个使用FPDF库生成的PDF文档示例。" + 
                   "支持自动换行和基本格式设置。")
    
    # 保存文件
    pdf.output("fpdf_example.pdf")
    print("PDF文件生成成功")

generate_pdf()

四、使用PyPDF2操作PDF

合并PDF文件示例

from PyPDF2 import PdfMerger

def merge_pdfs():
    merger = PdfMerger()
    
    # 添加要合并的文件
    merger.append("file1.pdf")
    merger.append("file2.pdf")
    merger.append("file3.pdf")
    
    # 输出合并结果
    merger.write("merged_document.pdf")
    merger.close()
    print("PDF合并完成")

merge_pdfs()

五、最佳实践与常见问题

  • 中文显示问题:使用支持中文的字体文件(.ttc/.ttf)
  • 复杂布局:推荐使用ReportLab的Platypus框架
  • HTML转PDF:使用WeasyPrint或pdfkit库
  • 性能优化:批量处理时复用canvas对象
  • 加密保护:使用pdf.set_encryption()添加密码

六、完整项目示例:生成数据报告

from reportlab.lib import colors
from reportlab.lib.pagesizes import A4
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle
import pandas as pd

def generate_report():
    # 创建PDF文档
    doc = SimpleDocTemplate("data_report.pdf", pagesize=A4)
    
    # 示例数据
    data = [['产品', '销量', '增长率'],
            ['手机', 1200, '15%'],
            ['笔记本', 800, '22%'],
            ['平板', 450, '8%']]
    
    # 创建表格
    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'),
        ('FONTSIZE', (0,0), (-1,0), 14),
        ('BOTTOMPADDING', (0,0), (-1,0), 12),
        ('BACKGROUND', (0,1), (-1,-1), colors.beige),
        ('GRID', (0,0), (-1,-1), 1, colors.black)
    ]))
    
    # 构建文档
    doc.build([table])
    print("数据报告生成完成")

generate_report()

总结

Python提供了多种生成PDF的解决方案:
1. 需要高级功能选择ReportLab
2. 简单需求使用FPDF
3. PDF操作使用PyPDF2
4. HTML转换使用WeasyPrint
根据具体需求选择合适的工具,可高效生成专业PDF文档。

发表评论