资源中心

ChatGPT 和 Gemini 对话记录导出 PDF 体积失控?一套实用的瘦身思路

先说个场景,你们应该都遇到过。

周五下午,你刚跟 ChatGPT / Gemini 磕完一个技术方案,前后折腾了二十几轮,觉得自己收获巨大,得赶紧沉淀下来。于是很自然:右键 → 打印 → 另存为 PDF。嗯,很丝滑。

然后你一看文件大小:47.3 MB。

你愣了一下,又看了一眼页数:才三十多页啊??

发给同事,微信直接给你弹「文件过大」;传到知识库,提示「单个文件不超过 20MB」;邮件附件就更别想了。你心里那个感觉,怎么说呢,就像辛辛苦苦写完一份报告,结果发现装订用的是实心铁块。

这事儿真不是你运气不好。它是必然会发生的,只要你用的是浏览器「打印」这条路径。

一、先搞明白:肥的不是内容,是渲染方式

很多人第一反应是「是不是我聊太长了」。嗯,有关系,但不是主因。

你以为你导出的是一份「文档」,浏览器可不这么想。在它眼里,它干的事是:把一个结构极其复杂的 SPA 网页,按这一刻屏幕上的样子,原封不动冻成一张张静态页。

聊天界面那个 DOM 树有多深,你们打开 DevTools 瞅一眼就懂了,div 套 div 套 div,七八层起步。再加上这些玩意儿:

  • 圆角气泡、渐变背景、message 卡片阴影
  • 深色模式下的半透明蒙层
  • 代码块的灰底 + 高亮 span,一层套一层
  • 头像、点赞图标、复制按钮、SVG 小 logo
  • 你根本没注意但它一直在页面里的各种 UI 装饰

这些在屏幕上只是「样式」,可一旦进了 PDF,它们就得被实实在在地画出来。矢量路径也罢、重复的背景块也罢,全给你焊死在每一页里。几十页下来,体积不炸才怪。

字体,才是真正的隐形杀手

这点我踩过坑,印象特别深。

中文字体跟英文字体完全不是一个量级。浏览器为了「你在谁电脑上打开都别乱码」,会把用到的字形塞进 PDF 里。一个 CJK 子集下来,几 MB 就没了。更坑的是聊天页面经常是混排:中文正文一套、英文一套、代码等宽字体再来一套,UI 还有自己的 font-family 兜底。好嘛,几套子集全部嵌入,直接起飞。

有个很直观的判断办法:你在 PDF 里能不能选中并复制文字?能选,说明是文本型 PDF,还有得救;选出来是一整块图片,那基本是截图式渲染,后面想压都压不动。

所以结论很简单:同样三十页,你导一份闲聊记录可能就几 MB,导一份满是代码和表格的技术方案,轻轻松松大 5~10 倍。不是你写得多,是浏览器「画」得太认真。

二、别再直接打印网页了,换个思路

核心就一句话:别让网页样式跟着内容一起进去。先把内容扒干净,再重新排版生成 PDF。

听着有点抽象,其实就是三步,我日常就这么干的。

第一步:只留「话」,不要「壳」

把对话捞出来,变成纯的 Markdown:

## Q:xxx 的超时怎么排查

1. 先看连接池配置...
2. 再看 DNS 解析耗时...

```go
ctx, cancel := context.WithTimeout(ctx, 3*time.Second)
defer cancel()
```

砍掉什么?CSS、气泡、头像、图标、那些花里胡哨的背景和十几层 DOM。只留标题、段落、列表、代码块、表格。这一步做完,你会发现光「内容提纯」就能干掉七八成的体积。说降 80% 真不夸张。

怎么捞?几条路子:

  • 手动复制粘贴(短对话,最省事,就是容易漏行)
  • 浏览器插件,专门抓 ChatGPT / Gemini 对话结构的那种,能勾选要哪几条消息
  • 走官方数据导出(ChatGPT 是 Settings → Data Controls → Export Data,Gemini 走 Google Takeout),拿到的是 JSON,干净得像刚洗过

第二步:用「文档引擎」生成,别用浏览器打印

这是关键的分水岭。

路子产物类型体积感受
浏览器打印网页网页渲染型肥大啥都在,但沉
Markdown 引擎导出文本型 PDF轻干净,可选中搜索

工具嘛,按自己口味来:

  • 不想碰命令行的:Typora 直接导出 PDF;Obsidian 装个 Markdown PDF 插件,还能挂自己的 CSS;VS Code 里也有现成插件,点一下完事。
  • 愿意敲两行命令的,Pandoc 是真香:
# WeasyPrint 路径,轻量,中文友好
pandoc chat.md -o chat.pdf --pdf-engine=weasyprint \
  --css=print.css

# 要学术范儿、目录页眉页脚齐全,上 XeLaTeX
pandoc chat.md -o chat.pdf --pdf-engine=xelatex \
  -V CJKmainfont="Noto Sans CJK SC" \
  -V geometry:margin=2cm

第一个命令里的 WeasyPrint 是纯 Python 的 CSS 渲染引擎,pip install weasyprint 就能跑,不跟你要那 2GB 的 TeX Live。第二个走 XeLaTeX,中文得指定 CJKmainfont,不然出来一堆方块,别问我怎么知道的。

第三步:把字体和样式管住

别小看这一步,属于「最后再挤一口」的操作:

  • 字体只留两套:一个中文(PingFang / 微软雅黑 / Noto Sans CJK SC 都行),一个等宽给代码,齐活。别让页面默认字体偷偷再塞一套进来
  • 代码块别搞大灰底 + 阴影,浅浅一个底色就够了。深色主题截图确实帅,但那玩意儿在 PDF 里基本是按图形画的,贵
  • 图片能不要就别带。真要带图,先压一遍再嵌

这几刀下来,原来 40 多 MB 的东西,压到两三 MB 是挺正常的事儿。我自己的记录是 52MB → 1.7MB,打开速度都不在一个宇宙。

三、几个容易翻车的点,提前说下

我拿在线压缩网站压了,怎么还是大还变糊了?

因为你压的方向错了。那种工具是把 PDF 当图片文档处理,文字直接栅格化,糊了体积还不一定下来。根源是它本来就不该那么生成。

代码高亮没了,白花花一片?

WeasyPrint + Pandoc 的组合,高亮得靠 CSS 自己上,pygments 那套得配一下。嫌麻烦就接受纯色底 + 等宽字,归档够用了。

我就是懒,不想折腾命令行。

理解,真的。那就用那种带「文本模式 / 压缩开关」的导出插件,导的时候就选文本型,别选截图型。省心 80%。

最后

说到底,这事儿的本质不是「PDF 压缩技术」,而是一个习惯问题:你到底是把聊天界面当文档存,还是把对话内容当知识存。

前者存的是「样子」,后者存的是「信息」。样子当然贵,信息其实轻得要命。

我现在固定流程就四步:捞对话 → 清成 md → 引擎出 PDF → 原版 md 顺手丢进知识库。就比直接打印多那么一步,但那种「发个文件秒传、全文还能搜」的爽感,试过就回不去了。

如果你手头那个几十 MB 的 PDF 已经生出来了、懒得重新导一遍,也可以先救个急:用 FreeConvertBox 的PDF 压缩在浏览器里直接瘦身,即开即用不留存,隐私安全有保障;需要再编辑的话,PDF 转 Word可以把它变回可改的文档。

行了,去把你那个 60MB 的 pdf 瘦个身吧。

顺带一句:上面那套思路对 Claude、DeepSeek 的对话导出一样管用,原理都一样,谁让它们也都是网页呢。

说明:部分素材由 AI 辅助生成。


免费转换器工具箱 PDF 压缩、图片格式转换