用 Codex 把纯文本简历直接生成 PDF:一个轻量开源工作流
找工作时,很多人真正消耗时间的,不是写简历内容本身,而是反复调整格式、套模板、导出 PDF。这个开源项目想解决的就是这件事:把“整理内容、套用版式、导出成品”这条链路收束成一个可以直接在本地执行的工作流。
它不是传统意义上的在线简历平台,也不是一个功能复杂的 SaaS,而是一个非常克制的项目:你提供简历内容,Codex 读取仓库里的约束和模板,生成 HTML,再调用 Chromium headless 导出 PDF。对个人开发者来说,这种方案的价值不在功能堆叠,而在于足够轻、足够直接、足够可控。
项目地址:
- GitHub:
https://github.com/NyaRu-Kiss/md2Resume
![[插图位置:最终简历效果图]](https://i-blog.csdnimg.cn/direct/a74d5ea7228c400da31a2dc50a99388d.png)
一、项目介绍
这个项目的定位可以概括成一句话:
用 Codex 接管“简历内容整理 -> HTML 页面生成 -> PDF 导出”的本地工作流。
和常见简历工具相比,它有几个很明确的特点:
- 不需要手动进网页表单逐项填写
- 不需要自己从零排版 HTML
- 不依赖远程后端服务来生成最终文件
- 输出结果完全落在本地目录,方便持续修改和二次加工
如果你本来就习惯用 Markdown 管理内容,或者希望把个人简历也纳入自己的代码工作流,这个项目会比在线模板站更顺手。
二、这个项目解决了什么问题
简历制作这件事常见有三个低效点:
- 内容和样式耦合在一起,改一段经历就容易牵动整页排版。
- 模板迁移成本高,Word、在线编辑器、网页工具之间很难形成稳定复用。
- 最终导出 PDF 的过程不稳定,尤其是跨平台时,字体、分页和布局经常出现偏差。
这个项目的做法,是把问题拆成三层:
- 内容层:用纯文本或 Markdown 维护简历信息
- 模板层:用现成 HTML 模板约束版式和视觉风格
- 导出层:统一使用 Chromium headless 输出 PDF
这样一来,内容编辑和视觉排版就被分离开了。用户需要调整的是信息本身,而不是在页面上拖拽模块、对齐字号、猜测分页结果。
从实践角度说,这也是我比较认可的一类 AI 项目形态:不是让模型“自由发挥”,而是让它在明确的工程约束下完成具体产出。
三、项目结构与核心文件
这个仓库很轻,核心文件不多,但每个文件的职责都比较清楚。
.
├── AGENTS.md
├── README.md
├── resume_design_summary.md
├── examples/
│ ├── profile.md
│ ├── resume.html
│ ├── resume-llm.html
│ ├── resume.pdf
│ └── resume-llm.pdf
├── output/
│ ├── profile.md
│ ├── resume.html
│ └── resume.pdf
这些文件分别承担不同角色:
AGENTS.md:给 Codex 的任务约束,规定生成前必须阅读哪些文件、输出放到哪里resume_design_summary.md:模板的设计说明,告诉模型哪些视觉和布局特征必须保留examples/profile.md:示例简历内容,定义输入内容的大致组织方式examples/resume.html/examples/resume-llm.html:HTML 模板参考,定义最终页面结构和样式output/:统一接收生成结果,避免输入样例和用户产物混在一起
这也是这个项目最值得说清楚的一点:它的“程序性”不主要体现在一堆脚本上,而主要体现在仓库约束的设计上。
四、整体工作流程
项目实际执行时,链路非常短:
如果换一种更工程化的说法,可以把它理解成一个最小闭环:
- 输入是结构化简历内容
- 规则来自仓库内文档
- 模板来自样例文件
- 执行者是 Codex
- 渲染器是 Chromium
- 最终产物是本地 HTML 和 PDF

五、项目原理:为什么它能稳定生成
很多人看到这类项目,第一反应会是“这不就是让 AI 帮忙写个 HTML 吗”。但从仓库设计上看,它真正可复用的地方并不在“生成”两个字,而在生成之前就已经把边界画清楚了。
1. 输入层:内容先独立于样式
项目允许用户直接粘贴纯文本简历,也可以先整理成 profile.md。这一步的意义,是先把“你想表达什么”从“页面长什么样”里拆出来。
这会带来两个直接收益:
- 简历内容可以持续维护,不被某一个模板绑定
- 以后切换风格时,不需要重写内容,只需要替换生成策略或模板参考
2. 约束层:不是让模型自由写,而是先读规则
AGENTS.md 和 resume_design_summary.md 是这个项目稳定性的核心。
前者负责定义流程:
- 先阅读设计说明
- 再参考
examples/下文件生成简历 - 最终结果统一输出到
output/
后者负责定义视觉和结构要求,比如:
- 顶部标题区如何组织
- 模块标题使用什么风格
- 基本信息区必须左右布局
- 必须保留证件照区域
这套设计说明里有一个很关键的约束:无论用户是否提供真实照片,都必须保留证件照占位区域,而且不能删掉 avatar-container 和 avatar-placeholder 结构。
这不是一个小细节,而是模板稳定性的组成部分。因为一旦把证件照区删掉,基本信息模块就会退化成纯文字流布局,最终生成结果会和既定模板风格偏离。
3. 模板层:通过示例把抽象要求落到可模仿对象
这个项目没有把“设计风格”只停留在口头描述上,而是额外提供了 examples/resume.html 和 examples/resume-llm.html 两份样例模板。
从代码上看,模板已经把核心结构和样式定下来了,例如:
- 页面使用打印友好的尺寸和边距
- 模块标题采用渐变色梯形视觉
- 页面四角有几何装饰元素
- 联系方式带有图标化表达
- 基本信息区左侧是个人资料,右侧保留证件照占位
也就是说,Codex 并不是从零“设计”一张简历,而是在已有视觉样例附近进行生成。这会比纯提示词生成稳定得多。
4. 渲染层:HTML 负责表达,Chromium 负责定稿
HTML 的作用是承载内容和样式,而 PDF 的一致性则交给 Chromium headless。
这一层很关键,因为很多简历工具的问题并不出在页面本身,而是出在导出阶段:
- 浏览器不同,打印结果不同
- 本地环境不同,分页可能变化
- 临时截图或转存容易损失质量
统一使用 Chromium headless 后,这个项目的导出路径就变成了一个比较稳定的“标准渲染器”:
chromium --headless --disable-gpu \
--print-to-pdf=output/resume.pdf \
file:///absolute/path/to/output/resume.html
这也是为什么它虽然轻量,但结果并不随意。真正负责“成品一致性”的,不只是模型,还有最后这一步确定性的渲染。
六、一个很轻的项目,为什么也值得开源
这类仓库看起来不大,甚至没有复杂后端、数据库、任务调度或 API 服务,但它依然有明确的开源价值。
我觉得主要有三点:
- 它把一个高频、重复、容易手工返工的流程标准化了
- 它展示了如何把 AI 生成任务收束进一个可复用仓库约束里
- 它足够小,别人 clone 下来就能理解,不需要很高学习成本
很多时候,真正容易被复用的开源项目,不一定是功能最重的,而是路径最短、边界最清楚的。
这个简历项目就属于后者。
七、实际使用方式
使用过程基本就是下面几步:
1. 拉取项目
git clone https://github.com/NyaRu-Kiss/md2Resume.git
cd md2Resume
2. 在项目根目录启动 Codex
codex --yolo

3. 直接输入简历内容
你可以粘贴纯文本简历,也可以让 Codex 先帮你整理成 Markdown。
例如:
帮我写简历:AGENT开发工程师个人简历
基本信息
- 姓名:张默
- 年龄:25岁
- 电话:138XXXX8899
...

4. 让 Codex 依据仓库规则生成结果
在这个仓库里,Codex 会先读取设计说明,再参考示例模板,把结果统一生成到 output/ 下。
最终你会得到:
output/profile.mdoutput/resume.htmloutput/resume.pdf

八、这个项目的边界
为了避免误解,最好也把它的边界讲清楚。
它目前并不是:
- 一个多模板切换的简历平台
- 一个带账户体系的在线产品
- 一个自动解析所有非结构化简历并零误差生成页面的系统
- 一个可视化拖拽式编辑器
它真正擅长的,是下面这类场景:
- 你已经有简历文本,希望快速生成一版正式 PDF
- 你习惯在本地维护内容,不想依赖在线平台
- 你希望把简历也纳入自己的 AI + Git 工作流
- 你愿意接受“模板驱动 + 规则约束”的生成方式,而不是完全自由排版
这也是我认为它更像“工程化工作流项目”而不是“内容创作工具”的原因。
九、写在最后
这个项目最吸引我的地方,不是它用了多复杂的技术,而是它把一件原本很琐碎的事收束得足够干净。
从纯文本简历,到模板化 HTML,再到最终 PDF,它没有引入多余层次,也没有把问题做重。对想快速产出一份可投递简历的人来说,这种路径反而很有效。
如果你最近也在折腾 AI 工作流,我会建议你关注这种“小而完整”的项目。它们不一定复杂,但往往更接近真实可复用的形态。
![[插图位置:GitHub Star 引导图或项目收尾配图]](https://i-blog.csdnimg.cn/direct/c88fa97139f5489da2ec50c42111dcbf.png)
更多推荐


所有评论(0)