mcpskills.net
SkillsMCPsAgentsPrompts
mcpskills.net — A curated directory of AI agent Skills and MCP servers
TermsPrivacy
← Back to Skills
Productivity

PDF Processing

Create, read, and manipulate PDF documents programmatically. Use when users need to generate, extract, or convert PDF files.

by AnthropicRepository →Source →

Create, read, and manipulate PDF documents programmatically.

Setup

Installation

pip install PyPDF2 reportlab

Basic Usage

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 Reading

Extract Text

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

Extract Metadata

from PyPDF2 import PdfReader

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

PDF Creation

Using 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()

Using Template

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 Manipulation

Merge PDFs

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()

Split 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')

Rotate Pages

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 Forms

Read Form Fields

from PyPDF2 import PdfReader

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

Fill Form 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)

Best Practices

  • Handle encoding issues with extract_text()
  • Use appropriate PDF library for task
  • Test with different PDF versions
  • Handle password-protected PDFs
  • Validate input files
  • Consider memory usage for large PDFs
  • Provide clear error messages