一个在浏览器本地运行的 PDF 页码整理工具。适合从一本 PDF 书中抽取章节、删除无关页,或整理双页扫描件。
PDF 文件不会上传到服务器:读取、处理和下载都在你的浏览器中完成。
- 提取页面:按页码生成新的 PDF,例如
1, 3-5, 8。 - 删除页面:移除指定页,保留其余页面。
- 无损旋转:将指定页面旋转 90°、180° 或 270°,保留原有文字层和页面内容。
- 密码打开与保护:输入你已知的打开密码来处理加密 PDF,或为生成的新副本添加打开密码。
- 扫描页优化:逐页自动识别并裁掉白边,可调整保留边距、亮度、对比度和灰度;未选页面原样保留。
- 按章节切割:优先读取 PDF 书签/目录,也可以手动输入章节起始页,生成多个章节 PDF 并打包成 ZIP。
- OCR 扫描目录:识别扫描版目录和正文页眉/页脚页码,建立印刷页码到 PDF 页码的映射后切割章节。
- 移除文字页眉页脚:优先匹配用户指定的文字,留空时推断重复文字;抽样预览、保留页码并生成文字型 PDF。
- 解除使用限制:对能正常打开、但禁止编辑、提取或打印的 PDF,生成一份不保留这些使用限制的副本。
- 切开双页扫描:指定哪些阅读器页面需要切开,自定义切割线位置和左右顺序;未选页面会原样保留,可用于单页封面。
- 校正轻微倾斜:在切开双页前,以
0.1°为单位微调旋转角度,让影印文字更接近水平。
- 将一个 PDF 拖入页面,或点击“选择 PDF 文件”。
- 选择一种操作。
- 按提示完成设置,点击生成按钮;新文件会直接下载。
填写的是 PDF 阅读器中的页面序号,不是印刷在书页上的页码。
支持单页与连续范围,用英文逗号分隔:
1, 3-5, 8
上例表示第 1、3、4、5、8 个 PDF 页面。
这一项面向“能打开,但阅读器显示不允许复制、编辑或打印”的权限限制 PDF。它会在本地生成完整的新副本。
它不会猜测、破解或绕过未知的打开密码。如果你知道并有权使用打开密码,可在文件载入失败后的密码框中输入;密码仅在本机内存中交给 QPDF 使用,不会保存或上传。
选择“添加密码保护”,连续输入两次相同密码,即可生成需要该密码才能打开的新副本。工具会随机生成独立的所有者密码;用户输入的密码不会保存,忘记后本工具无法找回,请妥善记录。
选择“按章节切割”后,工具会尝试读取 PDF 内置的书签目录。目录中能定位到阅读器页面的条目会显示为章节起始点;勾选需要保留的章节后,工具会按下一个章节起始页自动计算结束页。
如果 PDF 没有目录,切换到“手动切割点”,输入章节起始页,例如 1, 18, 42, 79。工具会自动补上第 1 页,并生成 1-17、18-41、42-78、79-末页 四个章节 PDF,最后打包为 ZIP 下载。这里的页码是 PDF 阅读器页码,不是印刷页码。
对于扫描版 PDF,可选择“ OCR 扫描目录”,输入目录所在的 PDF 阅读器页,例如 1-3。工具会先用中文 OCR 读取目录,再只裁剪每一页的页眉/页脚识别印刷页码,因此中间插入空白页不会被固定偏移量误判。识别结果会显示印刷页码和推断出的 PDF 起始页;可直接修改起始页后再切割。OCR 在浏览器中运行,首次使用需要加载 Tesseract.js 的 OCR 引擎和语言数据。
目录章节列表中的结束页默认是下一个已选章节起始页的前一页,也可以逐章改成更早的页码,以排除后置注释、图片或空白页。OCR 结果必须先点击“确认章节定位”,确认后才会启用分割。
- 选择“移除页眉页脚”。输入需要移除的文字,每行一条。匹配支持跨行、忽略空白和复制文本中的下划线转义、区分大小写;指定内容未找到时会提示,不会自动改用推断。
- 不填写文字时,根据页边位置和至少 3 个不同页面的重复内容推断,支持奇偶页和不同章节的页眉样式。可选择仅页眉、仅页脚或两者,并调整检查区域,默认顶部和底部各 12%。
- 点击“分析并抽样预览”。后台线程扫描整份文档,只渲染当前预览页;默认提供开头、中间、结尾约 6 个样本,并补充不同样式,最多 12 个快捷样本。每种匹配均可查看自己的样本,也可输入任意阅读器页码查看。
- 红色标出待移除文字,绿色标出保留的页码或数字。可以取消整组匹配,也可以取消当前页的个别匹配。修改文字或范围设置后必须重新分析。
- 点击“移除并生成新 PDF”。移除的是 PDF 中的文字内容,并非覆盖白色矩形;页面不会栅格化,正文位置、页面尺寸、数量和顺序不变。
默认保留阿拉伯数字、全角数字、罗马数字、中文数字和常见页码标签(如 Page 3 of 100、第十二页)。完整的 Downloaded from … by … on 日期 下载声明中的网址编号和日期不会被当成页码,声明外的页码仍受保护。其他内容为避免误删页码,包含数字时仍可能被保留;无法与其他字形可靠分离的匹配会跳过并提示。旋转、竖排文字、无文字层或以大幅扫描图为主的页面,以及带有未应用涂黑标注的页面会保留。特殊页码格式仍需检查预览。此功能只移除文字,不移除页边横线和图片。
适用于一张横向 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:渲染、旋转校正并切开双页扫描。
- Tesseract.js:在浏览器内识别扫描目录和页眉/页脚页码。
- MuPDF.js:在浏览器后台线程提取字形位置、渲染抽样页并移除目标文字。按需加载约 10 MB 的 WebAssembly 文件;依赖许可证为 AGPL-3.0-or-later。
- Vite:本地开发与静态构建。
PDF 数据不会发送到本项目的后端,因为项目没有后端。页面会加载第三方字体资源;若你需要完全离线使用,可将 src/style.css 中的 Google Fonts 导入移除或替换为本地字体。
- 请只处理你拥有、获授权使用或依法可以处理的文件。
- 大型扫描书会占用较多内存,双页切开尤其如此;建议一次处理一本书,并在完成后关闭标签页以释放内存。
- 倾斜校正目前是对整份双页扫描应用同一个角度;如果各页倾斜方向不一致,需要分批处理。
- “解除使用限制”针对的是 PDF 的使用权限标志,不等同于支持未知打开密码或其他 DRM 方案。
npm run build
npm test
node scripts/create-test-pdf.mjs测试脚本会在 tmp/pdfs/ 生成基础 PDF 和双页扫描测试文件。tmp/ 是本地临时目录,不纳入版本控制。