〖Code With SOLO〗用 SOLO 搭建一个简历排版工作台:把 AI 整理的经历一键变成可投递 PDF

① 摘要

面向正在求职、实习申请、保研/竞赛材料整理的学生和职场新人,我用 TRAE SOLO 做了一个 Markdown 简历排版工作台。它把「AI 整理内容」「Markdown 编辑」「A4 实时预览」「版式微调」「证件照处理」「PDF 预览/下载」串成一条完整流程,解决简历内容写完后还要反复调格式、导出 PDF 容易走样的问题。

目前项目已部署上线,可直接体验:
Vercel 在线版:https://ai-resume-builder-kappa-wine.vercel.app/


② 真实场景与需求

目标人群:正在准备求职简历的大学生、应届生、转岗求职者,以及需要快速整理个人经历的人。

痛点描述:

作为一个经常需要修改简历的人,我发现真正浪费时间的不是“有没有经历可写”,而是下面这些细节反复消耗精力:

“经历不知道怎么整理”:项目、实习、获奖、课程作业都散在不同地方,直接让 AI 写又担心它编造经历、夸大数据,甚至把截图里的隐私信息也写进去。

“Markdown 写起来舒服,但投递需要 PDF”:Markdown 很适合整理结构化内容,可普通 Markdown 预览不像正式简历;如果再复制到 Word,格式又要重新调一遍。

“简历总是差一点点超过一页”:字号小一点、行距紧一点、页边距少一点,每次都要靠人工试,导出 PDF 后才发现分页还是不对。

“证件照和 PDF 预览经常出问题”:证件照位置需要手动调整,PDF 预览如果依赖浏览器新窗口,还可能被 Edge 或插件拦截。

现有做法的问题:

  • 用 Word:排版自由,但格式容易乱,换电脑或导出 PDF 后效果不稳定。
  • 用在线模板:模板好看,但内容结构受限,细节调整不够灵活。
  • 用 Markdown:内容管理很舒服,但缺少简历级别的 A4 排版和导出能力。
  • 只用 AI 对话:能帮忙润色,但无法完成最终排版和 PDF 交付。

所以我想做的不是一个“简历模板展示页”,而是一个真正能完成任务的工具:先让 AI 按约束整理真实经历,再把 Markdown 放进工作台,最后调成一份能投递的 PDF。

③ 作品介绍

作品名称:简历排版工作台
在线体验:https://ai-resume-builder-kappa-wine.vercel.app/
代码仓库:GitHub - 23dzlqhu1/ai-resume-builder · GitHub

核心功能一:AI 提示词辅助整理简历内容

我在工具里内置了一段可复制的简历整理提示词,要求 AI:

  • 不虚构经历、奖项、学校、公司、项目成果或数据。
  • 只基于用户提供的信息优化表达。
  • 忽略身份证号、学号、证书编号、二维码、住址、私人手机号等隐私信息。
  • 不确定的信息标注“需本人确认”。
  • 输出 Markdown 格式,方便直接粘贴进工具。

这一步的目的不是让 AI 替用户编简历,而是让 AI 做“结构化整理”和“表达优化”。

核心功能二:Markdown 编辑 + A4 实时预览

用户可以在左侧编辑 Markdown,右侧实时看到 A4 简历效果。编辑区支持示例简历、撤销/重做、行数和字符数统计;预览区会把 Markdown 转成正式简历样式,包括标题、分割线、列表、强调文字等。

这里我没有直接用普通 HTML 渲染,而是用 marked 解析 Markdown,再用 DOMPurify 清洗 HTML,避免用户粘贴复杂内容时带来额外风险。


核心功能三:版式控制和多模板切换

简历排版最常见的问题是:内容差一点点超出一页。为了解决这个问题,我做了一个版式控制面板,支持调整:

  • 正文字号
  • 行高
  • 页边距
  • 段落间距
  • 章节间距
  • 是否自动适配一页
  • 一键按内容优化

同时内置三套简历主题:

  • ATS 经典:稳重、通用,适合大多数投递场景。
  • 现代技术:清爽、有一点技术感,适合开发、产品、数据类岗位。
  • 正式文雅:更正式,适合学术、行政、文职类场景。


核心功能四:自动适配一页

这个功能是项目里最实用的一点。工具会先测量简历内容高度,如果超过 A4 高度,就逐步压缩行高、字号和页边距,每次调整后重新测量,直到尽量适配一页。

它不是简单把整个页面缩小成一张图,而是按排版参数逐步优化,这样导出的 PDF 仍然保持可读性。预览区也会显示当前状态,例如“适配一页”“已压缩至一页”“内容仍超出”等。

核心功能五:证件照上传、拖拽、缩放

很多中文简历仍然需要证件照,所以我加入了照片功能:

  • 支持上传图片。
  • 限制 2MB 文件大小,避免页面变慢。
  • 默认放在右上角。
  • 可以拖动改变位置。
  • 可以靠近边缘拖拽调整宽高。
  • 自动限制在简历页面范围内,避免拖出纸张。

核心功能六:PDF 预览和下载

PDF 导出使用 html2pdf.js。为了让导出效果和预览一致,我在导出前临时把预览容器固定为 A4 宽度,取消滚动区域影响,导出后再恢复页面状态。

一开始 PDF 预览是打开新窗口,但有同学反馈在 Microsoft Edge 里点击后页面卡了一下,没有正常弹出 PDF。我判断这可能是浏览器或插件拦截了新窗口/Blob 链接,于是后面改成了当前页面内置 PDF 预览弹层。生成过程中会显示进度条和状态提示,完成后再切换到 PDF 预览,并保留“下载 PDF”按钮作为兜底。

④ 用 SOLO 实现的过程

整个项目从想法到上线,主要通过 TRAE SOLO 辅助完成。我的做法不是一句“帮我做一个简历工具”,而是不断把问题拆小,再让 SOLO 帮我实现和验证。

第 0 步:参考比赛规则和优秀作品

我先让 SOLO 帮我理解 SOLO 挑战赛的投稿要求:需要写真实场景、实践过程、成果展示和总结,而不是只贴一个项目链接。后面又参考社区里的优秀投稿,发现好的文章通常会突出“真实痛点 + 产品截图 + 踩坑记录”,所以我也按这个思路整理作品。

第一步:需求拆解与架构设计

我把需求拆成几个用户故事:

  • 作为求职者,我希望先用 AI 把经历整理成可信的 Markdown。
  • 作为简历编辑者,我希望左边改内容,右边实时看到 A4 效果。
  • 作为投递者,我希望快速把简历压缩到一页。
  • 作为需要证件照的用户,我希望照片能上传、移动、调整大小。
  • 作为最终使用者,我希望能预览 PDF,再决定是否下载。

SOLO 根据这些需求帮我确定了 Vue 3 + TypeScript + Vite 的技术栈,并把项目拆成编辑区、预览区、版式面板、照片上传、PDF 导出、状态管理等模块。

第二步:核心功能开发

最先完成的是 Markdown 编辑和 A4 预览。SOLO 帮我搭好了基础组件结构,我再不断补充细节,比如撤销/重做、示例简历、字符统计、空状态展示。

接着是主题系统。这里没有把样式写死,而是抽成 resumeThemes 配置,用 CSS 变量控制颜色、字体、标题样式、分割线、照片圆角。这样后续新增模板不需要改预览组件。

第三步:自动排版算法

自动适配一页是最复杂的功能。SOLO 先实现了基础测量逻辑:用 scrollHeight 判断内容是否超过 A4 高度。后来我们继续迭代,让它不是一次性暴力缩小,而是按优先级调整:

  1. 先压缩行高。
  2. 再缩小字号。
  3. 最后减少页边距。
  4. 每次调整后重新测量。
  5. 设置最大迭代次数,避免死循环。

这个过程让我感受到 SOLO 比单纯代码补全更像一个可以一起调试的搭档:它能先实现一个可运行版本,再根据实际体验继续收敛。

第四步:踩坑与解决

坑 1:PDF 预览被浏览器或插件拦截
现象:同学用 Edge 点击“预览 PDF”时,页面卡了一下,但没有弹出新窗口。
原因:原方案依赖 window.open 和 blob 新页面,容易被浏览器策略或插件拦截。
解决:改成当前页面内置 PDF 预览弹层,用 iframe 显示生成的 Blob,同时提供下载按钮兜底。

坑 2:Vercel 国内访问慢
现象:同学反馈网站打开可能要 30 秒。
排查:我用请求计时发现首页 HTML 很小,但 Vercel 链路在国内网络下可能比较慢。
解决:先做前端层面的优化,把编辑器、预览区、照片上传改成按需加载,并给 Vercel 静态资源加缓存配置。也尝试过腾讯 EdgeOne Pages,但默认域名在国内访问存在 401 限制,最后决定暂时保留 Vercel。

坑 3:证件照拖拽边界处理
现象:照片如果随意拖拽,可能被拖出 A4 页面,或者缩放到异常尺寸。
解决:增加 clampPhotoPosition 和 clampPhotoSize,把照片的位置和尺寸限制在页面内部。

第五步:部署上线

项目最终部署在 Vercel。每次推送到 GitHub main 分支后,Vercel 会自动构建和发布。上线后,我让同学用不同浏览器试用,根据反馈继续修复 PDF 预览和访问速度问题。

【图片 8:放 GitHub 仓库或 Vercel 部署成功截图。可以和在线链接放在“成果展示”里。】

⑤ 导出展示

这里是我自己的简历,所以打个码哈哈
在线体验:
https://ai-resume-builder-kappa-wine.vercel.app/

代码仓库:

技术栈:

  • Vue 3 + TypeScript + Vite
  • Tailwind CSS
  • marked + DOMPurify
  • html2pdf.js
  • Vercel 自动部署

已实现能力:

  • AI 简历整理提示词
  • Markdown 简历编辑
  • A4 实时预览
  • 三套简历主题
  • 字号、行高、页边距、段落间距、章节间距调整
  • 自动适配一页
  • 一键按内容优化
  • 证件照上传、拖拽、缩放
  • PDF 内置预览
  • PDF 下载
  • Vercel 静态部署
    ⑥ 效果与总结

这次用 SOLO 做项目,最大的收获是:它不只是帮我写代码,更像是把一个模糊想法推进成可上线工具的执行伙伴。

在需求阶段,SOLO 帮我把“做一个简历工具”拆成了内容整理、编辑预览、版式控制、照片处理、PDF 导出等明确模块。这个拆解很重要,因为它决定了项目不是一个静态展示页,而是一个可以真正完成任务的工作台。

在实现阶段,SOLO 帮我快速搭起 Vue 项目结构,并完成很多繁琐但关键的细节,比如 Markdown 渲染、主题变量、自动测量高度、PDF 导出配置、拖拽缩放边界。很多功能如果我手写,可能会在细节上反复卡很久。

在测试阶段,SOLO 也帮我根据真实反馈继续优化。比如同学反馈 Vercel 打开慢,我们就一起分析资源体积和请求耗时;同学反馈 Edge 预览 PDF 失败,我们就把新窗口预览改成页面内预览。这个过程比一次性生成代码更有价值,因为真实项目的问题往往是在上线后才出现。

目前这个工具已经能完成一条完整流程:用户先让 AI 根据真实经历输出 Markdown,再在工作台中编辑和排版,最后预览并下载 PDF。它不一定是一个复杂的大项目,但解决的是一个非常具体、真实、高频的问题。

后续我还想继续做:

  • 增加本地保存和多份简历管理。
  • 增加导入 Markdown 文件功能。
  • 增加更多行业模板。
  • 增加手动分页符。
  • 增加导出 DOCX 或图片的能力。

对我来说,这次 SOLO 挑战赛最有意义的地方,是让我把一个“我自己也会用”的小工具真正做出来,并且在大家的反馈中继续打磨它。