mcpskills.net
技能MCP智能体提示词
mcpskills.net — A curated directory of AI agent Skills and MCP servers
TermsPrivacy
← 返回技能
Productivity

PDF 处理

以编程方式创建、读取和操作 PDF 文档。当用户需要生成、提取或转换 PDF 文件时使用。

作者:Anthropic仓库 →来源 →

以编程方式创建、读取和操作 PDF 文档。

环境准备

安装

pip install PyPDF2 reportlab

基本用法

from PyPDF2 import PdfReader, PdfWriter

# Read PDF
reader = PdfReader('input.pdf')
for page in reader.pages:
    text = page.extract_text()
    print(text)

# Write PDF
writer = PdfWriter()
# Add pages...
writer.write('output.pdf')

读取 PDF

提取文本

from PyPDF2 import PdfReader

def extract_text(pdf_path):
    reader = PdfReader(pdf_path)
    text = ''
    for page in reader.pages:
        text += page.extract_text()
    return text

提取元数据

from PyPDF2 import PdfReader

def get_metadata(pdf_path):
    reader = PdfReader(pdf_path)
    return reader.metadata

创建 PDF

使用 ReportLab

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

def create_pdf(output_path, content):
    c = canvas.Canvas(output_path, pagesize=letter)
    width, height = letter
    
    # Add content
    c.drawString(72, height - 72, content['title'])
    c.drawString(72, height - 100, content['body'])
    
    c.save()

使用模板

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

def create_report(data):
    c = canvas.Canvas('report.pdf', pagesize=letter)
    width, height = letter
    
    # Header
    c.setFont('Helvetica-Bold', 24)
    c.drawString(72, height - 72, data['title'])
    
    # Body
    c.setFont('Helvetica', 12)
    y = height - 120
    for line in data['content']:
        c.drawString(72, y, line)
        y -= 20
    
    c.save()

操作 PDF

合并 PDF

from PyPDF2 import PdfMerger

def merge_pdfs(pdf_list, output_path):
    merger = PdfMerger()
    for pdf in pdf_list:
        merger.append(pdf)
    merger.write(output_path)
    merger.close()

拆分 PDF

from PyPDF2 import PdfReader, PdfWriter

def split_pdf(pdf_path, page_ranges):
    reader = PdfReader(pdf_path)
    
    for i, (start, end) in enumerate(page_ranges):
        writer = PdfWriter()
        for page_num in range(start, end + 1):
            writer.add_page(reader.pages[page_num])
        writer.write(f'output_{i}.pdf')

旋转页面

from PyPDF2 import PdfReader, PdfWriter

def rotate_pdf(pdf_path, rotation, output_path):
    reader = PdfReader(pdf_path)
    writer = PdfWriter()
    
    for page in reader.pages:
        page.rotate(rotation)
        writer.add_page(page)
    
    writer.write(output_path)

PDF 表单

读取表单字段

from PyPDF2 import PdfReader

def get_form_fields(pdf_path):
    reader = PdfReader(pdf_path)
    return reader.get_form_text_fields()

填写表单字段

from PyPDF2 import PdfReader, PdfWriter

def fill_form(pdf_path, fields, output_path):
    reader = PdfReader(pdf_path)
    writer = PdfWriter()
    
    writer.append(reader)
    writer.update_page_form_field_values(writer.pages[0], fields)
    
    writer.write(output_path)

最佳实践

  • 使用 extract_text() 时处理编码问题
  • 为任务选择合适的 PDF 库
  • 在不同 PDF 版本中测试
  • 处理受密码保护的 PDF
  • 验证输入文件
  • 考虑大型 PDF 的内存占用
  • 提供清晰的错误信息