本地优先的开源 AI 简历生成器与 Markdown 简历编辑器 🚀
A4 实时排版 | 行级分页 | 本地文件解析 | Markdown / 区块编辑 | 本地优先
🎯 在线演示 (Demo) | 💻 GitHub 仓库
openResume 是一个开源 AI 简历生成器、Markdown 简历编辑器和本地优先的简历工作台。它支持 A4 实时预览、PDF / DOCX / HTML 导出、Markdown / TXT / PDF / DOCX 导入,以及 OpenAI、Anthropic Claude、Google Gemini、DeepSeek、OpenRouter 等模型辅助优化简历。
适合需要可长期维护简历内容、精确控制导出排版、保护隐私数据,并希望用 AI 快速迭代求职材料的开发者、设计师、产品经理和求职者。
市面上多数简历生成器,要么存在跨页文字被横向裁剪切断的物理缺陷,要么强行依赖昂贵的第三方云端解析 API,要么无法完美控制 A4 排版的空白边距。
openResume 针对这些开源痛点进行了底层设计突破:
- 🎨 终极物理零边距:配合
@page { margin: 0 },底色完美铺满 A4 页面,彻底告别难看的白色外边框。 - ✂️ 等高占位物理剪枝:保留各页对应的内容,合并页外占位节点,减少长简历的重复文字和 DOM。
- 📏 行级不安全区间避让(防切断):通过
getClientRects()精确测量每一行文字的物理高度,分页时自动避开文字中线及列表小圆点,在文字行、标题、图片和表格行之间选择分页断点;超出单页高度的元素仍需调整。 - 🔒 本地优先:编辑和文件解析在浏览器中完成。HTML 导出在本地生成;PDF / DOCX 导出将内容发送到应用服务器;启用 AI 时内容直接发送到配置的模型服务商。
- 🤖 对话式 AI 简历优化:支持 OpenAI, Anthropic, Gemini, DeepSeek 等模型,提供项目级会话记忆,一键展示简历修改前后差异。
- 双编辑模式:支持 Markdown 源码编辑与可视化区块编辑双向无缝切换。
- A4 实时排版:预览按 A4 尺寸分页,支持实时缩放、模板切换。
- 精美字体库:本地打包 Geist;其他字体使用系统安装字体与回退字体,不在首屏加载远程字体。
- 多格式导入:支持导入
md / txt / pdf / docx简历。 - 零配置本地解析:无 API Key 时支持纯前端分析并提取简历信息。
- 差异化对比:AI 简历助手提供详细的 Diff 对比视窗,一键应用修改。
- 多格式导出:支持
PDF / DOCX / HTML;PDF 保留分页,DOCX 使用原生可编辑排版,复杂自定义 CSS 不会转换为 Word 样式。 - 多简历项目:支持本地多份简历项目的快速切换与管理,优化移动端手势与自适应体验。
- 证件照上传:一寸证件照 25:35 竖版裁切预览,支持拖拽上传、随时更换与删除。
- 自动保存:编辑内容自动保存到浏览器本地,页头显示保存状态;存储异常时提示备份。
- 连通性测试:支持大模型 API Base URL 自定义以及一键连通性测试。
- 前端框架:Next.js 15 (App Router) + React 19 + TypeScript
- 样式方案:Tailwind CSS v4 + Vanilla CSS + Framer Motion (动画)
- 测试框架:Vitest
- 解析与导出:
pdfjs-dist(PDF 解析)mammoth(Word 导入)docx(Word 生成)
- Playwright / Chromium (PDF 导出服务端渲染)
推荐使用 pnpm:
# 安装依赖
pnpm install
# 启动开发服务
pnpm dev或者使用 npm:
npm install
npm run dev启动后在浏览器中打开:http://localhost:3000
# 运行单元和组件测试
pnpm test
# 生产环境构建
pnpm build
pnpm startAI 简历助手配置完全通过应用内的设置面板管理,API Key 以明文保存在当前浏览器的 LocalStorage 中,仅适合可信设备和浏览器环境。AI 请求直接发送到你配置的模型服务商;自定义 API 地址时请确认其可信性。
当前支持大模型提供商:
- OpenAI (ChatGPT)
- Anthropic (Claude)
- Google Gemini
- DeepSeek (深求)
- OpenRouter (主流聚合)
注:导入流程会优先尝试 AI 自动提取整理,若未配置或 API 失败,将无缝自动回退到本地解析器执行。
app/ Next.js App Router 与 API 导出接口
app/styles/ 主题变量、工作台控件、简历模板与打印样式
src/components/ 页面、编辑器、预览与助手主组件
src/components/assistant/ AI 助手对话及 Diff 比对组件
src/components/settings/ 大模型连通性设置与主题参数面板
src/components/ui/ 系统通用基础 UI 组件
src/config/ 多语言文案与默认配置
src/hooks/ 应用状态、历史记录与设置等自定义 Hooks
src/lib/ Playwright 导出、请求校验与 DOCX 转换
src/test/ 单元测试与集成测试
src/types/ TypeScript 类型声明
src/utils/ 简历提取、AI 差异计算、导出生成等工具函数
openResume 致力于成为体验最好的、可自由编辑和迭代的个人本地简历工作台。
如果您在使用过程中有任何建议或发现了 Bug,欢迎提交 Issue 或 Pull Request!
- PDF 导出提示:首次 PDF 导出可能稍慢,因为无头浏览器相关二进制文件在后台需要初始化。
- 扫描版 PDF:对于非文本型的扫描版 PDF,文本提取功能可能会受限于 OCR 识别。
- 候选修改机制:AI 助手对简历内容的修改默认会先生成高亮候选稿,只有当您手动点击“应用修改”后才会写入实际文档。
pnpm lint:ESLint;pnpm typecheck:TypeScript。pnpm test:单元、组件与服务端资源管理回归测试。pnpm test:e2e:先构建,再运行 Playwright 桌面与移动视口测试。首次运行可执行pnpm exec playwright install chromium;Windows 也可使用已安装 Chrome/Edge,或设置PLAYWRIGHT_EXECUTABLE_PATH。- E2E 使用独立浏览器上下文、虚构简历和模拟 AI 响应,不调用付费模型。失败时生成截图、trace 和 HTML 报告,CI 会上传诊断附件。
- 依赖策略要求安装包满足发布时间限制;不要为刚发布的测试工具放宽该策略。
- 开发服务使用
.next-dev,生产构建使用.next,避免构建覆盖正在运行的开发页面。已运行pnpm dev时,可用pnpm exec playwright test --config=playwright.dev.config.ts验证http://localhost:3000;用例会检测运行时与 hydration 错误。 - PDF / DOCX 导出需要应用服务器;PDF 需要 Chromium。首次云端导出可能需要下载二进制文件。导出浏览器禁用脚本并阻断网络请求,图片和网页字体由客户端嵌入。
- Markdown 文件导入保留原文;其他文件启用 AI 时尝试格式整理,失败后回退本地解析。扫描 PDF 需要先 OCR。空提取不会覆盖原稿。
- 浏览器存储失败时会提示尚未保存;损坏数据保留在
resume_projects-recovery-*中。清理浏览器存储之前请自行导出备份。