Resume Matcher 的简历模板排版控制项(边距、行高、字号)怎么配置?
【免费下载链接】Resume-MatcherThe #1 AI Harness for Building Resumes, PDFs, Cover Letters & more, locally with 100+ LLMs support.项目地址: https://gitcode.com/GitHub_Trending/re/Resume-Matcher
Resume Matcher 内置 7 套简历模板,每套模板的版式都受同一组排版控制项驱动:页面边距、间距、行高、字号、字体族,外加紧凑模式等开关。这些控制项在 Builder 页面的 Formatting Controls 面板里直接调整,调整后的设置会同时作用于页面实时预览和最终导出的 PDF——设置结构定义在 template-settings.ts,UI 面板实现在 formatting-controls.tsx。
控制项在哪:进入 Builder 页面的 Formatting Controls 面板
按 SETUP.md 把前后端跑起来(前端npm install && npm run dev,浏览器打开http://localhost:3000),进入 Builder 页面新建或打开一份简历后,页面里的Formatting Controls面板(可折叠)就是全部排版入口。面板从上到下依次是:
- 模板选择:7 个缩略图,对应
swiss-single、swiss-two-column、modern、modern-two-column、latex、clean、vivid(完整对照见 template-system.md)。 - 强调色:仅当模板为
modern、modern-two-column、vivid时显示,可选blue/green/orange/red。 - 页面尺寸:
A4(210 × 297 mm)或 US Letter(8.5 × 11 in)。 - 边距:上、下、左、右四条独立滑杆。
- 间距:节间距、条目间距、行高三组 1–5 档选择器。
- 字号:基础字号、标题倍率两组 1–5 档选择器,加标题/正文两个字体族切换组。
- 选项:紧凑模式、联系信息图标两个开关。
- Effective Output 汇总 + Reset:显示当前生效的具体值,一键重置为默认。
每次修改都会通过 resume-builder.tsx 里的settingsToCssVars()转成 CSS 自定义属性(--margin-top、--line-height、--font-size-base等)并立即刷新预览;同一份设置会随 PDF 导出链路(打印页 print/resumes/[id]/page.tsx)原样带进 PDF。设置还会写入浏览器 localStorage:再次进入 Builder 时自动恢复上次的排版配置;要回到初始状态,用面板底部的Reset按钮(重置为DEFAULT_TEMPLATE_SETTINGS)。
边距(Margins)
四个方向各自独立调节,单位是 mm:
| 控制项 | 范围 | 默认值 | 对应 CSS 变量 |
|---|---|---|---|
上边距margins.top | 5–25mm | 10mm | --margin-top |
下边距margins.bottom | 5–25mm | 10mm | --margin-bottom |
左边距margins.left | 5–25mm | 10mm | --margin-left |
右边距margins.right | 5–25mm | 10mm | --margin-right |
UI 里每个方向是一根min=5、max=25的滑杆,旁边的数字即当前 mm 值。默认值以 template-settings.ts 中的DEFAULT_TEMPLATE_SETTINGS为准(四边各 10mm);注意 resume-templates.md 的文档表格写的是 8mm,两处不一致,实际操作以前者代码值为准。
边距在 _base.module.css 中被用作简历容器的内边距(padding: var(--margin-top) var(--margin-right) ...),即它改变的是内容区四周的留白,而不是纸张尺寸。
间距与行高
间距三项共用 1–5 档(SpacingLevel),档位到具体值的映射定义在 template-settings.ts:
| 控制项 | 档位范围 | 默认档 | 1 / 2 / 3 / 4 / 5 对应值 | CSS 变量 |
|---|---|---|---|---|
节间距spacing.section | 1–5 | 3 | 6px / 10px / 16px / 20px / 24px | --section-gap |
条目间距spacing.item | 1–5 | 2 | 2px / 4px / 8px / 12px / 16px | --item-gap |
行高spacing.lineHeight | 1–5 | 3 | 1.15 / 1.25 / 1.35 / 1.45 / 1.55 | --line-height |
- 节间距控制各大节(Summary、Experience 等)之间的空隙,作用在
.resume-section的margin-bottom上。 - 条目间距控制同一节内条目之间的空隙,作用在
.resume-items、.resume-stack等容器的gap上。 - 行高作用在
.resume-body整体(line-height: var(--line-height)),同时影响所有正文文本。
UI 上这三项都是 1–5 的按钮组,选中档为蓝色高亮,改动立即反映在预览中。
字号与字体族
字号同样按 1–5 档控制,外加两个字体族切换组:
| 控制项 | 档位范围 | 默认档 | 1 / 2 / 3 / 4 / 5 对应值 | CSS 变量 |
|---|---|---|---|---|
基础字号fontSize.base | 1–5 | 3 | 11px / 12px / 14px / 15px / 16px | --font-size-base |
标题倍率fontSize.headerScale | 1–5 | 3 | 1.5× / 1.75× / 2× / 2.25× / 2.5× | --header-scale |
- 基础字号是全局文本基准,作用在
.resume-body的font-size上;姓名使用calc(var(--font-size-base) * var(--header-scale)),节标题则用稍小的独立倍率--section-header-scale(同一档位下 1.0–1.4×,默认 1.2×)。 - 副标题、日期等次级文本都是基于基础字号的固定比例(如
.resume-item-subtitle为 0.95×、.resume-date为 0.75×,见 _base.module.css),所以调基础字号会整体缩放全文,而不是只动某一块。
字体族两项各提供serif/sans-serif/mono三个按钮:
| 控制项 | 取值 | 默认 | 实际字体栈(节选) |
|---|---|---|---|
标题字体fontSize.headerFont | serif / sans-serif / mono | serif | ui-serif, Georgia, Cambria, "Times New Roman", Times, serif |
正文字体fontSize.bodyFont | serif / sans-serif / mono | sans-serif | ui-sans-serif, system-ui, sans-serif, ... |
标题字体栈完整列表在 template-settings.ts 的HEADER_FONT_MAP/BODY_FONT_MAP中。
两个与字体相关的行为需要注意:
latex和clean是单字族模板:选中它们时,formatting-controls.tsx 的applyTemplatePreset会自动把标题/正文都预设为 serif(latex)或 sans-serif(clean),之后两个字体族切换组仍然可以手动改。- 未列入预设的模板(swiss、modern 系列、vivid)切换时保留你当前的字体设置。
紧凑模式:只压间距,不动边距
选项区第一个开关Compact Mode对应compactMode:开启后节间距和条目间距各乘 0.6 倍(COMPACT_MULTIPLIER = 0.6),行高只乘 0.92 倍(COMPACT_LINE_HEIGHT_MULTIPLIER = 0.92,template-settings.ts 注释说明这样避免文字重叠)。边距不受影响,保持你设置的 mm 值。
文档 resume-templates.md 把紧凑模式描述为 "0.6x spacing multiplier (spacing only; margins unchanged)",其中 "spacing only" 指的是边距不参与缩放,行高仍会按 0.92 倍收缩——以代码中的两个乘数为准。
确认结果:Effective Output 汇总与 PDF 校验
Formatting Controls 面板底部有一个Effective Output区块,它直接读出当前设置换算后的生效值:
- 四边边距(mm,与滑杆一致,紧凑模式不改变它);
- 节间距 / 条目间距(rem,已乘紧凑系数,如默认档 3 显示
1rem、紧凑模式下显示0.6rem); - 行高(乘 0.92 系数后的实际值,如默认 1.35、紧凑下 1.242);
- 基础字号(px)、标题倍率(×)、标题/正文字体族名称。
调完一组参数后先看这里:如果汇总值和你预期的一致,说明设置已被正确换算成 CSS 变量。开启紧凑模式时该区块还会多出一行提示(compactHint),提醒你间距已被缩放。
导出 PDF 时,同样的TemplateSettings会走打印链路:resumes.py 中的打印接口会把template、pageSize、四边边距(marginTop等)、sectionSpacing、itemSpacing、lineHeight、fontSize、headerScale、headerFont、bodyFont、compactMode、showContactIcons、accentColor拼进 URL,跳转前端的打印页 print/resumes/[id]/page.tsx 解析这些参数并渲染。该页对每个参数都有范围钳制和默认回退(见该文件的parseMargin/parseSpacingLevel/parseTemplate等函数):
- 边距越出 5–25 会被钳回范围内;
- 间距/字号档位越出 1–5 回落到默认档;
- 模板名不在 7 个允许值内回落为
swiss-single,页面尺寸非A4/LETTER回落为A4。
所以浏览器端预览里核对过的版式,在导出的 PDF 里是同一套数值;若手工改动打印 URL,超范围的值不会报错,而是被静默修正为上述默认值。
可选分支:直接改打印 URL 调试单组参数
Builder 导出走的是应用内下载(downloadResumePdf(resumeId, templateSettings, ...),见 resume-builder.tsx),不需要手拼 URL。但打印页本身就是一个标准的 Next.js 路由,可以直接在浏览器打开来验证某一组排版值在 PDF 渲染下的效果:
http://localhost:3000/print/resumes/<resume_id>?template=swiss-single&pageSize=A4&marginTop=10&marginBottom=10&marginLeft=10&marginRight=10§ionSpacing=3&itemSpacing=2&lineHeight=3&fontSize=3&headerScale=3&headerFont=serif&bodyFont=sans-serif&compactMode=false&showContactIcons=false&accentColor=blue其中<resume_id>替换为你要渲染的简历 id,其余参数按上文取值范围填。渲染成功后浏览器即可打印为 PDF(@media print样式在 _base.module.css 里已处理分页避免条目跨页断开)。这是调试路径,日常使用仍建议以 Builder 面板为准,因为面板会做即时预览并持久化设置。
边界与限制
- 排版控制项作用于模板选择之外的所有版式细节;模板本身的列结构(单栏、65/35 双栏等)由模板决定,不在边距/行高/字号控制范围内。
- 强调色只对
modern、modern-two-column、vivid生效(代码里ACCENT_COLOR_MAP的颜色映射与 UI 可见性判断一致),其余模板选了也不显示该区块。 - 紧凑模式不改边距;行高收缩幅度(0.92)比间距(0.6)小,代码注释的原因是为避免文字重叠。
- 设置持久化在浏览器 localStorage,不是后端数据库:换浏览器或清缓存后,Builder 会回到
DEFAULT_TEMPLATE_SETTINGS,需要重新调整。 - 页面尺寸只有 A4 与 US Letter 两档(
PAGE_SIZE_INFO:210 × 297 mm / 8.5 × 11 in),边距按 mm 标注,不随纸张尺寸换算。
改完排版后的下一步就是导出:Builder 页的下载按钮会把当前TemplateSettings一并传给 PDF 生成接口,打印页按同一套参数渲染出最终文件。
【免费下载链接】Resume-MatcherThe #1 AI Harness for Building Resumes, PDFs, Cover Letters & more, locally with 100+ LLMs support.项目地址: https://gitcode.com/GitHub_Trending/re/Resume-Matcher
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考