关于 pdf
面向 PDF 文档处理的技能指南,涵盖读取、创建、合并与拆分,并介绍命令行和 Python 方法,也说明扫描件及大型文件的处理方式。
主要功能
- 01提取文本与元数据
- 02从 Markdown、代码或 HTML 创建 PDF
- 03合并与拆分文档
- 04扫描件及大型 PDF 处理建议
适用场景
- 01提取 PDF 文本以便后续处理
- 02将 Markdown 或 HTML 转为 PDF
- 03合并文档或拆分 PDF 页面
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ shareai-lab/ learn-claude-code --skill pdf安装后在 Claude Code 中输入/pdf确认已加载。
详细介绍
PDF 处理技能
现在,你已掌握 PDF 操作。请遵循以下工作流:
读取 PDF
选项 1:快速提取文本(首选)
# 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())
"
选项 2:逐页读取并获取元数据
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)
创建 PDF
选项 1:从 Markdown 创建(推荐)
# Using pandoc
pandoc input.md -o output.pdf
# With custom styling
pandoc input.md -o output.pdf --pdf-engine=xelatex -V geometry:margin=1in
选项 2:通过编程方式创建
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()
选项 3:从 HTML 创建
# Using wkhtmltopdf
wkhtmltopdf input.html output.pdf
# Or with Python
python3 -c "
import pdfkit
pdfkit.from_file('input.html', 'output.pdf')
"
合并 PDF
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")
拆分 PDF
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")
主要库
| 任务 | 库 | 安装 |
|---|---|---|
| 读取/写入/合并 | PyMuPDF | pip install pymupdf |
| 从头创建 | ReportLab | pip install reportlab |
| HTML 转 PDF | pdfkit | pip install pdfkit + wkhtmltopdf |
| 文本提取 | pdftotext | brew install poppler / apt install poppler-utils |
最佳实践
- 使用前务必检查工具是否已安装
- 处理编码问题——PDF 可能包含各种字符编码
- 大型 PDF:逐页处理以避免内存问题
- 扫描版 PDF 的 OCR:如果文本提取结果为空,请使用
pytesseract
评论
支持 Markdown