pdf · shareai-lab — Claude Code skill: read, create and merge PDF files
This skill hands your agent ready recipes for pulling text out of PDFs, building documents from Markdown, and merging files. Useful whenever a PDF shows up in the task.
npx skills add shareAI-lab/learn-claude-code --skill pdf -a claude-codeWhat pdf does
The skill covers five operations: reading, creating, merging, splitting into pages, and reading metadata. Text extraction goes through pdftotext from poppler-utils, with a PyMuPDF fallback in python3 when that binary is missing. Creation has three routes: pandoc from Markdown, ReportLab from code, and wkhtmltopdf or pdfkit from HTML.
Merging and splitting run on PyMuPDF. You open each source document, insert it into a fresh one, and save. Page-by-page processing is there for large files so memory does not blow up. Encoding gets a mention too, since PDFs carry different character sets and an empty extraction result does not always mean the page is blank.
Check that the tools exist before you lean on them: pdftotext comes from poppler, while PyMuPDF, ReportLab and pdfkit install through pip. For scanned documents the skill points at pytesseract when plain extraction returns nothing. That is worth deciding up front, because a text PDF and a scan need different dependencies.
What it helps with
- pull text out of a PDF from the terminal
- build a PDF from a Markdown file
- merge several PDFs into one document
- split a PDF into single pages
- inspect page count and metadata
Example prompts for the agent
- Extract the text from
report.pdfand print all of it - Build
output.pdffromnotes.mdwith pandoc - Merge
file1.pdf,file2.pdfandfile3.pdfintomerged.pdf
How to install pdf
1Skills CLI (Vercel)
npx skills add shareAI-lab/learn-claude-code --skill pdf -a claude-code2Manually: put the files in place
~/.claude/skills/pdf/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/pdf/
1Skills CLI (Vercel)
npx skills add shareAI-lab/learn-claude-code --skill pdf -a codex2Manually: put the files in place
.agents/skills/pdf/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add shareAI-lab/learn-claude-code --skill pdf -a cursor2Manually: put the files in place
.cursor/skills/pdf/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install shareAI-lab/learn-claude-code pdf2Manually: put the files in place
.github/skills/pdf/SKILL.md1Skills CLI (Vercel)
npx skills add shareAI-lab/learn-claude-code --skill pdf -a gemini-cli2Platform CLI
gemini skills install https://github.com/shareAI-lab/learn-claude-code --path skills/pdfManually: put the files in place
.devin/skills/pdf/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add shareAI-lab/learn-claude-code --skill pdf -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about pdf
How do I install the pdf skill in Claude?
Run npx skills add shareAI-lab/learn-claude-code --skill pdf -a claude-code. The skill lands at ~/.claude/skills/pdf/SKILL.md.
What does the pdf skill do?
It gives the agent working recipes for PDFs: extracting text, creating documents from Markdown, HTML or code, merging files and splitting them by page.
What do I need installed for it to work?
The skill tells you to verify your tools first. Text extraction uses pdftotext from poppler or PyMuPDF, creation uses ReportLab, pdfkit with wkhtmltopdf, or pandoc, and scans call for pytesseract.
Source text
SKILL.md · MIT
---
name: pdf
description: Process PDF files - extract text, create PDFs, merge documents. Use when user asks to read PDF, create PDF, or work with PDF files.
---
# PDF Processing Skill
You now have expertise in PDF manipulation. Follow these workflows:
## Reading PDFs
**Option 1: Quick text extraction (preferred)**
```bash
# Using pdftotext (poppler-utils)
pdftotext input.pdf - # Output to stdout
pdftotext input.pdf output.txt # Output to file
# If pdftotext not available, try:
python3 -c "
import fitz # PyMuPDF
doc = fitz.open('input.pdf')
for page in doc:
print(page.get_text())
"
```
**Option 2: Page-by-page with metadata**
```python
import fitz # pip install pymupdf
doc = fitz.open("input.pdf")
print(f"Pages: {len(doc)}")
print(f"Metadata: {doc.metadata}")
for i, page in enumerate(doc):
text = page.get_text()
print(f"--- Page {i+1} ---")
print(text)
```
## Creating PDFs
**Option 1: From Markdown (recommended)**
```bash
# Using pandoc
pandoc input.md -o output.pdf
# With custom styling
pandoc input.md -o output.pdf --pdf-engine=xelatex -V geometry:margin=1in
```
**Option 2: Programmatically**
```python
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
c = canvas.Canvas("output.pdf", pagesize=letter)
c.drawString(100, 750, "Hello, PDF!")
c.save()
```
**Option 3: From HTML**
```bash
# Using wkhtmltopdf
wkhtmltopdf input.html output.pdf
# Or with Python
python3 -c "
import pdfkit
pdfkit.from_file('input.html', 'output.pdf')
"
```
## Merging PDFs
```python
import fitz
result = fitz.open()
for pdf_path in ["file1.pdf", "file2.pdf", "file3.pdf"]:
doc = fitz.open(pdf_path)
result.insert_pdf(doc)
result.save("merged.pdf")
```
## Splitting PDFs
```python
import fitz
doc = fitz.open("input.pdf")
for i in range(len(doc)):
single = fitz.open()
single.insert_pdf(doc, from_page=i, to_page=i)
single.save(f"page_{i+1}.pdf")
```
## Key Libraries
| Task | Library | Install |
|------|---------|---------|
| Read/Write/Merge | PyMuPDF | `pip install pymupdf` |
| Create from scratch | ReportLab | `pip install reportlab` |
| HTML to PDF | pdfkit | `pip install pdfkit` + wkhtmltopdf |
| Text extraction | pdftotext | `brew install poppler` / `apt install poppler-utils` |
## Best Practices
1. **Always check if tools are installed** before using them
2. **Handle encoding issues** - PDFs may contain various character encodings
3. **Large PDFs**: Process page by page to avoid memory issues
4. **OCR for scanned PDFs**: Use `pytesseract` if text extraction returns empty
© shareAI-lab · MIT · shareAI-lab/learn-claude-code
Similar skills
Everything for Office documents →pdf by other authors comes first.