如何高效将已扁平化且经过遮盖处理的PDF中所有黑色矩形修改为白色?
解决方案
方法1:Python脚本批量处理(最高效,适合多文件/大文件场景)
思路:将PDF每页渲染为图像后自动识别黑色矩形区域,批量填充为白色后重新导出PDF,全程无需人工介入。
- 需提前安装依赖库:
pymupdf、numpy、opencv-python,可通过pip install pymupdf numpy opencv-python一键安装 - 运行脚本前仅需修改输入、输出文件路径即可,黑色识别阈值可根据实际遮盖的黑色深浅调整:
import fitz # PyMuPDF import cv2 import numpy as np # 自定义配置项 input_pdf_path = "替换为你的输入PDF路径.pdf" output_pdf_path = "替换为你的输出PDF路径.pdf" black_threshold = 30 # 纯黑为0,若遮盖为深灰色可适当调大该值 doc = fitz.open(input_pdf_path) new_doc = fitz.open() for page in doc: # 渲染当前页为300DPI的高清图像 pix = page.get_pixmap(dpi=300) img = np.frombuffer(pix.samples, dtype=np.uint8).reshape(pix.h, pix.w, pix.n) # 识别黑色区域并填充为白色 if pix.n >= 3: lower_bound = np.array([0,0,0] if pix.n==3 else [0,0,0,0]) upper_bound = np.array([black_threshold]*3 + ([255] if pix.n==4 else [])) black_mask = cv2.inRange(img, lower_bound, upper_bound) img[black_mask != 0] = [255,255,255] if pix.n==3 else [255,255,255,255] # 插入处理后的页面到新PDF new_page = new_doc.new_page(width=page.rect.width, height=page.rect.height) new_page.insert_image(new_page.rect, stream=cv2.imencode('.png', img)[1].tobytes()) new_doc.save(output_pdf_path) new_doc.close() doc.close()
方法2:Adobe Acrobat 批量处理(无代码基础可用)
无需安装额外工具,用常用的PDF编辑器即可完成:
- 打开目标PDF后,依次点击「工具」-「印刷制作」-「转换颜色」
- 匹配条件设置为「颜色类型=印刷色」、「颜色值=纯黑(RGB 0,0,0 / CMYK 0,0,0,100)」
- 替换动作设置为将匹配颜色转换为纯白(RGB 255,255,255)
- 勾选「应用于所有页面」后执行即可完成批量替换
*如果需要保留PDF内正常的黑色文字,可先用「选择对象」工具右键点击任意一个黑色遮盖矩形,选择「查找相似对象」,筛选出所有同属性的矩形后再统一设置填充色为白色,避免误伤正常内容。
方法3:Ghostscript 命令行处理(适合命令行用户)
仅需一行命令即可完成处理,适合批量处理多份PDF的场景:
gs -o 输出文件名.pdf -sDEVICE=pdfwrite -c "/setrgbcolor {0 0 0 eq {1 1 1 setrgbcolor} if} bind def" -f 输入文件名.pdf
*该命令默认将所有纯黑色内容替换为白色,若需要保留正常黑色文字,可额外添加矢量对象筛选参数限定仅修改矩形元素。
内容的提问来源于stack exchange,提问作者CrosswordPuzzlz
相关产品推荐
相关产品推荐

