Python办公秘籍:PDF自动化处理技巧实战
Python 办公技巧:PDF 自动化处理
本文将介绍如何使用 Python 实现 PDF 文件的自动化处理,涵盖了解析、合并、拆分、表单处理、文档转换、添加水印与签章、报表生成以及 OCR 文字识别等七项技能。通过这些技巧,用户可以大幅提升办公效率,轻松应对各种 PDF 文件操作需求。
1. 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 合并和拆分
from PyPDF2 import PdfMerger, PdfReader, PdfWriter
merger = PdfMerger()
merger.append('example.pdf')
merger.append('file2.pdf')
merger.write('merged.pdf')
merger.close()
3. PDF 表单处理
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 文档转换
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')
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 水印和签章
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 报表生成
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(光学字符识别)
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 都能提供强大的支持。
作者:聪明的墨菲特i