piapia123
zh

文档转 PDF(Markdown / 纯文本)

文档

所有处理都在浏览器本地完成,数据不上传服务器

文档内容
排版
结果
页数
–
文件大小
–

全程在浏览器里排版与生成,文档不上传。产物的文字**不可选中** —— 它由浏览器渲染成图片再装进 PDF(中文才不需要额外下载几 MB 的字体)。需要可选中、可搜索的文字,请用浏览器自带的「打印 → 另存为 PDF」。

把一段 Markdown 或纯文本排成 PDF:标题分级、列表缩进、引用、围栏代码块、粗体斜体、自动分页、页码。有一件事必须先说清楚:产物的文字不可选中、不可搜索。原因是 PDF 里放中文文字必须嵌入 CJK 字体(最小的可用字体也有几 MB),而这是个「打开就能用」的静态站点 —— 为一个工具页下载几 MB 字体不划算。所以这里的做法是用浏览器自己的字体在 canvas 上排版,再把每页作为图片放进 PDF:中文、日文、emoji 全都正确,零额外资源,断网也能用。如果你要的是可选中、可搜索的 PDF,用浏览器自带的「打印 → 另存为 PDF」更好 —— 那一条路走的是浏览器自己的排版引擎,文字是真的文字。

功能

  • Markdown 排版:标题分级、列表(含嵌套缩进)、引用、围栏代码块、分隔线
  • 行内格式:粗体、斜体、行内代码
  • 中文自动换行与最常见的避头尾(标点不会被留在行首)
  • 自动分页,代码块整块不跨页(拦腰截断一段代码比多留一页难读得多)
  • 纸张可选 A4 / Letter,纵向或横向
  • 字号与页边距可调,可选是否解析 Markdown、是否显示页码
  • 关掉「解析 Markdown」时按纯文本原样排 —— 标记会原样出现在 PDF 里
  • 结果卡片报出页数与文件大小
  • 超过 10 万字符会明确拒绝,而不是把标签页卡住
  • 全部在浏览器本地完成,文档不上传

使用方法

  1. 把 Markdown 或纯文本粘进输入框
  2. 按需要调纸张、字号、页边距
  3. 点「生成 PDF」
  4. 点「下载 PDF」取走文件

常见问题

为什么 PDF 里的文字不能选中?
因为它是图片。PDF 里放文字需要嵌入字体,而中文、日文没有像西文那样的标准内置字体 —— 要放中文就得嵌一份 CJK 字体,最小的可用字体也有几 MB。对一个「打开就能用」的静态站点来说,为了一个工具页让浏览器下载几 MB 字体不划算。所以这里改用浏览器自己的字体在 canvas 上排版、再把每页作为图片放进 PDF:中文、日文、emoji 全都正确,零额外资源,断网也能用。代价就是文字不可选中、不可搜索,文件也比文字型 PDF 大。
需要可选中、可搜索的文字怎么办?
用浏览器自带的「打印 → 另存为 PDF」。把内容贴进任何能显示富文本的地方(Markdown 预览、网页、Word),按 Ctrl/Cmd + P,目标选「另存为 PDF」。那条路走的是浏览器自己的排版引擎,产出的文字是真的文字:可选中、可搜索、体积也小得多。这个工具存在的意义是在没有排版环境的地方把纯文本快速变成一份能发出去的 PDF。
支持哪些 Markdown 语法?
块级:`#` 到 `######` 标题、`-` 与 `1.` 列表(按缩进嵌套)、`>` 引用、三个反引号的围栏代码块、`---` 分隔线。行内:`粗体`、`*斜体*`、`` `行内代码` ``。刻意不支持的:表格、图片、脚注、HTML 片段 —— 它们要么需要真正的排版引擎(表格列宽),要么需要外部资源(图片)。不嵌套行内标记(粗体里再套斜体不会如你所愿),这与站内正文标记是同一条规矩。没解析出来的标记会原样出现在 PDF 里。
为什么中文换行看起来是对的?
两件事一起做才成立。一是先按空格切词、再对超长的「词」按字符切 —— 中文没有空格,一整段就是一个「词」,只按空格切的话整段会溢出一行。二是避头尾:落在行首的句号、逗号、顿号会被拽回上一行。完整的避头尾规则有几十条(还有标点挤压、行首行末禁则的组合),那属于排版引擎的范畴;这里做最常见的一层就够了 —— 做得少比做错好。
有长度上限吗?
超过 10 万 字符会直接拒绝并说明原因。排版与绘制都是同步的(逐行量宽、逐页画 canvas),几十万字符会把标签页卡住几十秒,而卡住的时候用户只会以为工具坏了。所以这里在开始之前就拒绝,并建议分成几份。另外体积主要取决于页数:每页是一张 2 倍分辨率的 PNG,一页大约一两百 KB。
文档会被上传吗?
不会。排版、绘制与组装 PDF 全在浏览器内存里完成,页面不发送任何请求,断网也能用。

相关工具