Skip to content

Repository files navigation

页裁

一个在浏览器本地运行的 PDF 页码整理工具。适合从一本 PDF 书中抽取章节、删除无关页,或整理双页扫描件。

PDF 文件不会上传到服务器:读取、处理和下载都在你的浏览器中完成。

能做什么

  • 提取页面:按页码生成新的 PDF,例如 1, 3-5, 8
  • 删除页面:移除指定页,保留其余页面。
  • 无损旋转:将指定页面旋转 90°、180° 或 270°,保留原有文字层和页面内容。
  • 密码打开与保护:输入你已知的打开密码来处理加密 PDF,或为生成的新副本添加打开密码。
  • 扫描页优化:逐页自动识别并裁掉白边,可调整保留边距、亮度、对比度和灰度;未选页面原样保留。
  • 按章节切割:优先读取 PDF 书签/目录,也可以手动输入章节起始页,生成多个章节 PDF 并打包成 ZIP。
  • OCR 扫描目录:识别扫描版目录和正文页眉/页脚页码,建立印刷页码到 PDF 页码的映射后切割章节。
  • 移除文字页眉页脚:优先匹配用户指定的文字,留空时推断重复文字;抽样预览、保留页码并生成文字型 PDF。
  • 解除使用限制:对能正常打开、但禁止编辑、提取或打印的 PDF,生成一份不保留这些使用限制的副本。
  • 切开双页扫描:指定哪些阅读器页面需要切开,自定义切割线位置和左右顺序;未选页面会原样保留,可用于单页封面。
  • 校正轻微倾斜:在切开双页前,以 0.1° 为单位微调旋转角度,让影印文字更接近水平。

使用说明

  1. 将一个 PDF 拖入页面,或点击“选择 PDF 文件”。
  2. 选择一种操作。
  3. 按提示完成设置,点击生成按钮;新文件会直接下载。

提取或删除页码

填写的是 PDF 阅读器中的页面序号,不是印刷在书页上的页码。

支持单页与连续范围,用英文逗号分隔:

1, 3-5, 8

上例表示第 1、3、4、5、8 个 PDF 页面。

解除使用限制

这一项面向“能打开,但阅读器显示不允许复制、编辑或打印”的权限限制 PDF。它会在本地生成完整的新副本。

它不会猜测、破解或绕过未知的打开密码。如果你知道并有权使用打开密码,可在文件载入失败后的密码框中输入;密码仅在本机内存中交给 QPDF 使用,不会保存或上传。

添加密码保护

选择“添加密码保护”,连续输入两次相同密码,即可生成需要该密码才能打开的新副本。工具会随机生成独立的所有者密码;用户输入的密码不会保存,忘记后本工具无法找回,请妥善记录。

按章节切割

选择“按章节切割”后,工具会尝试读取 PDF 内置的书签目录。目录中能定位到阅读器页面的条目会显示为章节起始点;勾选需要保留的章节后,工具会按下一个章节起始页自动计算结束页。

如果 PDF 没有目录,切换到“手动切割点”,输入章节起始页,例如 1, 18, 42, 79。工具会自动补上第 1 页,并生成 1-1718-4142-7879-末页 四个章节 PDF,最后打包为 ZIP 下载。这里的页码是 PDF 阅读器页码,不是印刷页码。

对于扫描版 PDF,可选择“ OCR 扫描目录”,输入目录所在的 PDF 阅读器页,例如 1-3。工具会先用中文 OCR 读取目录,再只裁剪每一页的页眉/页脚识别印刷页码,因此中间插入空白页不会被固定偏移量误判。识别结果会显示印刷页码和推断出的 PDF 起始页;可直接修改起始页后再切割。OCR 在浏览器中运行,首次使用需要加载 Tesseract.js 的 OCR 引擎和语言数据。

目录章节列表中的结束页默认是下一个已选章节起始页的前一页,也可以逐章改成更早的页码,以排除后置注释、图片或空白页。OCR 结果必须先点击“确认章节定位”,确认后才会启用分割。

移除文字版 PDF 的页眉页脚

  1. 选择“移除页眉页脚”。输入需要移除的文字,每行一条。匹配支持跨行、忽略空白和复制文本中的下划线转义、区分大小写;指定内容未找到时会提示,不会自动改用推断。
  2. 不填写文字时,根据页边位置和至少 3 个不同页面的重复内容推断,支持奇偶页和不同章节的页眉样式。可选择仅页眉、仅页脚或两者,并调整检查区域,默认顶部和底部各 12%。
  3. 点击“分析并抽样预览”。后台线程扫描整份文档,只渲染当前预览页;默认提供开头、中间、结尾约 6 个样本,并补充不同样式,最多 12 个快捷样本。每种匹配均可查看自己的样本,也可输入任意阅读器页码查看。
  4. 红色标出待移除文字,绿色标出保留的页码或数字。可以取消整组匹配,也可以取消当前页的个别匹配。修改文字或范围设置后必须重新分析。
  5. 点击“移除并生成新 PDF”。移除的是 PDF 中的文字内容,并非覆盖白色矩形;页面不会栅格化,正文位置、页面尺寸、数量和顺序不变。

默认保留阿拉伯数字、全角数字、罗马数字、中文数字和常见页码标签(如 Page 3 of 100第十二页)。完整的 Downloaded from … by … on 日期 下载声明中的网址编号和日期不会被当成页码,声明外的页码仍受保护。其他内容为避免误删页码,包含数字时仍可能被保留;无法与其他字形可靠分离的匹配会跳过并提示。旋转、竖排文字、无文字层或以大幅扫描图为主的页面,以及带有未应用涂黑标注的页面会保留。特殊页码格式仍需检查预览。此功能只移除文字,不移除页边横线和图片。

切开双页扫描与倾斜校正

适用于一张横向 PDF 页面中并排放着左右两页书的情况。

  1. 选择“切开双页扫描”。
  2. 选择要切开的阅读器页面。单页封面不要选择,它会原样保留。
  3. 调整切割线位置,并选择“先左后右”或“先右后左”。
  4. 如果文字整体倾斜,使用“校正文字倾斜”的滑杆或 / + 按钮微调。文字向左歪就向右调,反之亦然。

切开和校正需要先将页面渲染为图像,因此输出是图像型 PDF:原文件的可搜索文字层、链接、书签和表单不会保留。处理前请保留原文件。

裁剪白边与扫描图增强

选择“优化扫描页”,再选择需要处理的阅读器页面。自动裁剪会逐页寻找非白色内容边界,“保留边距”用于避免裁得太紧;亮度、对比度和灰度化可改善泛黄、偏暗或层次不足的影印页。

被优化的页面会转为图像型页面,未选页面仍保留原始 PDF 内容。自动识别可能受深色纸张、页边批注或污点影响,请先用少量页面试验合适参数,并保留原文件。

依赖与安装

使用已部署的网站

无需安装任何 PDF 工具。使用现代桌面浏览器打开网站即可;PDF 会在浏览器中本地处理。

本地开发或自行部署

需要先安装:

  • Node.js 20 或更高版本(自带 npm)
  • Git(仅在从源码克隆项目时需要)

不需要单独安装 QPDF、Poppler、Python 或 Adobe Acrobat:

  • QPDF 以 WebAssembly 形式随 qpdf-run 安装,用于本地解除 PDF 使用限制。
  • PDF.js 随 npm 依赖安装,用于渲染、切开双页和校正倾斜。

安装项目依赖:

npm install

本地运行

npm 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/ 是本地临时目录,不纳入版本控制。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages