Package Exports
- pdfclean
- pdfclean/src/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (pdfclean) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
PDFClean - PDF 水印移除工具
一个基于 Node.js 的命令行工具,用于移除 PDF 文件中的浅色水印。
功能特点
- ✅ 自动检测并移除浅色水印
- ✅ 多线程并行处理,充分利用 CPU 核心
- ✅ 2倍分辨率处理,确保小字体水印精确识别
- ✅ 友好的命令行界面,带进度条显示
- ✅ 支持多页 PDF 批量处理
- ✅ 容错机制,单页失败不影响整体输出
安装依赖
前置要求
- Node.js >= 18.12.0
- 对于 macOS: 需要 Xcode Command Line Tools
- 对于 Linux: 需要 Cairo 库和相关开发包
安装步骤
# 克隆或进入项目目录
cd pdf_img
# 安装依赖
npm install
# 将 CLI 工具链接到全局
npm link依赖说明
项目使用以下核心依赖:
- @napi-rs/canvas (^0.1.97): PDF 页面渲染和像素级操作
- jspdf (^3.0.4): PDF 生成和合并
- pdfjs-dist (^4.0.379): PDF 解析和内容提取
- yargs (^17.7.2): 命令行参数解析
- cli-progress (^3.12.0): 进度条显示
使用方法
基础用法
# 最简单的用法,自动生成输出文件名
pdfclean input.pdf
# 指定输出文件
pdfclean input.pdf -o output.pdf
# 指定 Worker 线程数和渲染缩放
pdfclean input.pdf -w 4 -s 3
# 禁用进度条
pdfclean input.pdf --no-progress命令行参数
Usage: pdfclean <input> [options]
参数:
input 输入 PDF 文件路径 [必需]
选项:
-o, --output 输出 PDF 文件路径 [默认: input_clean.pdf]
-w, --workers 最大 Worker 线程数 [默认: CPU 核心数]
-S, --scale 渲染缩放因子 (越高质量越好) [默认: 2]
--no-progress 禁用进度条 [默认: false]
-h, --help 显示帮助信息
-v, --version 显示版本号
示例:
pdfclean input.pdf 移除 input.pdf 的水印
pdfclean input.pdf -o output.pdf 指定输出文件
pdfclean input.pdf -w 4 -s 3 使用 4 个 Worker,3 倍缩放程序化使用
const { removePdfWatermark } = require('./src/pdfWatermarkRemover');
// 基本用法
await removePdfWatermark('input.pdf', 'output.pdf');
// 带选项
await removePdfWatermark('input.pdf', 'output.pdf', {
maxWorkers: 4, // Worker 线程数
scale: 2, // 渲染缩放
onProgress: (current, total) => {
console.log(`处理进度: ${current}/${total}`);
}
});工作原理
水印检测算法
系统使用双重判定机制检测浅色水印:
- RGB 范围检测: 像素的 R、G、B 值都在 160-255 范围内
- 饱和度检测: max(R,G,B) - min(R,G,B) ≤ 10 (接近灰色)
满足以上两个条件的像素会被识别为水印并替换为纯白色 (255, 255, 255)。
处理流程
输入PDF → PDF解析 → 多线程并行处理 → 像素级水印检测 →
生成PNG图片 → PDF重建 → 合并所有页面 → 输出PDF性能特点
- 并行处理: 使用 Worker 线程池,充分利用多核 CPU
- 2倍分辨率: 提高水印检测准确率
- 内存优化: 流式处理,减少内存占用
项目结构
pdf_img/
├── bin/
│ └── cli.js # CLI 入口
├── src/
│ ├── index.js # 主入口
│ ├── pdfWatermarkRemover.js # 主控制器
│ ├── watermarkProcessor.js # 水印处理核心
│ ├── worker.js # Worker 线程脚本
│ └── workerPool.js # Worker 线程池管理
├── package.json
└── README.md常见问题
Canvas 安装失败
如果 canvas 依赖安装失败:
macOS:
xcode-select --install
npm install canvasUbuntu/Debian:
sudo apt-get install build-essential libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev
npm install canvasWindows: 建议使用预编译版本或 WSL2
内存不足
处理大型 PDF 时可能遇到内存问题,可以尝试:
- 减少 Worker 数量:
pdfclean input.pdf -w 2 - 降低渲染缩放:
pdfclean input.pdf -s 1.5
部分页面处理失败
工具具有容错机制,即使部分页面失败也会输出可处理的页面。检查控制台输出查看失败原因。
技术栈
- Node.js 18.12.0+
- Canvas - PDF 渲染和像素操作
- jsPDF - PDF 生成
- PDF.js - PDF 解析
- Worker Threads - 多线程处理
License
MIT
作者
开发者: 根据技术方案实现
更新日志
v1.0.0 (2024)
- 初始版本发布
- 实现基础水印移除功能
- 支持多线程并行处理
- 命令行工具完整实现