Skip to content

Repository files navigation

SwiftResume

SwiftResume 是一款模块化、离线优先的中文简历浏览器扩展。简历数据以结构化 JSON 保存,内容编辑与排版模板相互独立:只需维护一份内容,即可随时切换模板并导出 PDF。

核心特性

  • 模块化编辑:支持个人信息、教育经历和通用内容三类组件;模块可以新增、复制、隐藏和排序。
  • 灵活的内容结构:通用内容由可选的主标题、副标题、时间和富文本正文组成,可用于项目经历、工作经历、专业技能、自我评价等场景。
  • 丰富的正文格式:支持字体、字号、字重、颜色、高亮、行高、缩进、对齐、引用、列表、链接、分隔线和表格。
  • 多份简历管理:点击顶部简历名称打开“我的简历”浮窗,点击条目直接编辑,在条目右侧复制或展开更多操作;新建入口位于标题区,各份简历独立保存。
  • 按求职场景起步:新建时仅选择应届生 / 实习、已有工作经验或空白简历;可带入示例,也可只保留结构,创建后立即填写个人信息。
  • 模块编辑:所有新增模块默认带入对应的虚构示例,添加后直接编辑;常用富文本工具直接显示,其他工具收在“更多格式”中。
  • 清晰的桌面工作台:内容编辑、模板与预览和打印 / 保存 PDF 是主入口;低频工具及长说明按需展开,选择或新增模块后自动收起目录并定位首个可见字段。
  • 整份简历编辑历史:支持内容、模板和模块结构的撤销与恢复,删除模块后可直接找回。
  • 100 套输出模板:覆盖商务管理、现代极简、技术工程、学术教育、杂志编辑、创意设计、校招实习与公共事业等十类场景;切换模板不会改变简历内容或编辑布局。
  • 智能模板中心:同页模板预览内支持三步推荐、关键词搜索、分类收藏和四宫格真实内容对比,可统一调整模板、排版密度和强调色,并将当前样式保存回简历。
  • 集中更换样式:主工作台通过醒目的“模板与预览”入口进入完整预览,模板选择不再与内容编辑控件重复出现。
  • 本地数据保护:使用 IndexedDB 自动保存,支持 JSON 导入、手动备份、磁盘镜像和历史版本恢复。
  • 多页面同步:同一浏览器中打开的多个 SwiftResume 页面可以实时同步,也可以在设置中关闭。
  • 两种输出方式:默认使用 HTML/CSS 预览与浏览器“打印 / 保存 PDF”;也可在设置中切换为 Typst PDF,使用内置 Typst/WASM、中文字体和 PDF.js 生成、预览并下载同一份 PDF。两种方式不会在失败后自动互换。
  • 直接导出预览:在同一个导出窗口查看成品预览并打印或下载,不审查简历内容,也不增加确认检查步骤。
  • 旧简历整理与迁移:粘贴旧简历文本后识别并确认模块;支持整库 JSON 备份和选择性恢复为新副本。

安装与使用

目前需要从源码构建并加载扩展。请先安装 Node.js 和 npm,然后运行:

npm install
npm run build

构建完成后,在浏览器中加载 dist 目录:

  1. 打开 Chrome 的 chrome://extensions 或 Edge 的 edge://extensions。
  2. 开启“开发者模式”。
  3. 点击“加载已解压的扩展”,选择本项目生成的 dist 目录。
  4. 点击浏览器工具栏中的 SwiftResume 图标开始使用。

代码更新后,重新运行 npm run build,再到扩展管理页面点击“重新加载”即可。

基本流程

  1. 选择求职场景新建简历,或从“设置与备份 → 导入与备份”粘贴旧简历文本,确认识别结果后创建简历。
  2. 快捷添加所需模块并填写内容,通过拖动或按钮调整顺序。
  3. 点击“模板与预览”,用真实内容选择模板,并按需调整密度与强调色。已实际试排或比较的模板卡片显示当前内容的实测页数;修改内容、密度、颜色、照片或输出方式后旧数值失效,未试排模板不提供猜测页数。
  4. 需要保留另一份简历时,从“我的简历”创建副本。
  5. 点击“打印 / 保存 PDF”(HTML/CSS)或“下载 PDF”(Typst),直接在同一窗口查看分页预览。HTML/CSS 随后在当前标签页打开浏览器打印窗口,在浏览器选择“另存为 PDF”;Typst 则直接提供 PDF 下载链接。需要迁移或手动留档时,可从“设置与备份 → 导入与备份”备份当前或全部简历。

工作台与模板预览跟随设置中的输出方式。HTML/CSS 使用相同页面结构进行预览、分页和浏览器打印;保存 PDF 时建议使用 A4、100% 缩放、无边距、关闭页眉页脚并开启背景图形。最终保存由浏览器控制。Typst 模式在停止输入约 350 毫秒后生成真实 PDF;编译时保留上一次结果并标记,载入新 PDF 后恢复滚动位置,失败可重试,下载复用当前内容的 PDF 数据。历史预览使用 Typst PDF。两种预览均纵向查看页面;编辑区域的网页表单只负责填写内容,不是成品页面。

HTML/CSS 导出窗口点击“打印 / 保存 PDF”后,直接打印已经确认的分页快照;不新开标签页,取消打印后仍留在原导出窗口,可重试或返回原编辑位置。Typst 导出窗口的“打印 PDF”使用当前页面内的同一份 PDF 打印组件;浏览器不支持时提示先下载再打印。在工作台按 Ctrl/Cmd + P 会进入当前输出方式的导出窗口。应用不会把打印请求或取消操作标为已经保存文件。

模板画廊、场景卡片直接加载 public/template-previews/ 中的静态图片,浏览固定示例不会现场编译 PDF。图片在开发阶段通过同一套 Typst/PDF.js 排版生成,清单位于 src/templates/previewManifest.json,文件名包含内容哈希。修改模板配置、src/export/typstPdf.ts 或场景示例后,运行 npm run generate:template-previews 再构建扩展。生成器等待真实渲染完成,全部任务成功后更新清单;它不会进入生产包。用户自己的内容试排和并排对比仍按实际内容生成 PDF。

工具栏“编辑历史”中的“撤销修改”和“恢复修改”针对整份简历,最多保存 100 步当前会话操作。“恢复修改”用于找回刚刚被撤销的内容,执行新的编辑后便不再可用。Windows/Linux 使用 Ctrl + Alt + Z,macOS 使用 Cmd + Option + Z 撤销整份简历,加 Shift 恢复修改;输入框和富文本中的常规 Ctrl/Cmd + Z 保留编辑器原生行为。鼠标悬浮撤销或恢复按钮的整个区域即可查看当前系统快捷键,即使没有可撤销内容也显示原因与键位;导出和已有快捷操作的富文本按钮同样显示真实键位。刷新页面、切换简历、导入或接收其他页面的替换更新会重置操作历史;长期恢复请使用磁盘历史快照。

“简历模块”位于工具栏左侧,对应左侧模块目录;“模板与预览”位于右侧,以带向右箭头的按钮进入完整预览,预览页左上角提供“返回编辑”。“模板与预览”在当前标签页切换,编辑器保持挂载,输入内容、当前模块、滚动位置、光标与本次操作历史保留;浏览器后退和前进也使用同页路由。模板筛选与对比状态在返回编辑后保留。刷新时通过同步的标签页草稿恢复尚未完成自动保存的内容及打开的模块;草稿不会覆盖磁盘库里时间更新的内容。刷新不承诺恢复撤销栈,长期留档仍应使用备份。点击扩展图标会优先聚焦已有工作台,不主动关闭用户已经打开的其他标签。

编辑与导出预览

编辑区保留字段与富文本工具,不显示写作建议、填入示例、疑似示例提醒或内容审查。内容示例与新建模板仍可用于创建简历;导出直接打开成品预览,不检查姓名、联系方式、邮箱格式、空模块或页面内容多少。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 备份”支持当前格式的单份简历与整库文件。先预览并勾选要恢复的简历,再作为新副本加入现有简历库,不覆盖已有简历;从磁盘备份目录恢复也采用选择副本的方式。测试阶段不保证旧数据格式兼容,不支持的格式会明确提示,也可以通过粘贴文本重新整理。

如需额外保护,可在设置中授权一个本地目录。首次进入先完成新建简历,随后通过弹窗提醒设置本地备份目录;每次打开工作台都会检查目录和权限,“本次稍后”或 Escape 只关闭当前页面的弹窗,刷新或重新打开后,若仍未选择目录、需要重新授权或备份出错,会再次提醒。目录和权限正常时保持安静;主动关闭自动磁盘备份时不提示,也不会自动打开目录选择器或请求授权。保存位置、风险说明、重新授权与恢复入口始终可在设置中查看。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。

About

可以在浏览器中使用的中文简历编辑器插件,支持实时预览、多模板排版、本地备份与 PDF 导出。

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages