You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

寻找可隐藏PDF文件中邮箱地址的工具/脚本(支持Python实现)

寻找可隐藏PDF文件中邮箱地址的工具/脚本(支持Python实现)

嘿,这个需求我刚好折腾过,给你两个方向的方案,按需选择就好:

一、现成工具(不用写代码)

如果不想动手写脚本,可以试试这些工具:

  • Adobe Acrobat Pro:付费软件,但功能很完善。你可以用它的「查找替换」功能,用正则匹配邮箱,再配合「红action」工具批量给匹配到的邮箱添加黑色覆盖框,支持批量处理多个PDF文件。
  • PDF-XChange Editor:免费版就够用,同样支持正则表达式查找邮箱,找到后直接用「覆盖」功能添加黑色矩形,操作起来很直观,适合快速处理少量文件。

二、Python脚本实现(推荐,符合你的技术栈)

既然你熟悉用Python处理PDF,那用**PyMuPDF(fitz)**库来实现是最方便的——它对PDF文本定位和绘图的支持非常友好,完全能满足你的需求:隐藏文本层的邮箱,同时用黑框覆盖。

步骤1:安装依赖

先安装PyMuPDF:

pip install pymupdf

步骤2:示例脚本

下面是一个可以直接修改使用的脚本,已经做了注释说明:

import fitz  # 导入PyMuPDF库
import re

def redact_emails(input_pdf_path, output_pdf_path):
    # 定义匹配邮箱的正则表达式(覆盖大部分常见邮箱格式)
    email_regex = re.compile(r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}')
    
    # 打开输入PDF文件
    pdf_doc = fitz.open(input_pdf_path)
    
    # 遍历PDF的每一页
    for page in pdf_doc:
        # 在当前页查找所有匹配邮箱的文本区域
        email_boxes = page.search_for(email_regex)
        
        # 给每个邮箱位置画黑色矩形覆盖
        for box in email_boxes:
            # 把边界框稍微扩大一点,确保完全覆盖邮箱(避免漏出边缘字符)
            expanded_box = fitz.Rect(box) + (2, 2, -2, -2)
            # 绘制填充的黑色矩形:color是边框色,fill是填充色,这里都设为黑色
            page.draw_rect(expanded_box, color=(0, 0, 0), fill=(0, 0, 0))
    
    # 保存处理后的PDF
    pdf_doc.save(output_pdf_path)
    pdf_doc.close()

# 测试使用(替换成你的输入输出路径)
if __name__ == "__main__":
    input_file = "你的原始PDF文件.pdf"
    output_file = "处理后隐藏邮箱的PDF文件.pdf"
    redact_emails(input_file, output_file)
    print(f"处理完成!结果已保存到:{output_file}")

脚本说明

  1. 文本查找:用page.search_for()方法结合正则表达式,精准定位每一个邮箱的位置,返回的是邮箱文本的边界框坐标。
  2. 覆盖处理:通过draw_rect()绘制黑色填充矩形,特意把边界框扩大了2个单位,确保能完全盖住邮箱,不会漏出字符。
  3. 批量处理扩展:如果要处理文件夹里的所有PDF,可以加个循环,用glob模块遍历文件,比如:
import glob
for pdf_path in glob.glob("文件夹路径/*.pdf"):
    output_path = f"处理后_"+pdf_path.split("/")[-1]
    redact_emails(pdf_path, output_path)

补充提示

  • 如果你不仅想覆盖,还想删除文本层里的邮箱内容,可以试试page.delete_text(rect=expanded_box)方法,但要注意:删除文本可能会影响PDF的排版(比如留下空白),而画黑框的方式更稳妥,也符合你“不需要完美”的预期。
  • 测试时先拿单个PDF文件试手,调整边界框的扩展值(比如把(2,2,-2,-2)改成(1,1,-1,-1)),找到最适合的覆盖范围。

备注:内容来源于stack exchange,提问作者Hanan Cohen

火山引擎 最新活动