# M5 导出与下载从 Markdown 到 PDF：教程大纲

- 里程碑：`M5 导出与下载：Markdown / PDF`
- 日期：`2026-03-25`
- 目标读者：想把“内容展示”真正补齐到可下载、可交付阶段的前后端开发者

## 一、为什么 M5 要单独拉出来做

- 为什么“能展示”不等于“能导出”
- 为什么导出能力值得单独做一个里程碑
- 为什么先定服务端导出，再谈前端入口

## 二、为什么先做 Markdown，再做 PDF

- Markdown 更容易验证内容一致性
- PDF 更适合承接最终下载体验
- 两者先后顺序为什么能降低复杂度

## 三、导出为什么必须绑定已发布版本

- 为什么不能直接从 draft 导出
- 导出与公开站一致性的价值
- 为什么“已发布快照”是导出的稳定边界

## 四、Markdown 导出的最小实现

- 服务端如何格式化标准简历内容
- 如何处理 `zh / en` 双语导出
- 如何通过响应头让浏览器直接下载 `.md`

## 五、PDF 导出的最小实现

- 为什么先做“最小可用 PDF”而不是复杂模板
- 为什么 PDF 内容先复用 Markdown 文本来源
- 如何在后续平滑扩展到精细模板系统

## 六、web 与 admin 下载入口怎么设计

- web 公开端为什么直接暴露已发布下载链接
- admin 后台为什么要补边界说明
- 为什么后台入口不意味着后台草稿导出

## 七、测试如何覆盖导出闭环

- 服务层如何测 Markdown / PDF 生成
- E2E 如何测响应头与已发布状态
- 组件测试如何测链接和语言切换

## 八、M5 的遗留与下一步

- 还没有做的：复杂 PDF 模板、多模板切换、导出历史
- 为什么这些能力不适合放在当前教程节奏里
- 下一步如何进入 M6：测试、CI/CD、部署上线

## 九、可扩展成正式教程的章节草案

- 《为什么导出能力要先绑定已发布内容》
- 《NestJS 如何做 Markdown 简历导出》
- 《最小可用 PDF：先打通链路，再优化样式》
- 《web/admin 下载入口怎么设计才不混乱》
