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

49 lines
3.6 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.

# HTML/CSS 设计排版接口
先读 [设计规范](design.md)。简单文本使用 `create_pdf.py`;图文报告、封面、页眉页脚、目录、公式和流程图使用 `create_design_pdf.py`。
## 调用
通过 `write_file` 将内容写为 UTF-8 `.html`,以 `<!doctype html>` 声明标准模式,并包含 `<meta charset="utf-8">`。通过 `execute_skill_script` 调用 `scripts/create_design_pdf.py`,不直接调用 Node 或 Chromium:
```text
--input '/usr/local/src/pdf/tmp/task/report.html' --output '/usr/local/src/pdf/report.pdf'
```
可选 `--css <本地CSS>`、`--page-size A4|LETTER`、`--expected-pages <1–200>`、`--timeout <10–600>`(默认 180)和 `--overwrite`。HTML/CSS 单文件不超过 2 MiB。先读取 `assets/report.html` 了解结构,按实际内容编写;模板中的示例文字不可直接交付。
`assets/design.css` 由固定渲染器自动注入,提供变量、标题、六种封面、三线表、代码、引用、图注与目录。用户 HTML 内的 CSS 可覆盖默认值,`--css` 最后应用。不需要手动加载该样式或任何 JS 库。
## 静态内容与本地资源
- 只写静态 HTML/CSS/SVG。禁止 `<script>`、事件属性、iframe/object/embed、`javascript:` URL 和运行任意 JS。不能提供 Python、Bash 或 Node 代码让脚本代为执行。
- 图片、CSS 和自备字体放在 HTML 同目录及其子目录,用相对路径引用;上级目录、符号链接越界、`file:` 和外部资源会被拒绝。资源单个不超过 25 MiB。
- HTTP(S) 引用链接可以保留为可点击参考来源,但不能用作图片、CSS、字体或脚本下载入口。所需远程素材先由 `download_attachment.py` 下载。
- Paged.js、KaTeX、Mermaid 和 KaTeX 字体从镜像读取,没有 CDN 例外。渲染器使用独立浏览器上下文并限制资源访问。
- 使用语义化 `h1/h2/p/table/figure/figcaption`,对引用设置真实 `id` 和 `href="#..."`。自定义计数器跨页需核验;普通页码、目录目标页码可使用 Paged.js 支持的 counter/target-counter,不笼统禁止 CSS counter。
## 公式与流程图
不加载脚本、不写初始化代码。固定接口识别以下结构:
```html
<p>公式为 <span class="math-inline">E=mc^2</span>。</p>
<div class="math-display">\sum_{i=1}^{n} x_i</div>
<div class="mermaid">flowchart LR
A[资料] --> B[本地 OCR]
B --> C[疑难复核]
C --> D[PDF]</div>
```
公式内容为 KaTeX 数学标记,Mermaid 为图形描述语言,不是任意程序入口。Mermaid 使用 neutral 主题与 strict 安全模式;不支持在图中插入配置指令。公式/图形解析失败则返回错误,不带着未渲染内容输出成功。
数据图表可用静态 SVG 或已生成图片。长公式应分行;大表/大图应调整结构、命名横向页或拆分,不能一律缩成不可读的小图。
## 分页与检查
- 默认 A4 内页与全页封面都使用实际物理尺寸;不采用原脚本固定 `scale: 1.5` 的补偿。
- 先等待图片、字体和图形完成,再等待 Paged.js 的完成 Promise。超时、外部资源、图片失败、横向溢出或页数不符时不发布结果。
- PDF 实际页数必须与分页引擎相同。`--expected-pages` 不匹配时明确失败,不裁掉页面或缩短内容冒充满足要求。
- 返回 `page_count`、每页文字/图形统计、warnings 和 `requires_visual_review`。空白页提示结合上下文判断;少字的图表页不直接判坏。
- 用 `inspect_pdf.py` 和 `extract_text.py` 核对最终文件,再用 `render_pdf.py` 查看全部页。自动检测不能发现所有纵向裁切、语义错误、缺字或表单外观问题。