SwiftResume 是一款模块化、离线优先的中文简历浏览器扩展。简历数据以结构化 JSON 保存,内容编辑与排版模板相互独立:只需维护一份内容,即可随时切换模板并导出 PDF。
- 模块化编辑:支持个人信息、教育经历和通用内容三类组件;模块可以新增、复制、隐藏和排序。
- 灵活的内容结构:通用内容由可选的主标题、副标题、时间和富文本正文组成,可用于项目经历、工作经历、专业技能、自我评价等场景。
- 丰富的正文格式:支持字体、字号、字重、颜色、高亮、行高、缩进、对齐、引用、列表、链接、分隔线和表格。
- 多份简历管理:点击顶部简历名称打开“我的简历”浮窗,搜索、切换、重命名、复制和删除简历,各份简历独立保存。
- 按求职场景起步:首次打开可选择应届生 / 实习、已有工作经验或转行求职,查看完整示例缩略图并带入内容;也可只保留结构或从空白开始。
- 写作引导:添加模块前可查看示例,默认带入各类型的填写骨架,添加后直接编辑;常用富文本工具直接显示,其他工具收在“更多格式”中。
- 岗位版本与对比:记录目标公司、岗位和备注,创建独立岗位版本,对比其他简历或最近下载时的内容,并向选中的版本同步联系方式。
- 自适应工作台:支持专注编辑、编辑与预览并排、可折叠模块目录;窄窗口可切换编辑与预览,A4 预览默认适应可用宽度。
- 整份简历编辑历史:支持内容、模板和模块结构的撤销与恢复,删除模块后可直接找回。
- 100 套输出模板:覆盖商务管理、现代极简、技术工程、学术教育、杂志编辑、创意设计、校招实习与公共事业等十类场景;切换模板不会改变简历内容或编辑布局。
- 智能模板中心:支持三步推荐、关键词搜索、分类收藏和四宫格真实内容对比,可统一调整模板、排版密度和强调色,并将当前样式保存回简历。
- 模板试用:主工作台的“排版样式”可以用当前内容试排;确认后应用样式,取消则保留原样。
- 本地数据保护:使用 IndexedDB 自动保存,支持 JSON 导入、手动备份、磁盘镜像和历史版本恢复。
- 多页面同步:同一浏览器中打开的多个 SwiftResume 页面可以实时同步,也可以在设置中关闭。
- 统一 PDF 排版:内置 Typst/WASM、中文字体和 PDF.js;工作台、独立预览、模板试排与下载均使用 Typst PDF,打印也打开同一份文件。生成失败时可重试,不再切换为网页打印。
- 导出检查:提示缺失信息、示例占位内容、空模块、异常日期和过长段落,并在真实 PDF 中提示可能的空白页与内容过少的末页。
- 旧简历整理与迁移:粘贴旧简历文本后识别并确认模块;支持整库 JSON 备份和选择性恢复为新副本。
目前需要从源码构建并加载扩展。请先安装 Node.js 和 npm,然后运行:
npm install
npm run build构建完成后,在浏览器中加载 dist 目录:
- 打开 Chrome 的
chrome://extensions或 Edge 的edge://extensions。 - 开启“开发者模式”。
- 点击“加载已解压的扩展”,选择本项目生成的
dist目录。 - 点击浏览器工具栏中的 SwiftResume 图标开始使用。
代码更新后,重新运行 npm run build,再到扩展管理页面点击“重新加载”即可。
- 选择求职场景新建简历,或从“我的简历 → 导入与备份”粘贴旧简历文本,确认识别结果后创建简历。
- 快捷添加所需模块并填写内容,参考写作提示,通过拖动或按钮调整顺序。
- 点击“排版样式”试排,按需调整密度与强调色,满意后应用。
- 需要针对不同职位调整时,打开“岗位版本”,填写目标公司和岗位,创建独立版本。
- 点击“导出 PDF”,处理或忽略内容检查提示,在真实 PDF 预览中检查分页后下载;需要迁移或手动留档时,可从“我的简历 → 导入与备份”备份当前或全部简历。
工作台、独立预览、模板试排和历史预览均使用 Typst 生成的真实 PDF,页数与换行由同一套排版决定。页面按顺序纵向排列,直接滚动查看;仅绘制可见及邻近页面,并释放远处页面的位图。预览不再提供上一页、下一页或单独的文字查看面板。编辑区域仍使用网页控件填写内容,不作为成品页面。停止输入约 350 毫秒后更新真实内容预览;编译时保留上一次结果并标记,载入新 PDF 后恢复滚动位置,失败可重试。导出会等待所选内容生成完成,同一内容复用相同 PDF 数据。
在导出窗口点击“打印 PDF”会在新标签页打开同一份 PDF,再使用阅读器的打印按钮或 Ctrl/Cmd + P。在工作台按该快捷键会先进入 PDF 导出流程。若直接使用浏览器菜单打印工作台,页面只显示引导提示,不会用网页排版冒充正式简历。纸张和缩放由阅读器的打印设置控制。
模板画廊、三个场景的卡片与放大示例直接加载 public/template-previews/ 中的静态图片,浏览固定示例不会现场编译 PDF。放大示例包含全部页面,可纵向滚动。图片在开发阶段通过同一套 Typst/PDF.js 排版生成,清单位于 src/templates/previewManifest.json,文件名包含内容哈希。修改模板配置、src/export/typstPdf.ts 或场景示例后,运行 npm run generate:template-previews 再构建扩展。生成器等待真实渲染完成,全部任务成功后更新清单;它不会进入生产包。用户自己的内容试排和并排对比仍按实际内容生成 PDF。
工具栏“编辑历史”中的“撤销修改”和“恢复修改”针对整份简历,最多保存 100 步当前会话操作。“恢复修改”用于找回刚刚被撤销的内容,执行新的编辑后便不再可用。Ctrl/Cmd + Alt + Z 撤销整份简历,加 Shift 恢复修改;输入框和富文本中的常规 Ctrl/Cmd + Z 保留编辑器原生行为。刷新页面、切换简历、导入或接收其他页面的替换更新会重置操作历史;长期恢复请使用磁盘历史快照。
场景示例提供校招前端开发、在职前端工程师和运营转产品三份完整虚构简历,每份包含三个项目,交代背景、技术或方法、具体行动与结果。应届版包含实习、技能与校园荣誉;有经验版包含两段工作经历;转行版结合两段运营经历、产品协作与个人产品练习。默认带入示例内容,创建前取消“带入示例内容”可保留相同模块结构并清空内容;空白简历仍是独立入口。创建后也可点击“清空示例,保留结构”,该操作支持撤销。
教育模块提供学校、专业、学历、时间与补充说明;工作模块组织职责与成果;项目模块按背景、职责、行动、结果展开;技能模块按类别填写且默认不显示日期;个人简介直接编辑一段文字。添加时可选择带入示例,默认使用该类型的填写骨架。所有示例与 【占位内容】 都应替换为自己的真实信息。
“内容示例”决定起步时参考的内容,“排版样式”用于调整外观。简历管理和导入备份统一放在顶部名称打开的浮窗中;窄窗口将岗位版本和撤销/重做收进“更多”,独立预览入口位于预览区域。
导出前的规则检查在本机运行,可以定位到对应模块,也可以忽略提示继续导出。分页提示根据 PDF 的文本分布判断,只有图片的页面也可能被提示;它们是辅助提醒,最终仍需查看真实 PDF。
“岗位版本”可保存目标公司、岗位和投递备注,基于当前内容创建独立副本。对比会显示内容、模块顺序、隐藏状态和排版变化;联系方式同步只更新选中版本的手机、邮箱和所在地。
每份简历保留最近一次点击 PDF 下载链接时的文件名、时间和内容快照,可以与当前内容对比。记录表示发起下载,不代表文件已成功保存或已经投递;浏览器打印不生成这条记录。该快照不会因撤销正文编辑而消失,也不包含 PDF 文件本身。
“粘贴旧简历文本”按常见中英文标题识别模块,并提取明确标注的姓名和联系方式。无法识别的内容保留在“待整理内容”中;创建前可修改名称、个人信息并勾选要保留的模块。该入口处理粘贴的文本,目前不直接解析 Word 或 PDF 文件。
| 命令 | 说明 |
|---|---|
npm run dev |
启动 Vite 开发服务器 |
npm run build |
执行 TypeScript 检查并构建扩展 |
npm run generate:template-previews |
使用本机 Chrome 或 Edge 预生成 100 套模板首页和三个场景的全部页面 |
npm run preview |
预览生产构建 |
npm test |
运行测试 |
npm run test:layout |
在 1440×1000 桌面浏览器中检查 HTML/PDF 对齐、富文本及分页,渲染图保存到 .vite/layout-check/;可用 CHROME_PATH 指定浏览器 |
简历默认自动保存在浏览器的 IndexedDB 中,所有内容均留在本机。“我的简历 → 导入与备份”中的“备份当前简历”可导出当前简历,“备份全部简历”可将整个简历库保存为一个 JSON 文件。备份包含照片、岗位信息和最近下载内容快照,不包含应用设置、目录授权或磁盘历史快照文件。
“导入 JSON 备份”支持当前格式的单份简历与整库文件。先预览并勾选要恢复的简历,再作为新副本加入现有简历库,不覆盖已有简历;从磁盘备份目录恢复也采用选择副本的方式。测试阶段不保证旧数据格式兼容,不支持的格式会明确提示,也可以通过粘贴文本重新整理。
如需额外保护,可在设置中授权一个本地目录。SwiftResume 会在停止编辑约 1.5 秒后更新当前简历的磁盘镜像,并至多每 10 分钟为有变化的简历创建一次历史快照。每份简历最多保留最近 20 个快照。
备份目录结构如下:
| 路径 | 内容 |
|---|---|
index.swiftresume.json |
备份索引 |
resumes/ |
每份简历的最新版本 |
assets/ |
从简历中提取的独立图片 |
history/ |
可预览和恢复的历史快照 |
首次选择目录后会立即备份全部简历。若浏览器重启或系统收回目录权限,只需按提示重新授权;这不会影响 IndexedDB 中的自动保存。历史版本可以恢复为新简历,也可以在确认后覆盖原简历。
SwiftResume 不会将简历上传到服务器。Typst、WASM 与 Noto Sans CJK SC 中文字体均打包在扩展中,编辑、保存和 PDF 导出无需远程服务。
内置字体采用 SIL Open Font License 1.1,许可证见 public/fonts/LICENSE-NOTO-SANS-CJK.txt。
PDF.js 的渲染代码与模块线程随扩展本地打包,采用 Apache License 2.0,许可证见 public/licenses/PDFJS-LICENSE.txt。