跨平台格式统一
猎头顾问小陈同时对接三家公司的招聘系统,每家要求简历格式不同:一家要Word、一家要PDF、一家只收Markdown源码。以往他得手动调三次排版,光段落缩进就改到眼酸。用本工具写好一份Markdown简历后,切换模板直接导出PDF和纯文本,段落间距、字号层级自动适配各系统解析规则,不再因格式不符被退回。
在招聘平台投出简历前,最后一件事往往是把 Markdown 排版好的内容复制进 Word,再手动调整页边距和对齐。这个工具让简历写作回归文本:左边写 Markdown,右边即时渲染出排版效果,切换模板后字号、间距、配色自动适配,不破坏已有内容结构。导出 PDF 时字体嵌入、分页控制都在浏览器本地完成,简历文本不会经过任何服务器。适合习惯用纯文本组织内容、对排版有基本要求但不希望被模板框死的求职者。
猎头顾问小陈同时对接三家公司的招聘系统,每家要求简历格式不同:一家要Word、一家要PDF、一家只收Markdown源码。以往他得手动调三次排版,光段落缩进就改到眼酸。用本工具写好一份Markdown简历后,切换模板直接导出PDF和纯文本,段落间距、字号层级自动适配各系统解析规则,不再因格式不符被退回。
应届生小林投了40家企业,每家的岗位要求侧重点不同——投产品岗要突出项目经历,投运营岗要放大数据成果。之前他靠复制粘贴改简历,改到第15家时已经分不清哪个版本投给了哪家。本工具支持Markdown分块编辑,他给每个岗位写一段独立描述,导出前勾选对应模块,一键生成针对性PDF,文件名自动带上公司名和日期。
外企HR对简历排版极其敏感:时间线必须倒序、bullet point动词时态必须统一、页边距不能差1毫米。留学生小张用Word排版时,每次调完中文字体,英文字母的基线就错位。本工具内置的Markdown模板严格遵循ATS解析规范,用#号层级控制标题、-号列表对齐经历,导出的PDF在Mac和Windows上显示完全一致,不再出现字体回退导致的排版崩坏。
在职看机会的产品经理老周,需要在简历里写当前项目细节,但又不想让现公司网管通过文档元数据追踪到谁在发简历。Word文件会记录作者名、修改时间、甚至打印机序列号。本工具纯浏览器端处理,不读取任何本地文件系统,导出PDF时自动清除所有元数据,老周可以放心把简历发给猎头,不用担心文档属性暴露身份。
从会计转行做数据分析的刘姐,原有简历全是账务处理经验,跟数据岗毫无关联。她需要把过去的工作经历用数据思维重新表述——比如把“每月编制报表”改成“用Excel搭建自动化报表流程,减少人工核对时间80%”。本工具支持Markdown内嵌表格和代码块,她可以在项目描述里直接放SQL查询片段或Python代码截图,排版不乱,面试官一眼看到技术能力。
| 维度 | 本工具 | 竞品 A(Canva) | 传统方法(Word) |
|---|---|---|---|
| 模板数量 | 20+ 行业模板 | 数百模板但多数需付费 | 无模板,需手动排版 |
| 导出格式 | PDF 一键导出 | PDF / PNG / 多格式 | PDF 需另存或虚拟打印 |
| 排版控制 | Markdown 语法直接控制 | 拖拽式可视化编辑 | 手动调整段落、字体、间距 |
| 速度 | 浏览器内实时预览,导出秒级 | 需加载编辑器,导出较慢 | 排版+导出需数分钟 |
| 隐私 | 纯浏览器处理,不上传文件 | 需注册并上传到云端 | 完全本地,无网络依赖 |
| 离线可用 | 支持(浏览器缓存后) | 必须联网 | 完全离线 |
| 收费 | 免费 | 免费版有水印/功能限制 | 需购买 Office 授权 |
| 输入 | 输出 | 说明 |
|---|---|---|
| ## 个人信息 **姓名**:张三 **电话**:13800138000 ## 工作经历 ### 某科技有限公司(2020-2023) - 负责前端开发 - 优化页面性能 | PDF 文件,包含:标题「张三 - 简历」,两栏布局,左侧深色区域显示姓名、电话,右侧白色区域显示工作经历,项目符号保留,Markdown 加粗和标题层级转换为对应字号和字重。 | 常规:Markdown 语法完整,验证标题、加粗、列表、水平线等基础渲染,以及两栏模板的自动适配。 |
| ## 教育背景 **学校**:清华大学 **专业**:计算机科学与技术 **时间**:2016-2020 ## 技能 - Python - JavaScript - Docker | PDF 文件,单栏简洁模板,教育背景以时间-学校-专业格式排列,技能以标签式圆角矩形展示。 | 常规:测试不同模板(单栏 vs 两栏)的自动选择逻辑,以及技能标签的渲染效果。 |
| # 标题 **加粗** *斜体* `代码` ~~删除线~~ | PDF 文件,标题使用大号黑体,加粗为粗体,斜体为倾斜,代码块用等宽字体并加浅灰底色,删除线文本中间有横线。 | 边界:Markdown 全语法覆盖,验证斜体、代码、删除线等非常用语法是否被正确处理。 |
| ## 项目经验 ### 项目A(2024) - 使用 React 开发 - 部署于 AWS ### 项目B(2024) - 使用 Vue 开发 - 部署于阿里云 | PDF 文件,项目名称和时间在同一行,项目描述以缩进列表呈现,两个项目之间有 8pt 间距。 | 边界:多个同级标题(两个三级标题)的间距和排版一致性,避免重叠或间距过大。 |
| ## 自我评价 性格开朗,工作认真负责,具有良好的团队协作能力。 | PDF 文件,纯文本段落,无列表或标题,字体为宋体 10pt,行距 1.5 倍。 | 边界:纯文本段落(无任何 Markdown 标记)的默认样式处理,验证空段落不产生多余空白。 |
| ## 工作经历 ### 公司(2020-2023) - 工作内容1 - 工作内容2 ### 公司(2020-2023) - 工作内容3 - 工作内容4 | PDF 文件,两个「公司」标题完全一致,但内容不同,PDF 中两个条目均正常显示,无合并或去重。 | 易错:用户可能复制粘贴相同公司名但内容不同,工具不应自动去重,应保留所有条目。 |
| ## 联系方式 邮箱:zhangsan@example.com ## 教育背景 **学校**:北京大学 ## 工作经历 ### 公司A(2018-2022) - 职责描述 | PDF 文件,联系方式、教育背景、工作经历三个部分按输入顺序排列,邮箱地址自动检测并添加 mailto: 链接(PDF 中可点击)。 | 易错:邮箱地址的自动链接检测,以及多部分顺序的保持(非按模板固定顺序)。 |
1.Markdown 标题层级混乱,导出 PDF 后目录错乱
## 教育经历
### 学校名称
#### 专业# 教育经历
## 学校名称
### 专业PDF 导出时,模板引擎按 # 层级自动生成书签和目录。跳级使用(如 ### 后直接 ####)会导致目录结构断裂,部分阅读器无法正确折叠或跳转。
2.列表符号混用,渲染为两段独立文本
- 项目 A
* 项目 B
+ 项目 C- 项目 A
- 项目 B
- 项目 CMarkdown 规范中 - * + 虽都可表示无序列表,但在同一列表内混用会被解析为三个独立列表块,导出 PDF 时产生多余段落间距,破坏简历紧凑性。
3.代码块标记滥用,导致整段内容被当作代码高亮
```
精通 Python、Java、SQL
```精通 Python、Java、SQL三反引号包裹的代码块在 PDF 渲染中会启用等宽字体和灰色背景,与简历正文样式冲突。技能描述应使用普通段落或列表,而非代码块。
4.空行过多,PDF 分页位置失控
工作经验
2019-2023 某公司工作经验
2019-2023 某公司Markdown 中连续空行会被保留为空白段落,导出 PDF 时可能导致内容被挤到下一页,或在一页内出现大片空白。简历排版应控制在 1-2 页,空行不超过 1 个。
5.表格缺少表头分隔行,渲染为纯文本
| 公司 | 职位 | 时间 |
| 某公司 | 工程师 | 2020-2023 || 公司 | 职位 | 时间 |
| --- | --- | --- |
| 某公司 | 工程师 | 2020-2023 |Markdown 表格必须包含表头与数据行之间的分隔行(---),否则解析器会将其视为普通文本行,导出 PDF 后表格样式完全丢失,内容连成一行。
6.特殊字符未转义,导致 Markdown 解析失败
参与开发了 100+ 个功能模块(含前端)参与开发了 100\+ 个功能模块(含前端)Markdown 中 + 和 ( ) 在某些上下文中是元字符(如列表、链接语法)。不转义时,解析器可能提前截断或错误嵌套,导致后续内容格式错乱。
7.图片链接替代简历头像,导出 PDF 显示异常
使用工具内置的头像上传功能(图片字段),而非 Markdown 图片语法Markdown 图片语法在 PDF 导出时依赖外部 URL 加载,网络慢或图片失效时显示为断裂占位符。工具提供独立头像字段,可保证离线导出时本地嵌入。
PDF 页面数 = ceil(内容总行数 ÷ 每页行数)
内容总行数Markdown 渲染后文本总行数每页行数模板字号、边距决定,如 A4 默认 42 行用户用默认模板(每页 42 行)写了一份 150 行的简历:PDF 页面数 = ceil(150 ÷ 42) = ceil(3.57) = 4 页。工具自动分页,第 4 页仅 24 行,避免内容被截断。
4 种主流语言实现,复制即用:
import markdown
from weasyprint import HTML
# 示例 Markdown 简历内容
md_content = """# 张三
## 联系方式
- 邮箱: zhangsan@example.com
- 电话: 138-0000-0000
## 工作经历
### ABC 公司 (2020-2023)
- 负责后端开发
- 使用 Python/Go 构建微服务
"""
# 转为 HTML
html_body = markdown.markdown(md_content, extensions=['extra'])
html_full = f"""<html><head><meta charset="utf-8"><style>
body {{ font-family: sans-serif; max-width: 800px; margin: auto; padding: 20px; }}
h1 {{ color: #2c3e50; }}
h2 {{ border-bottom: 2px solid #3498db; padding-bottom: 5px; }}
</style></head><body>{html_body}</body></html>"""
# 导出 PDF
HTML(string=html_full).write_pdf('resume.pdf')
print('PDF 已生成: resume.pdf')// 浏览器端:Markdown → HTML → 打印为 PDF
// 需在 HTML 页面中引入 marked.js (CDN: https://cdn.jsdelivr.net/npm/marked/marked.min.js)
const markdown = `# 李四
## 技能
- JavaScript / TypeScript
- React / Node.js
- Docker / Kubernetes
## 项目
### 电商平台 (2021-2022)
- 前端架构设计
- 性能优化,首屏加载减少 40%`;
// 转为 HTML
const htmlContent = marked.parse(markdown);
// 创建打印窗口并触发 PDF 导出
const printWindow = window.open('', '_blank');
printWindow.document.write(`
<html><head><title>简历</title>
<style>
body { font-family: Arial, sans-serif; max-width: 800px; margin: 20px auto; }
h1 { color: #333; }
h2 { border-bottom: 1px solid #007bff; }
</style></head>
<body>${htmlContent}</body></html>
`);
printWindow.document.close();
printWindow.focus();
printWindow.print(); // 用户选择“另存为 PDF”即可package main
import (
"fmt"
"os"
"strings"
"github.com/gomarkdown/markdown"
"github.com/gomarkdown/markdown/html"
"github.com/gomarkdown/markdown/parser"
"github.com/jung-kurt/gofpdf"
)
func main() {
md := `# 王五
## 教育
- 清华大学 计算机科学 (2016-2020)
- GPA 3.8/4.0
## 证书
- AWS 解决方案架构师 (SAA-C03)`
// Markdown → HTML
ext := parser.NewWithExtensions(parser.CommonExtensions | parser.AutoHeadingIDs)
htmlBody := markdown.ToHTML([]byte(md), ext, html.NewRenderer(html.RendererOptions{Flags: html.CommonFlags}))
// HTML → PDF (简化:直接写入文本,实际可用 go-wkhtmltopdf 等)
pdf := gofpdf.New("P", "mm", "A4", "")
pdf.AddPage()
pdf.SetFont("Helvetica", "", 12)
// 将 HTML 标签剥离,仅保留纯文本内容(演示用)
plain := stripTags(string(htmlBody))
pdf.MultiCell(190, 10, plain, "", "L", false)
if err := pdf.OutputFileAndClose("resume.pdf"); err != nil {
fmt.Fprintf(os.Stderr, "PDF 生成失败: %v\n", err)
os.Exit(1)
}
fmt.Println("PDF 已生成: resume.pdf")
}
func stripTags(s string) string {
var result strings.Builder
inTag := false
for _, r := range s {
if r == '<' {
inTag = true
continue
}
if r == '>' {
inTag = false
continue
}
if !inTag {
result.WriteRune(r)
}
}
return result.String()
}#!/bin/bash
# 依赖: pandoc, weasyprint (或 wkhtmltopdf)
# 安装: sudo apt install pandoc weasyprint
# 示例 Markdown 简历
cat > resume.md << 'EOF'
# 赵六
## 工作经验
- **高级工程师** @ 某科技公司 (2019-至今)
- 主导微服务拆分,QPS 提升 3 倍
- 引入 CI/CD 流水线,部署效率提升 60%
## 语言
- 中文 (母语)
- 英语 (CET-6)
EOF
# Markdown → HTML → PDF
pandoc resume.md -f markdown -t html5 --metadata title="简历" | \
weasyprint - resume.pdf
echo "PDF 已生成: resume.pdf"本工具支持标准 Markdown 语法,包括表格、有序/无序列表、粗斜体、代码块等,但图片嵌入仅在 Markdown 编辑区预览有效,导出 PDF 时图片会被自动忽略(PDF 渲染引擎不支持内联图片)。如果需要放照片,建议使用本工具提供的「头像上传」专用字段,模板会自动排版到头像位置,而不是在正文里用 Markdown 插入。
模板的字体和字号是预设好的排版方案,目的是保证导出 PDF 时各元素(标题、正文、日期)间距和层级一致。目前不支持在编辑界面直接修改字号或字体族,但可以通过「自定义 CSS」字段(在模板选择下方)覆写样式,例如输入 `.section-title { font-size: 18px; }` 可调整段落标题字号。注意:过于复杂的 CSS 修改可能导致 PDF 排版错位。
本工具纯前端生成 PDF,未依赖服务器字体库,因此 PDF 中使用的字体取决于浏览器所在系统的中文字体。Windows 系统一般自带「微软雅黑」「宋体」,macOS 带「苹方」「STHeiti」,Linux 可能缺中文字体。如果导出后中文乱码,请检查系统是否安装了中文字体;Linux 用户需手动安装文泉驿或 Noto Sans CJK 等免费字体。另外,Markdown 里不要用生僻 Unicode 符号(如某些 emoji),也会导致渲染空白。
从 Word、网页或 PDF 复制内容时,会附带大量隐藏的 HTML 标签、行内样式和特殊空格(如 ` `),Markdown 编辑器无法识别这些格式,会以纯文本或混乱的 Markdown 语法显示。建议粘贴前先用「纯文本粘贴」(Ctrl+Shift+V / Cmd+Shift+V)去掉格式,再手动添加 Markdown 标记(如 `#` 标题、`-` 列表)。本工具也提供了「粘贴为纯文本」的按钮,在编辑区右上角。
本工具的「一键导出 PDF」基于浏览器内置的打印引擎(window.print),但做了两处优化:一是自动隐藏了工具界面(导航栏、按钮、广告位),只保留简历内容区;二是强制了 A4 纸张尺寸和标准页边距(左右 15mm,上下 20mm),避免用户手动设置。而直接按 Ctrl+P 打印,可能会带上页面框架、背景色、页眉页脚,且打印设置不同浏览器默认值不同,容易导出多出一页空白或内容被截断。
本工具纯前端运行,所有编辑内容仅保存在浏览器内存中,关闭标签页或刷新页面后内容会丢失。建议养成习惯:每写完一段内容,点击编辑区下方的「保存草稿」按钮,内容会被存入浏览器本地存储(localStorage),下次打开同一浏览器访问本工具时,会自动恢复上次保存的草稿。如果清除了浏览器缓存或使用无痕模式,保存的草稿也会被清除。
模板的列表样式是固定的(如圆点、数字、短横线),但可以通过「自定义 CSS」字段修改。例如,想把无序列表的圆点改成方块,输入 `ul { list-style-type: square; }`;想改有序列表的编号格式(如罗马数字),输入 `ol { list-style-type: upper-roman; }`。注意:本工具 PDF 渲染基于浏览器打印引擎,CSS `list-style-type` 的某些值(如 `circle` 空心圆)可能在某些浏览器中不生效,建议用实心方块或标准数字。
PDF 页数取决于内容量、模板的字体大小和行间距。如果内容少导致只有大半页,可以尝试:1)在模板选择列表里选「紧凑型」模板(行间距更小,字号稍大但保留可读性);2)适当增加个人简介或项目描述段落。如果内容超出一页太多,建议:1)精简工作经历描述,每个项目保留 3-5 个要点;2)在「自定义 CSS」字段加入 `body { font-size: 11px; }` 整体缩小字号(默认 12px);3)减少页边距,如 `@page { margin: 12mm; }`。
隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。