起因是每次要给客户发合同,都得先找个在线工具压一下体积,压完就开始担心这份文件在别人服务器上留多久。干脆自己写了一个,把能在本地做完的全部放本地。
- 合并 / 拆分 / 压缩 / PDF ↔ 图片:pdf-lib + pdfjs-dist ,浏览器里完成,不上传
- Word 互转 / 加解密:这两个必须服务端(排版引擎和加密库跑不了 WASM 版本),处理完即时删除
技术栈 FastAPI + React 。SSR 只用来注入 head 和正文(为了 SEO ),工具逻辑全在前端。
几个实际踩到的坑:
- pdf-lib 的 copyPages 会丢 AcroForm 表单域 —— 字段定义在文档级的 /AcroForm 里,不在页面上,复制过来的是死框
- pdfjs 的 worker 必须同源 —— 指向 CDN 会被浏览器拒绝,静默退化成主线程解析,大文件直接假死
- 「压缩」本质是重采样图片 —— 纯文字 PDF 的体积在嵌入字体上,怎么调质量参数都压不动
- iOS Safari 没有 showSaveFilePicker —— 而且 blob URL 不及时 revoke 会把内存吃光,Safari 会通过杀你的标签页来回收
完整的 7 条踩坑记录(带代码)写在这儿了: https://juejin.cn/post/7701924631909089280
站点: https://pdf.iceai.cloud 无广告无水印,也不打算收费。有想加的工具可以说。