wechat-robot-skills/skills/pdf/references/editing.md
2026-09-09 12:30:35 +08:00

55 lines
3.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 表单、裁剪、元数据和嵌入图片
通过 `execute_skill_script` 调用 `scripts/edit_pdf.py`。所有输出遵循 `/usr/local/src/pdf/`;不覆盖源文件。原有合并、拆分、旋转仍用 `manage_pdf.py`。
## 表单
先查看真实字段:
```text
form-info --input '/usr/local/src/pdf/tmp/task/form.pdf'
```
返回字段 id、类型、当前值、只读状态、选择项和按钮状态。默认 50 项,`--offset`/`--limit`(最高 200)支持继续。没有 AcroForm 字段的扫描表单不能直接套用字段填写;XFA 和数字签名不是本接口支持的填写类型。
填写明确要求的字段:
```text
form-fill --input '/usr/local/src/pdf/tmp/task/form.pdf' --output '/usr/local/src/pdf/filled.pdf' --data '{"name":"Alice","agree":true,"country":"CN"}'
```
较长数据用 `--data-file <JSON>` 替代 `--data`,二选一,上限 2 MiB、500 个字段。
- 文本值必须是字符串,遵守字段长度。复选框可用 JSON `true/false`,或实际状态名如 `/Yes`;不能把非空字符串一律当作选中。
- 单选按钮使用实际状态值;下拉/列表使用真实选项值,多选需原字段支持。无效值、未知字段、只读字段或签名字段明确失败。
- pypdf 更新字段值与外观,再回读校验。必须渲染核对文字位置、换行、复选框和单选按钮状态。原表单字体未包含中文等字形时,不能仅凭字段值正确就交付;需保留可显示的模板或按用户要求重建表单版式。
- 不把填写文本当作签署数字签名,也不主动提交表单。
## 裁剪
```text
crop --input '/usr/local/src/pdf/tmp/task/source.pdf' --output '/usr/local/src/pdf/cropped.pdf' --pages '1-2' --box '20,30,575,812'
```
坐标单位 pt,按未旋转 PDF 坐标系的左、下、右、上填写;框必须在页面 MediaBox 内。省略 `--pages` 处理全部页。修改 CropBox,保留页面内容。**裁剪不删除不可见内容,不是脱敏。** 敏感信息移除需专门的真正删改流程,不能用白块或裁剪冒充。
## 元数据
读取用 `inspect_pdf.py`。更新明确字段:
```text
metadata --input '/usr/local/src/pdf/tmp/task/source.pdf' --output '/usr/local/src/pdf/updated.pdf' --data '{"Title":"报告","Author":"机构"}'
```
支持 Title/Author/Subject/Keywords/Creator/Producer;保留未指定字段。该接口修改文档信息字典,现有 XMP 保留且通过 `xmp_preserved` 提示,不能声称已清理所有元数据。
## 嵌入图片
```text
extract-images --input '/usr/local/src/pdf/tmp/task/source.pdf' --pages '2-3' --output-dir '/usr/local/src/pdf/tmp/task/images'
```
一次最多 4 页、默认 20 张图片(`--max-images` 最高 50),本批总大小不超过 25 MiB。用 `remaining_pages` 和 `--start-image <next_image>` 续读。需要覆盖本任务旧输出时加 `--overwrite`。
此操作提取 PDF 中的图像对象,不代表完整页面:不包含周围文字、矢量图形,也可能是被裁剪/复用的图片。阅读扫描页和视觉复核应使用 OCR 内部渲染或 `render_pdf.py`,不能把提取出的零散图片当成原 PDF 页。