将普通 PDF 的每一页渲染为图片,再重新组装成新的 PDF。输出的 PDF 看起来和原件一样,但文字已变成图片,无法选中、复制或搜索。同时由于采用 JPEG 压缩,输出文件通常比原件更小。
适用场景:
- 📑 发送合同/报价单等敏感文档,防止内容被直接复制
- 🔒 提交不希望被文字提取的文件
- 📦 压缩体积过大的 PDF(通过调节 DPI 和 JPEG 质量控制输出大小)
PicPDF 没有后端服务器。 整个转换过程 100% 在你的浏览器中完成:
你的 PDF 文件
↓ (读取到浏览器内存)
浏览器用 pdf.js 将每页渲染为图片
↓
浏览器用 jsPDF 将图片组装为新 PDF
↓
你下载新文件
| 说明 | |
|---|---|
| ❌ | 文件不会上传到任何服务器 |
| ❌ | 没有后端 API、没有数据库、没有日志 |
| ❌ | 网站本身不存储任何数据(无 Cookie、无 localStorage) |
| ✅ | 断网后依然可以使用(仅首次加载需要网络) |
💡 你可以打开浏览器的开发者工具(Network 标签页),观察整个转换过程中没有任何网络请求离开你的设备。
这是一个纯静态网站,只有 4 个文件:
| 文件 | 作用 |
|---|---|
index.html |
页面结构 |
style.css |
样式(暗色主题、响应式布局) |
app.js |
核心逻辑(~250 行) |
favicon.svg |
图标 |
- 用户选择 PDF 文件(支持多文件)
FileReader读取文件为ArrayBufferpdf.js解析 PDF,逐页渲染到<canvas>(按用户选择的 DPI 缩放)canvas.toDataURL('image/jpeg', quality)将每页导出为 JPEGjsPDF创建新 PDF,将 JPEG 图片逐页写入pdf.output('blob')生成最终文件,通过<a download>触发下载
| 参数 | 范围 | 说明 |
|---|---|---|
| DPI | 150 / 200 / 300 | 控制渲染分辨率,DPI 越高清晰度越好但文件越大 |
| JPEG 质量 | 50%–100% | 控制图片压缩程度 |
# 任意 HTTP 服务器均可
npx serve .
# 或
python3 -m http.server 8080
⚠️ 不能直接用file://协议打开,pdf.js 的 Worker 需要 HTTP 环境。
项目是纯静态文件,可部署到任意静态托管:
- Vercel: 导入 GitHub 仓库,零配置部署
- GitHub Pages / Netlify / Cloudflare Pages: 同理