# Travel Dossier

> 从旅行社行程 PDF + 机票酒店票据生成 A5 手机优先的自足旅行手册（瑞士极简 HTML→PDF）。手动调用：/travel-dossier <行程资料目录>

- Skill: `wang-cankun/travel-dossier` (Agent Skill, multi-file: 8 files)
- Install (CLI): `npx skillmds@latest add wang-cankun/travel-dossier`
- Raw SKILL.md: https://api.skillmd.com/api/skills/wang-cankun/travel-dossier/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Web & Frontend
- Author: Wang-Cankun (https://skillmd.com/u/wang-cankun)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/wang-cankun/travel-dossier

---


# Travel Dossier — 私人旅行手册生成器

产出物叫 **dossier**：一份 148×210 mm、手机优先、**self-contained**（图片 base64 内嵌、无外部依赖、单 HTML 文件）的旅行手册，
经 headless Chrome 打成 PDF。设计语言为瑞士极简（参见 `assets/template.html`，直接复用其 CSS，不要重写）。

贯穿全程的纪律只有一条：**truth 溯源**——手册里每个数字、时刻、规则都能指出来源
（旅行社方案 / 票据 / 官方网站），指不出来源的数字不写。细则见 `references/content-style.md`。

## 步骤

### 1 · 采集 truth

向用户收集三类输入并落盘清单：①旅行社行程方案（PDF）②已订票据（机票/酒店确认，PDF/邮件）③可选的调研资料。
同时问清：读者是谁、语言政策（默认中文为主 + 专名中英对照）、行程性质（private tour 会改变写法——后勤归地接，手册不教打车排队）。
**完成判据**：每份输入文件有路径和类型标注；语言与行程性质已确认。

### 2 · 提取与对账

用 `pypdf` 提取全部 truth 文本。交叉核对：航班时刻/日期星期（用日历算，逐日验证周几）、酒店日期衔接、方案与票据的冲突。
涉及官方规则（门票价格、开放时间、限额）时**上官网核实**，不要信记忆或旧调研——政策年年变
（秘鲁 gob.pe 系证书链不全，用 `curl -sk` 抓）。
**完成判据**：冲突与缺口列成表；每条要么已解决、要么标记为需用户/旅行社裁决。

### 3 · 章节架构

按 dossier 模式排页面清单（页数 ≈ 天数 × 2 + 8）：
封面 → 总览表 → 航班速查 → 住宿速查 → 路线海拔图 → **每日行程页与目的地阅读页交错**
→ 关键攻略专题（如购票机制、参观线路）→ 美食 → 实用速查 → 外语速查卡 → 资料来源页。
**完成判据**：一页一行的页面清单，每页注明内容与配图位。

### 4 · 写作

按 `references/content-style.md` 全文写作。核心两条在此提前：
**先名后释**（每个地名首现 = 中文名 + 原文名 + 一句"这是什么"，然后才是解读）；
**只用来源时刻**（方案和票面写了的时刻才出现，不自创"约 11:00 抵达"式排程）。
**完成判据**：self-audit 一遍——随机抽任何数字/时刻都能说出其 truth 来源；抽任何专名首现处都有中外文对照。

### 5 · 排版与构建

以 `assets/template.html` 为底（CSS 原样复用，含 `print-color-adjust:exact` 与显式分页 `.page` 容器），
填入内容。构建：`scripts/build.sh <src.html> <out.pdf>`，然后用 pypdf 验证页数与 148.2×209.9 mm 页面尺寸。
**完成判据**：PDF 页数与页面清单一致，尺寸命中。

### 6 · 配图

按 `references/images.md` 走完整管线：Wikimedia API 抓取（`scripts/fetch_images.py`）→
**contact sheet 目检**（淘汰地图/老照片/跑偏主体）→ 哈希去重 → 压缩后 base64 内嵌 → 更新 credits。
**完成判据**：每个图位的图片哈希唯一；每张图经过目检；credits 与来源页同步。

### 7 · strip check 质检

跑 `scripts/check_overflow.py <pdf>`：渲染全书每页底部 20% 拼成检查条，逐页看页脚是否被内容压线。
有溢出就裁文字或缩图（宁可删一行，不缩字号），改后重跑直到全绿。最后抽 2–3 个内容最密的整页高清目检。
**完成判据**：全部页面页脚零碰撞；抽查整页版式正常、深色背景正常显现。

### 8 · 交付

交付单 HTML 源 + PDF（SendUserFile，display: render），并告知微调回路：改 HTML → 重跑 build.sh。

## 迭代已有 dossier

小改（换图、改字）：直接编辑 HTML → 步骤 7 只查改动页 → 交付。
内容层变更（行程改了、新版方案）：从步骤 2 重新对账受影响的部分，再走 4–8。

## 参考实现

本 skill 提炼自一次秘鲁行程的实战项目（28 页、16 图的完整 dossier），步骤与判据均经该成品验证。

