Productivity
PDF Processing
Create, read, and manipulate PDF documents programmatically. Use when users need to generate, extract, or convert PDF files.
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