PDF保护功能使用指南¶
本指南说明如何使用PDF保护功能来防止文本复制和OCR识别。
功能说明¶
PDF保护功能通过以下方式保护PDF:
- 防止直接复制文本:将PDF页面转换为图像,文本不再是可选择的文本层
- 防止OCR识别:可以添加噪声和干扰模式,使OCR工具难以识别
快速开始¶
基本保护(转换为图像)¶
# 单个章节
bubble-convert 11 --protect
# 所有章节
bubble-convert --protect
高级保护(添加噪声和干扰模式)¶
# 添加噪声
bubble-convert 11 --protect --protect-noise
# 添加干扰模式
bubble-convert 11 --protect --protect-pattern
# 最大保护(噪声+干扰模式)
bubble-convert 11 --protect --protect-noise --protect-pattern
高质量保护¶
# 使用更高DPI(更清晰但文件更大)
bubble-convert 11 --protect --protect-dpi 400
选项说明¶
保护选项¶
--protect: 启用PDF保护(将文本转换为图像)--protect-dpi DPI: 设置图像DPI(默认:300,越高质量越好但文件越大)--protect-noise: 添加细微噪声使OCR更困难--protect-pattern: 添加反OCR干扰模式(细微线条)
性能优化选项(高级)¶
--protect-batch-size N: 每批处理的页数(默认:自动检测)--protect-max-batches N: 最大并发批次数(默认:自动检测)--protect-workers N: 图像处理worker数量(默认:自动检测)--protect-pdf-threads N: PDF转图像时的线程数(默认:自动检测)
建议:大多数情况下使用默认自动检测即可,脚本会根据你的系统自动优化。
使用示例¶
示例1:基本保护¶
bubble-convert 1 --protect
示例2:高质量保护¶
bubble-convert 1 --protect --protect-dpi 400
示例3:最大保护¶
bubble-convert 1 --protect --protect-noise --protect-pattern
示例4:保护+水印¶
bubble-convert 1 --protect --watermark "DRAFT"
系统要求¶
PDF保护功能需要以下依赖:
# Python包
pip install pdf2image pillow reportlab numpy
# 系统依赖(poppler-utils)
sudo apt-get install poppler-utils
工作原理¶
- PDF转图像:使用
pdf2image将PDF每一页转换为高分辨率图像 - 图像处理(可选):
- 添加噪声:在图像上添加随机噪声
- 添加干扰模式:添加细微的线条模式
- 图像转PDF:将处理后的图像重新组合成PDF
性能影响¶
- 处理时间:每页约1-3秒(取决于DPI和页面复杂度)
- 批次并行处理:脚本自动检测系统资源,使用批次并行处理,充分利用多核CPU
- 自动优化:根据CPU核心数和内存自动配置批次大小和并发数
- 可以通过
--protect-batch-size和--protect-max-batches手动调整 - 内存使用:
- 自动控制:通过批次处理控制内存使用,避免一次性加载所有页面
- 32核系统:从45GB+降低到4-8GB(约80-90%的内存节省)
- 智能分配:根据系统内存自动计算最优批次大小
- 文件大小:会增加2-5倍(因为图像比文本大)
- 质量:使用300 DPI时,视觉质量与原始PDF几乎相同
自动检测和优化¶
PDF保护脚本现在支持自动检测系统资源并优化配置:
自动检测功能¶
- CPU核心数:自动检测并使用60-75%的可用核心
- 内存大小:自动检测系统总内存并计算最优批次大小
- 批次处理:自动将PDF页面分成批次并行处理
- 内存控制:限制内存使用,防止系统过载
自动配置示例¶
# 完全自动(推荐)- 脚本会自动检测并优化
bubble-build --protect
# 对于32核系统,脚本会自动:
# - 使用约24个并发批次(75%的CPU核心)
# - 批次大小:10-30页/批次
# - 预估内存:4-8GB(而不是45GB+)
系统资源检测¶
脚本会自动显示检测到的系统资源:
🖥️ System resources detected:
CPU cores: 32
Total memory: 64.0 GB
Auto-configured: batch_size=20, max_concurrent_batches=24
不同系统的自动配置¶
32+核 + 64+GB内存: - 批次大小:10-30页 - 并发批次:最多24个(使用75%的CPU核心) - 每批内存:最多2GB
16+核 + 32+GB内存: - 批次大小:8-25页 - 并发批次:最多22个(使用70%的CPU核心) - 每批内存:最多1.5GB
其他系统: - 根据CPU和内存自动调整
并行处理¶
PDF保护脚本使用批次并行处理,可以显著加速处理并控制内存使用:
# 使用自动检测(推荐)
bubble-build --protect
# 手动指定批次大小和并发数
bubble-build --protect --protect-batch-size 20 --protect-max-batches 24
# 直接使用脚本
python3 scripts/protect_pdf.py input.pdf output.pdf
批次处理优势¶
- 内存控制:分批处理避免一次性加载所有页面
- 并行加速:多个批次同时处理,充分利用多核CPU
- 动态调整:根据系统资源自动优化配置
性能提升: - 串行处理:100页约需5-10分钟,内存45GB+ - 批次并行处理(24 workers):100页约需1-2分钟,内存4-8GB - 加速比:约4-5倍(取决于CPU核心数) - 内存节省:约80-90%(通过批次处理)
注意事项¶
⚠️ 重要提示:
- 文件大小:保护后的PDF文件会显著增大(因为图像比文本大)
- 处理时间:保护过程需要额外时间,特别是大文件
- 质量平衡:DPI越高质量越好,但文件也越大
- 不可逆:保护后的PDF无法恢复为可编辑文本
- 建议:保留原始PDF作为备份
最佳实践¶
- 开发阶段:不使用保护,保持文件小且处理快
- 发布阶段:使用保护,防止未授权复制
- DPI选择:
- 300 DPI:平衡质量和大小(推荐)
- 400+ DPI:高质量输出(文件较大)
- 200 DPI:文件较小但可能影响清晰度
与单独脚本使用¶
你也可以直接使用保护脚本:
# 保护已生成的PDF
python3 scripts/protect_pdf.py input.pdf output.pdf
# 带选项
python3 scripts/protect_pdf.py input.pdf output.pdf \
--dpi 300 --noise --pattern
常见问题¶
Q: 保护后文件太大怎么办?
A: 降低DPI(如使用--protect-dpi 250)或只保护关键章节
Q: 保护会影响打印质量吗? A: 使用300+ DPI时,打印质量与原始PDF相同
Q: 可以同时使用水印和保护吗? A: 可以,两者可以同时使用,提供双重保护
Q: 保护是100%安全的吗? A: 没有绝对安全,但可以显著增加复制和OCR的难度
Q: 自动检测是如何工作的? A: 脚本会自动检测CPU核心数和系统内存,然后计算最优的批次大小和并发批次数。对于32核系统,会自动使用约24个并发批次,显著提升处理速度并控制内存使用。
Q: 我可以覆盖自动检测的配置吗?
A: 可以,使用 --protect-batch-size 和 --protect-max-batches 参数可以手动指定配置。但建议先使用自动检测,通常已经是最优配置。
Q: 为什么内存使用从45GB降到了4-8GB? A: 通过批次处理,不再一次性加载所有PDF页面到内存。而是分批处理,每批处理完成后释放内存,从而大幅降低峰值内存使用。