img2pdf
将图片或 PDF 页面按 N 张/页编排为标准化 A4 PDF,或将长截图渲染为单张自适应高度 PDF。本技能应在用户需要将截图(手机截图、视频截图)、照片、已有 PDF 页面或长截图(微信聊天、庭审笔录)合并为 PDF 时使用。不要用于:OCR 文字识别、PDF 内容编辑、图片格式转换。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
将图片或 PDF 页面按 N 张/页编排为标准化 A4 PDF,或将长截图渲染为单张自适应高度 PDF。本技能应在用户需要将截图(手机截图、视频截图)、照片、已有 PDF 页面或长截图(微信聊天、庭审笔录)合并为 PDF 时使用。不要用于:OCR 文字识别、PDF 内容编辑、图片格式转换。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
将本地开发的 Skills 批量同步到 ClawHub 与腾讯 SkillHub 两个平台。支持智能 .gitignore 过滤、白名单控制、增量同步、单个 skill 同步、双平台分流发布。本技能应在用户需要将本地 skills 发布到 ClawHub/SkillHub、批量同步技能、检查发布状态时使用。
跨平台 Agent 任务协调枢纽。本技能应在多个不同平台的 Agent 需要围绕项目任务源分配任务、标记归属、能力路由和交接上下文时使用。不要用于单一平台内的本地并行执行,或 Git 分支、提交、PR、merge 安全规则。
输入各类视频网站/播客平台链接后,自动下载对应媒体文件并交付给用户。优先使用 yt-dlp 覆盖抖音(Douyin)、B站(Bilibili)、YouTube 等常见视频网站,也可用于可直接暴露音频地址的播客平台(如小宇宙单集链接)。当遇到 403/登录/年龄或地区限制时,支持使用 cookies.txt 重试;对于可能存在 DRM/加密或条款限制的平台(例如部分 Spotify 内容),应提示用户仅下载其有权保存的内容,并在不可下载时建议改用官方离线/导出渠道或提供原始 RSS/直链。抖音视频在 yt-dlp 撞签名墙("Fresh cookies needed")时会自动 fallback 到无登录直连 aweme.snssdk.com/v1/play(仅需 video_id,不需要 cookie/a_bogus 签名);抖音图文笔记暂不支持自动下载,需手动处理。
元典法条与案例检索。本技能应在需要查询中国法律法规条文、检索相关案例、为法律分析提供数据支撑时使用。
PDF 处理工具,支持扫描件预处理、OCR 双层 PDF、页码添加、PDF 合并、解密、水印去除和压缩。本技能应在用户需要一键处理、优化或整理 PDF 文档时使用。不要用于:纯文本 PDF 内容编辑、PDF 阅读与批注、电子签名、非压缩目的的格式转换。
面向中国发明和实用新型专利的结构化初步分析工具。本技能应在用户需要拆解或解释权利要求、比较专利保护范围、进行产品侵权比对、等同分析、稳定性与无效风险分析、FTO、规避设计、专利价值评估或制作专利分析图表时使用。不要用于:代替专利律师或专利代理师出具正式意见、仅下载/OCR专利、撰写专利申请文件,或在未确认法域与有效权利要求时给出确定性结论;外观设计近似判断需另行采用专门方法并人工复核。
| name | img2pdf |
| homepage | https://github.com/cat-xierluo/legal-skills |
| author | 杨卫薪律师(微信ywxlaw) |
| version | 1.2.0 |
| description | 将图片或 PDF 页面按 N 张/页编排为标准化 A4 PDF,或将长截图渲染为单张自适应高度 PDF。本技能应在用户需要将截图(手机截图、视频截图)、照片、已有 PDF 页面或长截图(微信聊天、庭审笔录)合并为 PDF 时使用。不要用于:OCR 文字识别、PDF 内容编辑、图片格式转换。 |
| license | MIT |
本技能解决"大量截图/照片需要编排为紧凑 PDF 提交"以及"超长截图(微信聊天、庭审笔录)需要保留上下逻辑转为 PDF"的问题。核心场景是法律证据材料整理。
核心职责:
本技能不做 OCR、不编辑 PDF 内容、不处理视频文件。若需要从视频提取截图,先使用 video-screenshot。
--normalize-a4 只做页面标准化,不做多图编排。无额外系统依赖。
| 包名 | 用途 | 安装命令 |
|---|---|---|
pypdf>=4.0.0 | PDF 页面变换与合并 | python3 -m pip install -r scripts/requirements.txt |
Pillow>=10.0.0 | 图片格式检测 | 同上 |
PyMuPDF>=1.24.0 | 图片转 PDF 页面 | 同上 |
根据 --input 参数收集图片或 PDF 文件。如果是目录,扫描其中所有支持格式的图片。按文件名或修改时间排序。
根据 --per-page 和页面方向计算每张图片的可用区域:
per-page=1:整页减去边距,横竖由图片方向决定。per-page=1:整页减去边距,横竖由图片方向决定。per-page=2:A4 横版,左右两列。per-page=3:A4 横版,三列并排。per-page=4:A4 横版或竖版,2×2 网格。per-page=auto(默认):竖版图多 → 3张/页,横版图多 → 1张/页。每张图片等比缩放适配其可用区域,居中放置。
将编排后的页面写入输出 PDF。不修改任何原始文件。
首次使用时安装依赖:
python3 -m pip install -r scripts/requirements.txt
python3 scripts/img_to_pdf.py \
--input /path/to/screenshots/ \
--output /path/to/output.pdf
# 自动检测:竖版图多 → 3张/页
python3 scripts/img_to_pdf.py \
--input /path/to/desktop-screenshots/ \
--output /path/to/output.pdf
# 自动检测:横版图多 → 1张/页(A4横版)
python3 scripts/img_to_pdf.py \
--input /path/to/screenshots/ \
--output /path/to/output.pdf \
--per-page 2
python3 scripts/img_to_pdf.py \
--input /path/to/frames/ \
--output /path/to/output.pdf \
--per-page 3
python3 scripts/img_to_pdf.py \
--input /path/to/original.pdf \
--output /path/to/repacked.pdf \
--per-page 2
python3 scripts/img_to_pdf.py \
--input img1.jpg img2.jpg img3.png \
--output /path/to/output.pdf \
--per-page 3
python3 scripts/img_to_pdf.py \
--input /path/to/wechat_long.png \
--output /path/to/wechat.pdf \
--split \
--per-page 3
# 1080×6000 → 按 1080×√2≈1527px 切 4 段 → 2 页 A4 横版
python3 scripts/img_to_pdf.py \
--input /path/to/wechat_long.png \
--output /path/to/wechat.pdf \
--split \
--split-height 1500 \
--per-page 3
python3 scripts/img_to_pdf.py \
--input /path/to/transcript.png \
--output /path/to/transcript.pdf \
--mode vertical
# 不切割,1080×5000 → 1 页 595×2573pt
# 页面高度按图等比缩放,保留上下逻辑
python3 scripts/img_to_pdf.py \
--input /path/to/dir/ \
--per-page 2 \
--dry-run
| 参数 | 说明 | 默认值 |
|---|---|---|
--input / -i | 图片文件、PDF 文件或目录(必填) | - |
--output / -o | 输出 PDF 路径 | <输入名>_编排.pdf |
--mode | 编排模式:nup(N 张/页)或 vertical(单图一长页) | nup |
--per-page / -n | nup 模式下每页图片数:1/2/3/4,或省略自动 | auto(竖版3张,横版1张) |
--margin / -m | 页边距(pt) | 25 |
--orientation | nup 模式页面方向:auto/landscape/portrait | auto |
--sort | 排序:name/time/none | name |
--split | 启用长截图切割(nup 模式) | 关闭 |
--split-height | 切割段高(px);不传 = 按 A4 比例(图宽 × √2);vertical 模式忽略 | A4 比例 |
--dry-run | 仅预览不输出 | false |
| 维度 | nup | vertical |
|---|---|---|
| 是否切割 | 视 --split 而定 | 不切(强制) |
| 每页图数 | 1/2/3/4 | 必为 1 |
| 页面尺寸 | A4 固定 | 宽度固定 A4 595pt,高度按图等比 |
| 适用场景 | 微信聊天、视频截图、证据照片 | 庭审笔录、单页长截图 |
完成后检查:
--split-height 或 A4 比例默认;vertical 模式页面高度 = 图高 × (A4 宽 - 2×margin) / 图宽 + 2×margin。/tmp/img2pdf-splits-* 不残留)。