Markdown → PDF 转换器,免费
将 Markdown 转换为 PDF,带实时预览。自定义页面大小和边距。完全在您的浏览器中运行。
关于 Markdown
Markdown 是一种轻量级标记语言,可将纯文本转换为格式化的 HTML。由于易读易写,它被广泛用于文档、博客和技术写作。
Markdown 语法
- #、##、###· 标题(h1、h2、h3)
- **文本**· 粗体文本
- *文本*· 斜体文本
- [链接](url)· 超链接
- - 项目· 无序列表
- 1. 项目· 有序列表
常见问题
可以在 Markdown 中使用 HTML 吗?
可以。Markdown 支持行内 HTML,因此可以直接将 HTML 标签嵌入到 Markdown 中。
支持哪些页面大小?
支持 A4、Letter、A3 和 A5。边距可在 0 到 50 毫米之间调节。
PDF 生成是在客户端完成吗?
是的。所有转换都在您的浏览器中完成。您的 Markdown 从不发送到我们的服务器。
此转换器的工作原理
基于浏览器的Markdown转PDF工具运行两阶段流水线。首先,Markdown源文本由JavaScript Markdown解析器解析为HTML(本页面使用marked.js,一个由MarkedJS组织维护的小型、快速、MIT授权的解析器)。结果就是您在实时预览中看到的HTML。其次,该HTML被转换为PDF,本页面使用html2pdf.js,它本身封装了两个库:html2canvas通过读取计算样式将渲染后的DOM重绘到离屏画布上,jsPDF将该画布图像写入PDF页面对象并保存文件。
库本身从公共CDN加载,但您的Markdown是在您的设备上本地解析并生成PDF的。浏览器就是渲染器;没有任何内容离开页面。
PDF简史
PDF起源于Adobe联合创始人John Warnock于1991年提出的内部提案。他希望找到一种在每个屏幕、每台打印机、每个操作系统上看起来相同的文档共享方式。启动这一切的简短文件题为「The Camelot Project」,Adobe于1993年6月15日与Adobe Acrobat 1.0一同发布了第一份PDF规范。Adobe管理该格式长达十五年,之后将PDF 1.7提交给ISO。ISO 32000-1:2008使PDF成为无需许可即可自由使用的开放标准,这是理解为何现代每款工具、浏览器和操作系统都能生成PDF的最重要日期。ISO 32000-2:2017(PDF 2.0)新增了改进的数字签名、更好的Unicode处理和正式的无障碍钩子。2020年修订版由PDF协会于2023年4月提供免费下载,消除了最后一道成本障碍。
PDF本质上是一个以对象形式组织以便随机访问的结构化容器,包含矢量图形(直线和贝塞尔曲线)、光栅图像(通常为JPEG或zlib压缩)、嵌入字体(Type 1、TrueType、OpenType)和允许读者无需解析整个文件即可跳转任意位置的交叉引用表。有几个值得了解的PDF子集标准:PDF/A(归档版,ISO 19005,2005年,禁止任何可能破坏长期可读性的内容)、PDF/X(具有锁定色彩管理的印刷生产)和PDF/UA(通用无障碍,ISO 14289-1,2012年,要求完全标记的PDF,包含阅读顺序、替代文本、映射到Unicode的嵌入字体以及声明的文档语言)。
页面尺寸
A系列来自ISO 216(1975年正式化,可追溯至1922年德国的DIN 476)。每种A系列尺寸具有相同的√2(≈ 1.414)宽高比,这意味着将A3的长边对折可得到两张没有浪费的A4,将A4对折可得到两张A5。A0的面积恰好是1 m²。北美尺寸(Letter、Legal、Tabloid)不遵循√2,其渊源可追溯至殖民地时代的造纸惯例:
- A4:210 × 297 毫米(8.3 × 11.7 英寸)。北美以外的全球默认。
- A3:297 × 420 毫米(11.7 × 16.5 英寸)。海报、跨页。
- A5:148 × 210 毫米(5.8 × 8.3 英寸)。小册子、独立杂志。
- Letter:8.5 × 11 英寸(215.9 × 279.4 毫米)。美国、加拿大和菲律宾的默认尺寸。
默认的10毫米页边距比Microsoft Word默认的1英寸(25.4毫米)更窄,但对于代码密集或表格密集的文档非常好用,因为您希望每一列都能放下。
诚实的警告:文本不可选中
由于转换器将HTML渲染到画布并将画布作为图像嵌入PDF,所得到的文本不可选中、不可搜索,也不支持屏幕阅读器。它是浏览器所绘内容的忠实图像,但它就是一张图像。这对于菜谱卡、情绪板或印刷讲义等视觉产物来说完全没问题;但不适合法律文件、招聘人员需要关键词扫描的简历,或任何需要通过无障碍性审计(WCAG / Section 508 / EN 301 549)的内容。
如果您需要可选中的文本或带标签的PDF,正确的工具是Pandoc(与LaTeX、wkhtmltopdf或weasyprint结合使用)或带有标签工具的Adobe Acrobat Pro。Pandoc是正式文档生产的黄金标准,可通过Homebrew或Chocolatey安装,从命令行运行,提供完整的LaTeX级排版控制,包括脚注、参考文献、引用、智能引号和正确的连字。
强制分页
html2pdf.js支持CSS打印分片属性。由于Markdown允许嵌入内联HTML,您可以通过粘贴以下内容强制分页:
<div style="break-before: page;"></div>
传统别名page-break-before: always同样有效。其他有用的属性:表格或代码块上的break-inside: avoid可防止其被跨页分割;orphans和widows控制页面底部或顶部必须保持在一起的最少行数。
清晰输出的技巧
- 避免使用大型光栅图像。单张全页照片可能增加数百KB。嵌入前调整图像大小,或在内联样式中使用
max-width来限制其渲染尺寸。 - 不跨页分割的表格:用
<div style="break-inside: avoid">包裹。 - 代码块需要等宽字体。当没有指定更具体的字体时,浏览器使用操作系统的等宽字体:Windows上是Consolas,macOS上是Menlo,Linux上是DejaVu Mono。每个平台的输出看起来会略有不同。
- 使用真实内容长度进行测试。短测试文档没问题,但布局有时在10页以上看起来会有所不同。
- Letter与A4。如果您与美国收件人共享,请选择Letter;世界其他地方期望A4。不匹配的尺寸不会造成任何问题,但会在打印机上导致轻微的页边距/缩放异常。
此类输出常用的Markdown语法
支持的语法是GitHub风格子集:标题、粗体和斜体、列表、表格、带简单语法高亮的代码块、引用块、链接和图像。此构建版本不支持脚注和Mermaid图表。基础语法快速提醒:
- 标题:
# H1到###### H6。 - 粗体和斜体:
**bold**、*italic*、***both***。 - 列表:
- item用于无序列表,1. item用于有序列表。 - 链接和图像:
[text](url)和。请始终包含替代文本。 - 表格:使用连字符分隔行的管道分隔行。
- 围栏代码块:三个反引号加可选语言标签。
- 引用块:
> text。
Markdown的渊源提醒:John Gruber和Aaron Swartz于2004年将其设计为「易于阅读、易于书写的纯文本格式」。CommonMark标准化工作于2014年启动,由John MacFarlane(Pandoc)、Jeff Atwood(Stack Overflow / Discourse)以及来自GitHub、Reddit和Meteor的工程师共同主导。GitHub Flavored Markdown是CommonMark的超集,新增了表格、删除线、任务列表和自动链接。
更多问题
为何我的PDF文字模糊?
由于转换器以浏览器的显示密度对页面进行光栅化,在非Retina显示器上,生成的图像在放大后可能看起来模糊,因为画布大约以96 DPI捕获,而非打印的典型300 DPI。解决方法是以更高密度渲染,html2canvas接受scale选项(通常2×用于Retina质量输出),代价是文件体积更大。
为何我的代码块没有颜色高亮?
marked.js默认不附带语法高亮,它只是将围栏块包裹在<pre><code class="language-…">标签中。真正的高亮需要单独的库(如Prism.js或highlight.js),此构建版本未包含这些库。PDF会以等宽字体显示您的代码,但没有您可能从GitHub期望的绿红配色主题。
可以包含脚注或目录吗?
脚注([^1]引用和[^1]: definitions定义)是标准GFM规范之外的GitHub渲染特性,此构建版本不解析它们。目录需要Markdown扩展(如markdown-it的TOC插件)或手动编写链接列表。两者都可以使用带--toc标志的Pandoc来实现。
PDF是否会标记以支持无障碍性?
不会。输出是没有语义标签、替代文本或阅读顺序提示的图像页面PDF,无法通过PDF/UA一致性检查。对于需要无障碍性的工作(政府表格、公共部门文件、任何受WCAG / EN 301 549 / Section 508约束的内容),请使用带无障碍性过滤器的Pandoc + LaTeX、Adobe Acrobat Pro的标签工具或服务器端WeasyPrint流水线。
有任何内容会发送到服务器吗?
不会。文本从不离开您的浏览器。Marked.js在本地解析Markdown,html2canvas绘制到离屏画布,jsPDF构建PDF对象,浏览器保存文件。库本身从带有子资源完整性检查的公共CDN加载;它们被获取一次后缓存。页面加载后可离线工作。