Python 办公技巧:PDF 自动化处理
本文将介绍如何使用 Python 实现 PDF 文件的自动化处理,涵盖了解析、合并、拆分、表单处理、文档转换、添加水印与签章、报表生成以及 OCR 文字识别等七项技能。通过这些技巧,用户可以大幅提升办公效率,轻松应对各种 PDF 文件操作需求。
1. PDF 解析和文本提取
- 工具库:PyPDF2、pdfminer、textract
- 功能:从 PDF 文件中提取文本信息。
- 代码示例:
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 文件拆分为多个文件。
- 代码示例:
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
- 功能:自动填充表单字段、读取已填写数据或生成新表单。
- 代码示例:
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 转图像:
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:
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>")
- PDF 转图像:
5. PDF 水印和签章
- 工具库:PyPDF2、reportlab
- 功能:为 PDF 文件添加水印或数字签章。
- 代码示例:
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 报表。
- 代码示例:
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 文档转换为可搜索和可编辑的文本。
- 代码示例:
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 都能提供强大的支持。