Python 办公技巧:PDF 自动化处理

Python 办公技巧:PDF 自动化处理

本文将介绍如何使用 Python 实现 PDF 文件的自动化处理,涵盖了解析、合并、拆分、表单处理、文档转换、添加水印与签章、报表生成以及 OCR 文字识别等七项技能。通过这些技巧,用户可以大幅提升办公效率,轻松应对各种 PDF 文件操作需求。

1. PDF 解析和文本提取

  • 工具库:PyPDF2、pdfminer、textract

  • 功能:从 PDF 文件中提取文本信息。

  • 代码示例

    python 复制代码
    import PyPDF2
    with open('example.pdf', 'rb') as file:
        reader = PyPDF2.PdfReader(file)
        for page_num in range(len(reader.pages)):
            text = reader.pages[page_num].extract_text()
            print(text)

2. PDF 合并和拆分

  • 工具库:PyPDF2、pdfrw

  • 功能:将多个 PDF 文件合并为一个文件,或将一个 PDF 文件拆分为多个文件。

  • 代码示例

    python 复制代码
    from PyPDF2 import PdfMerger, PdfReader, PdfWriter
    merger = PdfMerger()
    merger.append('example.pdf')
    merger.append('file2.pdf')
    merger.write('merged.pdf')
    merger.close()

3. PDF 表单处理

  • 工具库:PyPDF2、pdfrw、FPDF

  • 功能:自动填充表单字段、读取已填写数据或生成新表单。

  • 代码示例

    python 复制代码
    from PyPDF2 import PdfReader, PdfWriter
    from reportlab.pdfgen import canvas
    def fill_form(input_file, output_file, data):
        c = canvas.Canvas(output_file)
        reader = PdfReader(input_file)
        for page_num, page in enumerate(reader.pages, start=1):
            c.setFont("Helvetica", 12)
            page_width = float(page.mediabox.width)
            page_height = float(page.mediabox.height)
            c.setPageSize((page_width, page_height))
            c.showPage()
            if '/Annots' in page:
                for annot in page['/Annots']:
                    if '/T' in annot and '/V' in annot and annot['/Type'] == '/Annot':
                        field_name = annot['/T'][1:-1]
                        if field_name in data:
                            field_value = data[field_name]
                            c.drawString(annot['/Rect'][0], annot['/Rect'][1], field_value)
        c.save()

4. PDF 文档转换

  • 工具库:pdf2image、pdfminer、PyPDF2、python-docx
  • 功能:将 PDF 转换为图像、HTML、纯文本或 Word 文档。
  • 代码示例
    • PDF 转图像

      python 复制代码
      from pdf2image import convert_from_path
      def pdf_to_image(input_file, output_file):
          images = convert_from_path(input_file)
          for i, image in enumerate(images):
              image.save(f'{output_file}_{i}.jpg', 'JPEG')
    • PDF 转 HTML

      python 复制代码
      from PyPDF2 import PdfReader
      def pdf_to_html(input_file, output_file):
          with open(input_file, 'rb') as file:
              reader = PdfReader(file)
              text = ""
              for page in reader.pages:
                  text += page.extract_text()
              with open(output_file, 'w') as html_file:
                  html_file.write(f"<html><body>{text}</body></html>")

5. PDF 水印和签章

  • 工具库:PyPDF2、reportlab

  • 功能:为 PDF 文件添加水印或数字签章。

  • 代码示例

    python 复制代码
    from PyPDF2 import PdfReader, PdfWriter
    from reportlab.pdfgen import canvas
    import io
    def add_watermark(input_file, output_file, watermark_text):
        reader = PdfReader(input_file)
        writer = PdfWriter()
        watermark_buffer = io.BytesIO()
        c = canvas.Canvas(watermark_buffer)
        c.setFont("Helvetica", 48)
        c.rotate(45)
        c.translate(-500, -500)
        c.setFillAlpha(0.3)
        c.drawString(400, 400, watermark_text)
        c.save()
        watermark_buffer.seek(0)
        watermark_pdf = PdfReader(watermark_buffer)
        for i, page in enumerate(reader.pages, start=1):
            watermark_page = watermark_pdf.pages[0]
            page.merge_page(watermark_page)
            writer.add_page(page)
        with open(output_file, 'wb') as file:
            writer.write(file)

6. PDF 报表生成

  • 工具库:matplotlib、reportlab

  • 功能:生成包含图表、表格和文本的 PDF 报表。

  • 代码示例

    python 复制代码
    import matplotlib.pyplot as plt
    from reportlab.lib.pagesizes import A4
    from reportlab.platypus import SimpleDocTemplate, Table, Image
    from reportlab.lib.styles import getSampleStyleSheet
    from reportlab.platypus import Paragraph, Spacer
    def create_report(output_file, data):
        doc = SimpleDocTemplate(output_file, pagesize=A4)
        styles = getSampleStyleSheet()
        elements = []
        title = Paragraph("销售报表", styles["Title"])
        elements.append(title)
        elements.append(Spacer(1, 20))
        table_data = data
        table = Table(table_data)
        elements.append(table)
        elements.append(Spacer(1, 20))
        plt.plot(data[1][1:], marker='o')
        plt.xlabel("日期")
        plt.ylabel("销售额")
        plt.title("销售趋势图")
        plt.savefig("sales_plot.png")
        plt.close()
        image = Image("sales_plot.png", width=400, height=300)
        elements.append(image)
        doc.build(elements)

7. OCR(光学字符识别)

  • 工具库:pdf2image、pytesseract

  • 功能:将扫描的 PDF 文档转换为可搜索和可编辑的文本。

  • 代码示例

    python 复制代码
    import pdf2image
    import pytesseract
    def pdf_to_image(input_file):
        images = pdf2image.convert_from_path(input_file)
        return images
    def image_to_text(image):
        text = pytesseract.image_to_string(image)
        return text
    def save_text_to_file(text, output_file):
        with open(output_file, 'w', encoding='utf-8') as file:
            file.write(text)
    def extract_text_from_pdf(input_file, output_file):
        images = pdf_to_image(input_file)
        extracted_text = ""
        for image in images:
            text = image_to_text(image)
            extracted_text += text + "\n"
        save_text_to_file(extracted_text, output_file)

总结

通过掌握 Python PDF 自动化处理的七项技能,用户可以大幅提升办公效率,轻松应对各种 PDF 文件操作需求。无论是解析文本、合并拆分文件、处理表单、转换格式、添加水印与签章、生成报表,还是进行 OCR 文字识别,Python 都能提供强大的支持。

相关推荐
蹦蹦跳跳真可爱5892 小时前
Python----OpenCV(图像増强——高通滤波(索贝尔算子、沙尔算子、拉普拉斯算子),图像浮雕与特效处理)
人工智能·python·opencv·计算机视觉
nananaij2 小时前
【Python进阶篇 面向对象程序设计(3) 继承】
开发语言·python·神经网络·pycharm
雷羿 LexChien2 小时前
从 Prompt 管理到人格稳定:探索 Cursor AI 编辑器如何赋能 Prompt 工程与人格风格设计(上)
人工智能·python·llm·编辑器·prompt
heart000_12 小时前
128K 长文本处理实战:腾讯混元 + 云函数 SCF 构建 PDF 摘要生成器
人工智能·自然语言处理·pdf
敲键盘的小夜猫3 小时前
LLM复杂记忆存储-多会话隔离案例实战
人工智能·python·langchain
开开心心_Every3 小时前
便捷的Office批量转PDF工具
开发语言·人工智能·r语言·pdf·c#·音视频·symfony
高压锅_12203 小时前
Django Channels WebSocket实时通信实战:从聊天功能到消息推送
python·websocket·django
胖达不服输4 小时前
「日拱一码」020 机器学习——数据处理
人工智能·python·机器学习·数据处理
吴佳浩4 小时前
Python入门指南-番外-LLM-Fingerprint(大语言模型指纹):从技术视角看AI开源生态的边界与挑战
python·llm·mcp
吴佳浩5 小时前
Python入门指南-AI模型相似性检测方法:技术原理与实现
人工智能·python·llm