local-link/skills/pdf-poppler/SKILL.md
使用 Poppler 命令行工具处理 PDF:pdftotext 转文本、pdftoppm 转图片、pdfimages 提取图片、pdfinfo 查看元数据、pdftohtml 转 HTML、pdfseparate/pdfunite 拆分合并。用于 PDF 内容提取、格式转换、批量处理等任务。触发词:'提取 PDF 文本'、'PDF 转图片'、'提取 PDF 中的图片'、'查看 PDF 信息'、'拆分 PDF'。
npx skillsauth add lionad-morotar/simple-local-llm-server pdf-popplerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Poppler 是开源 PDF 渲染库,提供强大的命令行工具集。
完整参考: references/complete-reference.md - 所有工具的详细选项
# macOS
brew install poppler
# Ubuntu/Debian
sudo apt-get install poppler-utils
# Fedora
sudo dnf install poppler-utils
| 工具 | 用途 | 最常用示例 |
|------|------|-----------|
| pdftotext | PDF → 文本 | pdftotext -layout input.pdf output.txt |
| pdftoppm | PDF → 图片 | pdftoppm -png -r 300 input.pdf page |
| pdfimages | 提取图片 | pdfimages -png input.pdf image |
| pdfinfo | 文档信息 | pdfinfo input.pdf |
| pdftohtml | PDF → HTML | pdftohtml -s input.pdf output.html |
| pdfseparate | 拆分页面 | pdfseparate input.pdf page-%d.pdf |
| pdfunite | 合并文件 | pdfunite *.pdf output.pdf |
# 基础转换
pdftotext input.pdf output.txt
# 保留布局(适合表格、多栏)
pdftotext -layout input.pdf output.txt
# 指定页码
pdftotext -f 3 -l 5 input.pdf output.txt # 第 3-5 页
# 指定编码(解决中文乱码)
pdftotext -enc UTF-8 input.pdf output.txt
# 输出到 stdout
pdftotext input.pdf -
# 生成带位置信息的 TSV
pdftotext -tsv input.pdf output.tsv
| 选项 | 说明 |
|------|------|
| -f N | 起始页 |
| -l N | 结束页 |
| -layout | 保留物理布局 |
| -enc UTF-8 | 设置编码 |
| -tsv | 输出 TSV(含边界框) |
| -htmlmeta | 生成 HTML |
# PDF 转 PNG(默认 150 DPI)
pdftoppm -png input.pdf page
# 高质量 300 DPI
pdftoppm -png -r 300 input.pdf page
# 仅转换第 2-5 页
pdftoppm -png -f 2 -l 5 input.pdf page
# 仅奇数页
pdftoppm -png -o input.pdf page
# 高质量 JPEG,质量 95%
pdftoppm -jpeg -jpegopt "quality=95" input.pdf page
# 生成缩略图(宽度 200px)
pdftoppm -png -scale-to 200 input.pdf thumb
| 选项 | 说明 |
|------|------|
| -png | PNG 格式 |
| -jpeg | JPEG 格式 |
| -r N | DPI 分辨率 |
| -f/-l N | 起止页 |
| -o/-e | 仅奇/偶页 |
| -scale-to N | 缩放长边到 N 像素 |
| -jpegopt "quality=N" | JPEG 质量 0-100 |
# 提取为 PNG
pdfimages -png input.pdf image_prefix
# 保持 JPEG 原格式,其他转 PNG
pdfimages -j -png input.pdf image_prefix
# 仅提取第 3-5 页
pdfimages -f 3 -l 5 -png input.pdf image_prefix
# 仅列出图片信息
pdfimages -list input.pdf
| 选项 | 说明 |
|------|------|
| -png | PNG 格式 |
| -j | JPEG 保持原格式 |
| -all | 所有图片按原生格式 |
| -list | 仅列出信息 |
| -p | 文件名包含页码 |
# 查看完整信息
pdfinfo document.pdf
# 仅查看页数
pdfinfo document.pdf | grep Pages
# ISO 8601 日期格式
pdfinfo -isodates document.pdf
# 基础转换
pdftohtml input.pdf output.html
# 单页 HTML(无框架)
pdftohtml -s -noframes input.pdf output.html
# XML 格式
pdftohtml -xml input.pdf output.xml
# 忽略图片
pdftohtml -i input.pdf output.html
# 拆分每页为单独文件
pdfseparate input.pdf page-%d.pdf
# 生成: page-1.pdf, page-2.pdf...
# 拆分特定位数编号
pdfseparate input.pdf page-%03d.pdf
# 生成: page-001.pdf, page-002.pdf...
# 合并多个 PDF
pdfunite file1.pdf file2.pdf file3.pdf output.pdf
# 合并所有 PDF
pdfunite *.pdf combined.pdf
# 批量提取文本
for pdf in *.pdf; do
pdftotext -layout "$pdf" "${pdf%.pdf}.txt"
done
# 批量获取标题
for pdf in *.pdf; do
echo -n "$pdf: "
pdfinfo "$pdf" | grep "Title:" | cut -d: -f2-
done
# 批量转图片(每个 PDF 一个目录)
for pdf in *.pdf; do
mkdir -p "${pdf%.pdf}_images"
pdftoppm -png "$pdf" "${pdf%.pdf}_images/page"
done
| 问题 | 解决方案 |
|------|---------|
| 中文乱码 | pdftotext -enc UTF-8 ... |
| 扫描版 PDF 无文本 | 先用 pdftoppm 转图片,再 OCR |
| 加密 PDF | 使用 -upw password 或 -opw password |
| 命令未找到 (macOS) | export PATH="/opt/homebrew/opt/poppler/bin:$PATH" |
tools
理解用户意图;listen 模式通过 grill-me 深挖任务并归档经验
development
给 VSCode(Insiders/Stable) 内置 ripgrep 加 5s 超时包装,防止搜索卡死吃满 CPU。--on 包装(幂等) / --off 还原 / 不带参数查状态。Use when VSCode 搜索卡死、rg 进程占满 CPU,或 VSCode 更新后超时保护失效需要重包。
development
为指定项目创建完全隔离的 hapi(Claude Code On the Go)实例,包括独立数据目录、LaunchAgent 持久化、zsh wrapper 和 app.hapi.run 直连 URL。与全局 ~/.hapi 互不干扰。
development
关闭承载当前 Claude Code 会话的宿主(VSCode 窗口或其终端面板),连同 claude 一起退出。通过 close-host-window 扩展触发:先 SIGTERM claude(走完 SessionEnd hooks)再关 host,不抢焦点、不丢 hooks。--host vscode 关窗口、--host terminal(默认)只关终端面板。Use when 任务结束要随宿主退出,或需精确关闭某 claude 终端所在窗口/面板。