跳转到编辑器
mdprint

免费 · 私密 · 无需注册

把 Markdown 打印得漂亮

粘贴、输入或拖入文件。预览实时更新。直接打印或下载为 PDF - 一切都在浏览器中完成。

100% local No sign-up 18 languages
Markdown 源
预览

在下方编辑器开始输入

表格 代码高亮 数学公式 (KaTeX) Mermaid 图表 任务列表 脚注 自动目录 为打印优化 本地处理 无需注册 18 种语言 深色模式 表格 代码高亮 数学公式 (KaTeX) Mermaid 图表 任务列表 脚注 自动目录 为打印优化 本地处理 无需注册 18 种语言 深色模式

本地处理

Local processing. Your files never leave your device. 不上传,不经过服务器,也不追踪内容。

实时预览

所见即所得。预览与打印输出保持一致。

面向全球

18 种语言。支持从右到左书写。包含 CJK 字体。加载一次后即可离线使用。

工作原理

三步搞定。无需账户。

打开编辑器
01

粘贴或上传

直接输入 Markdown、从剪贴板粘贴,或把 .md 文件拖到编辑器中。

02

即时预览

边写边看实时预览。标题、表格、代码、公式、图表 - 全部即时渲染。

03

打印或下载

点击打印调出浏览器对话框,或下载分页正确的干净 PDF。

GitHub Flavored Markdown,加上你真正会用的扩展。

Markdown 能做的一切,都可打印

GFM 表格

对齐列、表头,完整支持 GitHub 风格语法。

代码高亮

highlight.js 自动识别 190 多种语言。

数学公式 (KaTeX)

行内 $x^2$ 和块级 $$...$$ 公式,渲染迅速。

Mermaid 图表

流程图、时序图、甘特图、类图 - 渲染为清晰的 SVG。

任务列表

复选框语法,打印效果到位。

脚注

引用式脚注,跨页依然完整。

自动目录

根据你的标题自动生成可选目录。

为打印优化的样式

分页、表头重复、清爽排版。

深色编辑器

默认浅色。深夜写作就切到深色。

文件导入

.md、.markdown、.txt。拖放或点击按钮均可。

18 种语言

原生界面支持英语、荷兰语、法语、阿拉伯语、中文等。

零追踪

我们看不到你的内容。Plausible 只统计页面访问,仅此而已。

功能

mdprint 支持的一切,附示例。

Markdown 解析

完整的 CommonMark 加 GitHub Flavored Markdown。

mdprint 底层使用 markdown-it - 一个用 JavaScript 编写的快速、符合规范的 Markdown 解析器。它严格实现 CommonMark,再在上面叠加 GitHub Flavored Markdown。双波浪线表示的删除线、裸 URL 的自动链接、带语言标识的围栏代码块、竖线语法的表格,全部与 github.com 上的表现一致。在 GitHub README 上能渲染的 Markdown,在这里也能渲染。

表格

GFM 竖线短横线语法,支持对齐。

表格使用标准的竖线和短横线语法。表头行、每列以 --- 分隔的分隔行,然后是数据行。在分隔行的左端、右端或两端加冒号即可控制对齐::-- 左对齐,--: 右对齐,:-: 居中。跨页的长表格会在每个打印页自动重复表头。

任务列表

复选框语法,打印效果友好。

未完成任务写 - [ ],已完成任务写 - [x]。它们在预览中渲染为实际的复选框,在打印时呈现为填充或空心方块,纸面阅读也通顺。任务列表可嵌套在普通项目符号列表内,便于构建层级化的待办事项。

脚注

引用式注释,跨页依旧完整。

在正文中用 [^1] 标记脚注,在其他位置用 [^1]: 注释正文 定义内容。脚注会被汇总在文档末尾,并带有指回引用位置的反向链接。脚注区使用更小的字号并有独立样式,符合纸质论文的惯例。

代码高亮

通过 highlight.js 支持 190 多种语言,可自动识别。

围栏代码块会自动高亮。在开头反引号后写明语言(```python、```typescript、```rust)可获得准确解析,省略时 highlight.js 会从内容中自动判断。单反引号的行内代码会获得一层淡淡的等宽字体背景。代码块会被格式化以避免在打印时从中间断页。

数学公式 (KaTeX)

行内与块级公式,达到印刷级排版质量。

行内公式使用单个美元符号($E = mc^2$)。块级公式使用独占一行的双美元符号。mdprint 通过 KaTeX 进行渲染,速度比 MathJax 快,输出为印刷级质量,导出 PDF 后仍然锐利清晰。支持所有标准 LaTeX 数学命令:分数、积分、求和、矩阵、希腊字母,以及完整的 AMS-math 符号集。

在编辑器里试试 →

Mermaid 图表

流程图、时序图、甘特图、类图、状态图。

在围栏代码块上写 mermaid 语言标识,mdprint 就会把它渲染为清晰的 SVG。graph LR 或 graph TD 的流程图、参与者之间的时序图、带日期的甘特图、含关系的类图、状态机 - Mermaid 支持的所有图表类型都可用。SVG 渲染意味着无论打印分辨率多高,图都依然锐利。

自动目录

根据标题结构生成。

在文档任意位置插入 ${toc}(或 [[toc]]),即可根据其后的 H2 与 H3 标题自动生成目录。在预览中是一组链接,在打印后的 PDF 中是嵌套大纲。适合读者需要跳转到特定章节的长文档。

为打印优化的样式

分页、重复表头、清爽排版。

打印样式表是专门为此设计的。代码块、表格和图表中间不会断页。每个打印页顶端都会重复表格表头。页面本身遵循你的设置 - A4 或 Letter,纵向或横向,常规/窄/宽页边距。界面元素被隐藏:没有工具栏,没有编辑器,只有渲染后的文档。

深色编辑器

默认浅色,需要时切换到深色。

落地页保持浅色,因为长文阅读在白底上更轻松。编辑器最常在夜间使用,因此它有一个独立于页面主题的浅/深切换。你的偏好会保存在本地。

文件导入

拖放或按钮。支持 .md、.markdown、.txt。

把 Markdown 文件拖到编辑器任意位置,mdprint 会载入它。「导入」按钮通过文件选择器实现相同功能。文件通过浏览器的 FileReader API 读取 - 不会上传任何东西。若你的文档不以 H1 开头,文件名会作为 PDF 文件名的建议。

多语言界面

18 种语言,支持 RTL,包含 CJK 字体。

界面翻译为 18 种语言:英语、荷兰语、法语、德语、西班牙语、葡萄牙语、简体中文、繁体中文、俄语、阿拉伯语、越南语、日语、韩语、意大利语、泰语、印尼语、土耳其语和印地语。阿拉伯语会切换为从右到左的布局。CJK 与印度语系脚本均有合适的备用字体,确保在各种设备上都能正确显示。

如何使用 mdprint

一份实用指南。可从头读到尾,也可直接跳到需要的章节。

开始使用

试用 mdprint 最快的方式就是在首页的编辑器里开始输入。它会载入一份覆盖所有功能的示例文档 - 表格、代码、数学、图表 - 让你立刻看到成品页面的样子。删掉示例,输入你自己的内容,或者从写作的地方粘贴过来。

如果你电脑上已经有一份 Markdown 文件,可以用两种方式载入。第一种是从文件管理器里把它拖到编辑器面板上。拖动过程中会出现高亮的放置区域,松开后编辑器就会被它的内容填满。第二种是点击工具栏上的「导入」按钮,从文件选择器中挑选文件。两种方式都在本地读取文件 - 不会上传任何内容。

mdprint 接受 .md、.markdown 和 .txt 文件。.txt 后缀适用于以 Markdown 写就、却被其他工具保存为通用后缀的文档。若你尝试导入其他后缀的文件,mdprint 会显示错误并保留当前内容不变。

编写 Markdown

如果你从未写过 Markdown,规则少到五分钟就能学会。你写的是纯文本,四个字符承担了大部分工作。行首的 # 表示标题 - 一个 # 是最大的标题,六个 ##### 是最小的(实际上 ###### 才是最小的)。围绕一个词放 * 或 _,单层是斜体,双层是加粗。行首的 - 或 * 表示项目符号。缩进两个空格表示将一个符号嵌套在另一个之下。

代码用反引号处理。在短语两侧各放一个反引号,会被格式化为 `inline code`。一行中只有三个反引号则开启一个代码块,再写三个反引号即可结束。如果在开头三个反引号后紧跟语言名(```python、```typescript、```sql),代码块就会按该语言进行高亮。没有语言提示时,高亮器会从内容中尝试推断,对常见语言通常都能识别。

链接和图片都使用方括号加圆括号。链接是 [可见文字](URL)。图片是同样的写法前面加上一个感叹号:![描述图片的替代文字](图片 URL)。打印为 PDF 时,指向可公开访问服务器的图片 URL 会被取回并嵌入。本地或需要认证的图片不会渲染 - 如有需要可以以 base64 数据 URL 的形式直接放入编辑器。

表格是 Markdown 里源代码看起来略繁琐、但渲染却很整洁的一项。一个表头行、一个由短横线组成的分隔行,以及一个或多个数据行,全部用竖线分隔。源里的列不必对齐 - 渲染器会处理间距。在分隔行短横线的一端或两端加冒号即可控制对齐::--- 左对齐,---: 右对齐,:---: 居中。

使用进阶功能

数学公式使用包裹在美元符号中的 TeX 语法。两端各一个美元符号是行内公式:$a^2 + b^2 = c^2$。独占一行的两个美元符号给你一个块级公式,居中且字号更大。所有常用的 LaTeX 数学命令 - \frac、\int、\sum、\sqrt、希腊字母、矩阵、AMS 符号集 - 都能使用,因为 mdprint 使用的是实现了相同语法的 KaTeX。

图表使用 Mermaid 语法,写在标记为 mermaid 的围栏代码块中。最简单的图是流程图:以 graph LR(从左到右)或 graph TD(从上到下)开头,然后写由箭头连接的节点。Mermaid 还支持时序图(展示参与者随时间的消息流)、甘特图(带依赖的项目时间线)、类图(对象关系)和状态图(状态机)。Mermaid 的官方文档中有每种类型的示例。

脚注让正文保持易读,同时附上详细的引用或旁注。在文中以 [^1] 标记脚注(数字可任意 - 输出时会重新编号)。在文档其他地方以 [^1]: 脚注内容 定义。mdprint 会在打印文档末尾汇总所有脚注,并加入反向链接,把每条脚注与正文中的引用位置关联起来。

如果文档很长,可在源中你希望出现目录的位置写入字面文本 [[toc]]。mdprint 会把它替换为一个嵌套链接列表,覆盖文档中所有 H2 和 H3。在打印后的 PDF 中,同一份目录会成为 PDF 阅读器可用的导航大纲。

自定义输出

从工具栏打开「设置」面板,可控制 PDF 的生成方式。页面大小有两种选项:A4(北美以外的标准)或 Letter(北美的标准)。方向在纵向与横向之间切换 - 横向适合含宽表格或宽图表的文档。页边距提供三种预设:「窄」为密集内容腾出更多可用区域,「常规」是惯用的折中,「宽」为打印副本上的手写注释留出空间。

编辑器有自己独立于页面其余部分的浅色和深色主题。工具栏上的切换按钮在二者之间切换。无论如何,预览和打印输出都保持浅色,因为浅色背景最适合在纸上打印。

如果你常用同一组选项,上次的选择会被本地保存,下次在同一浏览器打开 mdprint 时会自动应用。

打印 vs 下载 PDF

「打印」按钮会打开浏览器原生的打印对话框。从那里,每个现代操作系统都提供「另存为 PDF」作为目标 - Chrome、Firefox、Safari 和 Edge 在 macOS、Windows 和 Linux 上都支持。通过打印对话框走,你能获得最多的控制权:可以选择任何打印机、预览每一页、按页更改方向(如果驱动支持),某些打印机上甚至可以切换纸盒或装订方式。

「下载 PDF」按钮跳过打印对话框,直接在浏览器中生成 PDF 文件并触发下载。它使用你当前的「设置」(页面大小、方向、页边距)来格式化输出。当你确切知道想要什么,又不需要打印对话框的灵活性时,这条路径更快。它的原理是把页面渲染成一张高分辨率图片,再把这张图片放进 PDF,因此结果始终与你在屏幕上看到的一致。代价是:由于页面变成了图片,这份 PDF 里的文字无法选择、也无法搜索。

两条路径的区别在于最终文件里装的是什么。通过「打印」按钮的「另存为 PDF」把文字保留为文字:可选择、可搜索,在任意缩放下都清晰,图表也保持为矢量。而「下载 PDF」则是一键生成的图片快照,因此快速且像素级精确,但其中的文字无法选择。当你想要可选择的文字,或在任意缩放下最清晰的效果时,用「另存为 PDF」;当你只想快速得到屏幕内容的精确副本、又不想打开打印对话框时,用「下载 PDF」。

故障排查

分页出现在尴尬位置。mdprint 不会在代码块、表格和图表中间断页,但不会对普通段落做猜测。如果一个标题落在某页底部、而正文出现在下一页,最简单的修复是在前后增添几句来把标题推到合适位置。V1 没有手动分页符语法 - 这已列入 V2。

PDF 中不显示图片。最常见的原因是图片 URL 指向你的本地文件系统(file://),或指向不允许跨域访问的服务器。要么将图片以数据 URL 直接嵌入 Markdown 源,要么上传到允许公开读取的图床。Imgur、GitHub 的用户内容服务器和大多数 CDN 都可以。

公式不渲染。检查源中正文里未转义的美元符号 - 一个孤立的 $ 可能开启一个吞掉整段的数学区段。如果正文中需要字面美元符号,请转义:\$。如果语法正确但仍不渲染,那条 LaTeX 命令可能不在 KaTeX 的支持列表中 - KaTeX 文档有完整参考。

图表一片空白。Mermaid 对语法非常严格。最常见的错误是 graph LR 后面少了一个空格、节点 ID 里有空格(改用驼峰或下划线)、或箭头指向了未定义的节点。打开浏览器的开发者控制台 - 解析失败时 Mermaid 会输出具体的错误信息。

表格换行奇怪。如果表格比页面宽,mdprint 会缩放以适应。对于非常宽的表格,可以在「设置」中切换为横向,或把表格重构为列表。PDF 不像网页那样处理水平滚动。

技巧与提示

用好键盘快捷键。Cmd+P(Windows 与 Linux 上是 Ctrl+P)打开打印对话框。Cmd+S(Ctrl+S)触发「下载 PDF」。浏览器自身的快捷键,查找(Cmd+F)、刷新(Cmd+R)、缩放(Cmd+加号/减号)都照常工作 - 不会与 mdprint 冲突。

每篇文档都以 H1 开头。首个 H1 会作为建议的 PDF 文件名、可访问性所需的文档标题,以及打印页顶部最显眼的标题。如果你以 H2 或更低层级开头,文件名会回退为「document.pdf」,需要在下载后手动重命名。

对隐私敏感时把图片嵌入为数据 URL。如果你不希望 PDF 阅读器在打开文件时从远程服务器拉取图片,把图片转换为 base64 数据 URL 直接嵌入。多数操作系统都有内置或专用的转换工具。最终文件会更大,但完全自包含。

用任务列表打印清单。如果你要做一份纸质清单 - 装箱清单、出货清单、分步流程 - 就用 - [ ] 这样的 Markdown 任务列表语法。打印出来是可以用笔勾选的方框。

在技术文档里把 mermaid 和代码结合起来。常见做法是先展示一个流程图,再展示实现这一流程的实际代码。Markdown 让你在同一份文件里两者兼备,mdprint 会把它们渲染得在纸面上并列整洁。

键盘快捷键

Cmd+P 或 Ctrl+P - 打开打印对话框。

Cmd+S 或 Ctrl+S - 下载为 PDF。

编辑器中按 Cmd+B 或 Ctrl+B - 将所选文本加粗。

编辑器中按 Cmd+I 或 Ctrl+I - 将所选文本设为斜体。

编辑器中按 Cmd+/ 或 Ctrl+/ - 为当前行切换注释(Markdown 上下文中为 HTML 注释)。

全屏状态下编辑器内按 Esc - 退出全屏。

了解更多关于 Markdown 和打印的知识

什么是 Markdown?

Markdown 是 John Gruber 于 2004 年创造的一种轻量级纯文本排版语法。你按所想去写 - # 表示标题,** 表示加粗,- 表示项目符号 - 渲染器会把它变成干净的 HTML、PDF 或打印输出。它成为 GitHub、Reddit、Discord 以及大多数现代开发者工具的默认写作格式,原因在于它去除了排版带来的心智负担:你只管打字,结构自然浮现。

GitHub Flavored Markdown (GFM) 在原始规范之上扩展了表格、任务列表、围栏代码块、自动链接和删除线。如今大多数工具都实现了 GFM,再加上若干常见扩展:脚注、通过 KaTeX 的数学公式、通过 Mermaid 的图表,以及定义列表。mdprint 开箱即用地支持全部这些。

与在文字处理软件中写作相比,Markdown 在打印场景下有两项关键优势。第一,源文件是你拥有的纯文本 - 没有专有格式,没有厂商锁定,在不同电脑上打开也不会突然重排。第二,同一份源每次都能产出一致的输出:相同的标题用相同的样式,相同的代码块用相同的等宽字体,相同的表格用相同的边框。这种一致性正是你在打印笔记、文档、论文或报告时所需要的。

如何把 Markdown 转换为 PDF

常见的做法有三种。第一种是像 Pandoc 这样的命令行工具 - 功能强大,但需要安装、需要可用的 LaTeX 环境来实现严肃排版,还要经过不少试错才能把输出调到满意。第二种是在线转换器,但它们要求你把文件上传到你无法控制的服务器。这对于草稿尚可接受,但对任何涉及机密的内容都不合适,而且大多数会在第一页之后加水印或付费墙。

第三种就是 mdprint 的做法:所有处理都在浏览器中完成。你把 Markdown 粘贴或拖入编辑器,由 JavaScript 解析器转换为 HTML,浏览器再以面向打印的 CSS 渲染,然后你要么调用原生打印对话框(每个现代操作系统都支持「另存为 PDF」),要么用客户端库直接生成 PDF。不上传,不经过服务器,无需等待。

倾向于在浏览器内完成的三个理由。第一,隐私:涉及录用决定、纳税申报或合同草稿的文档,不应仅仅为了变成 PDF 就经过别人的服务器。第二,速度:页面加载完成后,转换是即时的,你可以快速迭代 - 改一个标题,点击打印,再改一次。第三,离线:mdprint 加载过一次后,你就可以在飞机上或公司防火墙后照常使用。

Markdown 语法速查

标题:# H1、## H2、### H3,直至 ###### H6。每篇文档只使用一个 H1 - 它会成为打印输出的标题,也会作为 PDF 下载时的建议文件名。

强调:*斜体* 或 _斜体_,**加粗** 或 __加粗__,~~删除线~~。如有必要可组合为 **_粗斜体_**。

列表:无序列表用 -、* 或 +;有序列表用 1.、2.、3.(数字不必连续 - Markdown 会自动重新编号)。缩进两个或四个空格表示嵌套。任务列表使用 - [ ] 表示未完成,- [x] 表示已完成。

链接与图片:[文字](https://example.com) 是链接,![替代文字](image.jpg) 是图片。引用式链接用 [文字][id],并在另一行写 [id]: https://example.com,可让正文更易读。

代码:行内用反引号包裹 `code`,三个反引号加可选语言标识表示代码块。在开头三个反引号后写明语言(```python、```typescript),高亮器会选用正确的语法。

表格:竖线和短横线语法。一行写 | 列 | 列 |,下一行写 |---|---|,然后是数据行。对齐标记(:--、--:、:-:)用于控制列在打印输出中的对齐方式。

数学:行内用 $E = mc^2$,块级用 $$ \int_0^\infty e^{-x} dx = 1 $$。mdprint 使用 KaTeX,渲染快、打印清晰。

图表:带有 mermaid 语言标识的围栏代码块会被渲染为 SVG 图。流程图、时序图、甘特图、状态机、类图 - 全部支持。

为什么本地处理重要

每当文档离开你的设备一次,就增加一份你无法完全审计的风险。接收端服务器可能记录请求体。边缘的 TLS 代理可能缓存。上传页面上的第三方分析脚本可能抓取文件名。错误监控服务可能捕获包含内容片段的堆栈跟踪。多数时候这些都不会发生 - 但你无法预知哪次会出问题,事后也无法挽回。

本地处理消除了整类故障。mdprint 只需下载一次它所需要的 JavaScript,然后在浏览器沙箱内运行一切:Markdown 解析器、语法高亮、数学渲染、图表渲染和 PDF 生成。你的文件永远不会传输。我们没有任何能看到它的服务器 - 即便我们想看也看不到。

这种隐私保障是结构性的,而非口头承诺。没有可能被错误配置的上传端点,没有可能意外保留草稿的数据库,也没有可能被社会工程攻击诱导查看文件的客服。永远不会泄露的东西,是从一开始就没有被发送出去的东西。

mdprint 与其他工具的对比

如果你能熟练使用命令行,并且要产出科研或书籍级别的文档,Pandoc 是文档转换的黄金标准。对于一位要交付 300 页带自定义 LaTeX 模板手稿的作者来说,它是合适的工具。但用来打印一份会议笔记或项目 README,就显得过度。

Typora 和 Obsidian 都是优秀的 Markdown 编辑器,自带 PDF 导出。如果 Markdown 是你日常写作的主要载体,值得安装。mdprint 面向的是另一种场景:你有一份文件需要打印或分享一次,又不想为此安装任何东西。

把 Markdown 转 PDF 的浏览器扩展,通常通过把内容发送到远程服务来实现。这又把 mdprint 想要避免的隐私问题带了回来。如果你确实需要在别人的机器上完成转换,那就不需要 mdprint - 你需要的是一个托管服务。如果你不需要那种服务,就不需要它。

Google Docs、Microsoft Word 和 Pages 能打开 Markdown,但渲染不一致,也不保留源。PDF 输出尚可,但每次打开文件你都会被重新拉回到专有编辑器里。mdprint 始终把你的源保持为纯文本。你的文件永远可移植。

FAQ

常见问题

如果这里没有你的问题,请发邮件到 anton@fokuus.be。

是的。完全免费,无需注册,没有付费墙,也没有广告。由 Fokuus 作为公共工具构建并维护。

关于 mdprint

mdprint 是一个免费、隐私优先的 Markdown 转 PDF 工具。它完全在你的浏览器中运行 - 不上传,不开户,也不追踪内容。

为什么会有这个工具

大多数在线 Markdown 转 PDF 工具的做法是把你的文件上传到服务器。对于公开的 README 来说这是合理的取舍,对于合同草稿、税务文件或任何工作中的文件则完全行不通。mdprint 是那些转换器的一个版本,把所有处理都放在本地,让这个取舍消失。

由谁打造

Fokuus 是一家位于比利时的小型网页工作室。mdprint 由 Anton Pycarelle 作为公共工具构建 - 一个我们自己想要的工具,免费提供出来。联系方式:anton@fokuus.be。

怎样保持免费

V1 没有广告、没有追加销售、没有付费层级。托管几乎免费(部署在 Netlify 上的静态文件),因此没有什么成本要回收。今后若加入付费功能也会是附加的 - 核心工具始终免费。

路线图

V1 覆盖了 18 种语言下完整的 Markdown 转 PDF 流程。V2 计划包括 HTML 导出、DOCX 导出、模板库和自定义主题编辑器。开源也在 V2 名单上。

打开编辑器

无需账户,无需安装,无需上传。向上滚动,开始输入。

mdprint