- 江子昨天
去年帮朋友处理一份租房合同,需要把三份扫描件合成一个 PDF 。随手搜了个在线工具,
传上去、合并、下载,很顺。但传完那一刻我盯着进度条想了一下:这是一份带身份证号和
签字的合同,我刚刚把它完整交给了某个不知道在哪儿的服务器,而对方的隐私政策写着
「文件将在 2 小时后自动删除」。这句话无法验证。删没删、有没有留副本、会不会进训练集,全靠对方自觉。
后来发现这类需求其实很固定,绕来绕去就是五件事:合并、拆分、压缩、PDF 转图片、
图片转 PDF 。而这五件事在技术上根本不需要服务器——pdf-lib 负责写 PDF ,pdf.js
负责渲染,浏览器里就能做完。于是做了 pdf.iceai.cloud 。核心就一条:以上五件事全程在本地跑,文件不上传。
怎么验证它不是嘴上说说
不用信我。打开页面等加载完,然后把 WiFi 关掉,再点合并。能出结果就是本地跑的,
这条没法作弊。这个自证方式比任何说明文字都有用,所以我在首页直接写了「断网也能用」。
哪些必须走服务端
PDF 和 Word 互转。这个真的做不到纯前端——Word 的版式引擎、分页、字体嵌入,
浏览器里没有能对齐 Word 输出的实现,硬做出来会是「能转,但排版全废」。
所以这部分是老老实实上传,处理完立刻删文件,不留副本。我宁愿在页面上把这件事说清楚,也不想假装全站都是纯本地。用户被骗一次就不会再来。
几个实现上的坑,写下来给同样想做的人
压缩压不动的真相:很多人抱怨「压缩没效果」,十次有八次是文件类型不对。
扫描件本质是一堆 JPEG ,降分辨率重编码,压掉 60%–85% 很正常; Word 导出的文字 PDF
体积全在嵌入字体里,里面根本没几张图,怎么调都只有个位数百分比。
这时候正确解法是拆分,不是加大压缩力度。首页把这条写成了提示,省了不少解释。大文件的内存:纯前端处理意味着文件整个进内存。几百兆的扫描件在低配机器上会崩。
所以做了大小提示和分块读取,而不是假装没有上限。字体嵌入:中文 PDF 合并时如果字体没正确保留,结果是页面空白。
pdf-lib 默认不处理这个,得手动把 font 数据带去新文档。现在是什么状态
免费,不用注册,无广告,不给文件加水印(有些站导出时会盖一个,挺膈应人的)。
另外写了三十来篇长尾场景的说明,比如「扫描件怎么压到 1MB 以内」
「为什么你的 PDF 拆分后打不开」,主站 https://pdf.iceai.cloud ,另外三十来篇长尾场景写法在 /guides 里。服务器在香港,速度还行,但大陆偶尔会慢一点,遇到慢的刷新一次。
有 bug 或者想要的功能可以直接回帖说,我基本每天都会看。
主楼 - 暂无回复