一个在浏览器本地运行的 PDF 页码整理工具。适合从一本 PDF 书中抽取章节、删除无关页,或整理双页扫描件。
PDF 文件不会上传到服务器:读取、处理和下载都在你的浏览器中完成。
- 提取页面:按页码生成新的 PDF,例如
1, 3-5, 8。 - 删除页面:移除指定页,保留其余页面。
- 页面缩略图:看着页面点击选择,并可按住 Shift 连续选择;选择结果与页码输入框同步。
- 页面排序:拖拽缩略图调整页面顺序,或一键将整份 PDF 倒序。
- 无损旋转:将指定页面旋转 90°、180° 或 270°,保留原有文字层和页面内容。
- 密码打开与保护:输入你已知的打开密码来处理加密 PDF,或为生成的新副本添加打开密码。
- 扫描页优化:逐页自动识别并裁掉白边,可调整保留边距、亮度、对比度和灰度;未选页面原样保留。
- 解除使用限制:对能正常打开、但禁止编辑、提取或打印的 PDF,生成一份不保留这些使用限制的副本。
- 切开双页扫描:指定哪些阅读器页面需要切开,自定义切割线位置和左右顺序;未选页面会原样保留,可用于单页封面。
- 校正轻微倾斜:在切开双页前,以
0.1°为单位微调旋转角度,让影印文字更接近水平。
- 将一个 PDF 拖入页面,或点击“选择 PDF 文件”。
- 选择一种操作。
- 按提示完成设置,点击生成按钮;新文件会直接下载。
填写的是 PDF 阅读器中的页面序号,不是印刷在书页上的页码。
支持单页与连续范围,用英文逗号分隔:
1, 3-5, 8
上例表示第 1、3、4、5、8 个 PDF 页面。
这一项面向“能打开,但阅读器显示不允许复制、编辑或打印”的权限限制 PDF。它会在本地生成完整的新副本。
它不会猜测、破解或绕过未知的打开密码。如果你知道并有权使用打开密码,可在文件载入失败后的密码框中输入;密码仅在本机内存中交给 QPDF 使用,不会保存或上传。
选择“添加密码保护”,连续输入两次相同密码,即可生成需要该密码才能打开的新副本。工具会随机生成独立的所有者密码;用户输入的密码不会保存,忘记后本工具无法找回,请妥善记录。
适用于一张横向 PDF 页面中并排放着左右两页书的情况。
- 选择“切开双页扫描”。
- 选择要切开的阅读器页面。单页封面不要选择,它会原样保留。
- 调整切割线位置,并选择“先左后右”或“先右后左”。
- 如果文字整体倾斜,使用“校正文字倾斜”的滑杆或
−/+按钮微调。文字向左歪就向右调,反之亦然。
切开和校正需要先将页面渲染为图像,因此输出是图像型 PDF:原文件的可搜索文字层、链接、书签和表单不会保留。处理前请保留原文件。
选择“优化扫描页”,再选择需要处理的阅读器页面。自动裁剪会逐页寻找非白色内容边界,“保留边距”用于避免裁得太紧;亮度、对比度和灰度化可改善泛黄、偏暗或层次不足的影印页。
被优化的页面会转为图像型页面,未选页面仍保留原始 PDF 内容。自动识别可能受深色纸张、页边批注或污点影响,请先用少量页面试验合适参数,并保留原文件。
无需安装任何 PDF 工具。使用现代桌面浏览器打开网站即可;PDF 会在浏览器中本地处理。
需要先安装:
- Node.js 20 或更高版本(自带 npm)
- Git(仅在从源码克隆项目时需要)
不需要单独安装 QPDF、Poppler、Python 或 Adobe Acrobat:
- QPDF 以 WebAssembly 形式随
qpdf-run安装,用于本地解除 PDF 使用限制。 - PDF.js 随 npm 依赖安装,用于渲染、切开双页和校正倾斜。
安装项目依赖:
npm installnpm run dev终端会显示本地访问地址,通常是 http://127.0.0.1:5173。
构建静态发布文件:
npm run build构建结果位于 dist/,可部署到任意静态网站托管服务。
- pdf-lib:提取、删除与重新生成 PDF。
- QPDF WebAssembly:在浏览器内处理 PDF 使用限制。
- PDF.js + Canvas:渲染、旋转校正并切开双页扫描。
- Vite:本地开发与静态构建。
PDF 数据不会发送到本项目的后端,因为项目没有后端。页面会加载第三方字体资源;若你需要完全离线使用,可将 src/style.css 中的 Google Fonts 导入移除或替换为本地字体。
- 请只处理你拥有、获授权使用或依法可以处理的文件。
- 大型扫描书会占用较多内存,双页切开尤其如此;建议一次处理一本书,并在完成后关闭标签页以释放内存。
- 倾斜校正目前是对整份双页扫描应用同一个角度;如果各页倾斜方向不一致,需要分批处理。
- “解除使用限制”针对的是 PDF 的使用权限标志,不等同于支持未知打开密码或其他 DRM 方案。
npm run build
node scripts/create-test-pdf.mjs测试脚本会在 tmp/pdfs/ 生成基础 PDF 和双页扫描测试文件。tmp/ 是本地临时目录,不纳入版本控制。