| name | pdf |
| description | Process PDF files - extract text, read content, create PDFs, merge or split documents. Use when user asks to read, create, or manipulate PDF files. |
PDF Processing Skill
You now have expertise in PDF file processing. Follow these instructions based on the task.
Reading PDFs
Using pdftotext (Recommended for text extraction)
apt-get install -y poppler-utils
pdftotext input.pdf output.txt
pdftotext -f 1 -l 5 input.pdf output.txt
pdftotext -layout input.pdf output.txt
Using Python PyMuPDF
import fitz
doc = fitz.open("input.pdf")
for page_num, page in enumerate(doc):
text = page.get_text()
print(f"--- Page {page_num + 1} ---")
print(text)
page = doc[0]
text = page.get_text()
Using pdfplumber (for tables)
import pdfplumber
with pdfplumber.open("input.pdf") as pdf:
for page in pdf.pages:
text = page.extract_text()
print(text)
tables = page.extract_tables()
for table in tables:
for row in table:
print(row)
Creating PDFs
Using Python reportlab
from reportlab.lib.pagesizes import letter, A4
from reportlab.pdfgen import canvas
from reportlab.lib.units import inch
c = canvas.Canvas("output.pdf", pagesize=letter)
c.setFont("Helvetica", 12)
c.drawString(1*inch, 10*inch, "Hello World")
c.save()
Using Pandoc (from Markdown)
apt-get install -y pandoc texlive-xetex
pandoc input.md -o output.pdf
pandoc input.md -o output.pdf --template=template.tex
Using weasyprint (from HTML)
from weasyprint import HTML
html_content = "<h1>Hello World</h1><p>This is a PDF.</p>"
HTML(string=html_content).write_pdf("output.pdf")
HTML("input.html").write_pdf("output.pdf")
Merging PDFs
import fitz
result = fitz.open()
for pdf_file in ["file1.pdf", "file2.pdf", "file3.pdf"]:
doc = fitz.open(pdf_file)
result.insert_pdf(doc)
result.save("merged.pdf")
Splitting PDFs
import fitz
doc = fitz.open("input.pdf")
output = fitz.open()
output.insert_pdf(doc, from_page=0, to_page=4)
output.save("pages_1_to_5.pdf")
for i, page in enumerate(doc):
single_page = fitz.open()
single_page.insert_pdf(doc, from_page=i, to_page=i)
single_page.save(f"page_{i+1}.pdf")
Adding Watermarks
import fitz
doc = fitz.open("input.pdf")
for page in doc:
page.insert_text(
(100, 100),
"CONFIDENTIAL",
fontsize=50,
color=(0.8, 0.8, 0.8),
rotate=45
)
doc.save("watermarked.pdf")
Key Libraries
| Library | Use Case | Install |
|---|
| PyMuPDF (fitz) | Read, write, merge, split | pip install pymupdf |
| pdftotext | CLI text extraction | apt install poppler-utils |
| pdfplumber | Table extraction | pip install pdfplumber |
| reportlab | Create PDFs programmatically | pip install reportlab |
| weasyprint | HTML to PDF | pip install weasyprint |
| pdf2image | PDF to images | pip install pdf2image |
| PyPDF2 | Merge, split, rotate | pip install pypdf2 |
Best Practices
- Always check if required libraries are installed before use
- For large PDFs, process pages in batches to manage memory
- When extracting text, verify encoding (UTF-8 is recommended)
- For table extraction, pdfplumber is more reliable than PyMuPDF
- Close PDF documents after processing to free resources