优化文档结构减小PDF文件体积
先说清楚预期:这不是那种把图片降采样、能把 20 MB 的扫描件压到 2 MB 的压缩器。它的做法只有一步——用 pdf-lib 读入 PDF,再用「对象流」(useObjectStreams)方式重新保存,把零散的内部对象打包存放。所以它对由旧式工具生成、结构松散的文字型 PDF 有可能省出体积,对体积主要来自图片的文件基本没用。页面会在处理后并排显示原始大小、压缩后大小和变化比例,让你自己判断值不值得下载。
为了不凭空下结论,我用 pdf-lib 自己生成了两个样本,按本工具相同的方式重存。一个是 30 页纯文字 PDF(生成时关闭了对象流),从 63,283 字节变成 31,639 字节,大约少了一半;再对结果重存一次,大小不变。另一个是只含一张 600×600 随机噪点 PNG 的单页 PDF,从 1,081,646 字节变成 1,081,289 字节,几乎没变化。要注意第一个样本是在最有利的条件下做的:现代软件导出的 PDF 很多已经用了对象流,你的文件可能收益小得多,甚至完全没有。这两个数字只说明机制,不代表你的文件。
不是。它说明这个文件的结构本来就已经紧凑,或者体积几乎都是图片数据,单靠重新打包对象帮不了忙。保留原文件即可。
需要降低图片分辨率或提高图片压缩率,这是本工具没有的功能。可以先重新扫描时选更低的 DPI,或用专门的图片压缩工具处理图片后重新生成 PDF。
页面内容本身不会被改写,只是重新写入文件结构,所以外观应当保持一致。不过建议在发出去之前打开结果快速翻看一遍。
文件越大占用内存越多,浏览器可能卡住。可以关闭其他标签页后重试,或先用 PDF 分割拆成几份再处理。
代码里没有上传请求:读取、重存和生成下载都在你的浏览器里用 pdf-lib 完成,文件不会发往任何服务器。进入页面时只会载入站点自带的 pdf-lib 程序文件,不下载模型。