Markdown → PDF 转换器,免费

将 Markdown 转换为 PDF,带实时预览。自定义页面大小和边距。完全在您的浏览器中运行。

您的数据从不离开设备

关于 Markdown

Markdown 是一种轻量级标记语言,可将纯文本转换为格式化的 HTML。由于易读易写,它被广泛用于文档、博客和技术写作。

Markdown 语法

常见问题

可以在 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,其渊源可追溯至殖民地时代的造纸惯例:

默认的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可防止其被跨页分割;orphanswidows控制页面底部或顶部必须保持在一起的最少行数。

清晰输出的技巧

此类输出常用的Markdown语法

支持的语法是GitHub风格子集:标题、粗体和斜体、列表、表格、带简单语法高亮的代码块、引用块、链接和图像。此构建版本不支持脚注和Mermaid图表。基础语法快速提醒:

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加载;它们被获取一次后缓存。页面加载后可离线工作。

相关工具