来源:ChatGPT
安装依赖
pip install pdf2image pillow opencv-python
# pdf2image 需要 Poppler
apt install poppler-utils
Python 代码
import os
import cv2
from pdf2image import convert_from_path
from PIL import Image
# ======== 配置参数 ========
INPUT_FOLDER = "input_pdfs" # 输入 PDF 文件夹
OUTPUT_FOLDER = "output_pdfs" # 输出 PDF 文件夹
DPI = 300 # 转图片分辨率
ALPHA = 1.5 # 对比度 (>1 增强, <1 降低)
BETA = -30 # 亮度 (负数变暗, 正数变亮)
# ==========================
os.makedirs(OUTPUT_FOLDER, exist_ok=True)
def enhance_contrast_brightness(img, alpha, beta):
"""调整对比度(alpha)和亮度(beta)"""
return cv2.convertScaleAbs(img, alpha=alpha, beta=beta)
def process_pdf(pdf_path, output_path):
print(f"处理: {pdf_path}")
pages = convert_from_path(pdf_path, dpi=DPI)
enhanced_images = []
for i, page in enumerate(pages):
# 转为灰度
img = cv2.cvtColor(cv2.cvtColor(
cv2.imdecode(
np.frombuffer(page.tobytes(), dtype=np.uint8),
cv2.IMREAD_COLOR
), cv2.COLOR_BGR2GRAY
), cv2.COLOR_GRAY2BGR)
# 调整对比度和亮度
enhanced = enhance_contrast_brightness(img, ALPHA, BETA)
# 转 PIL Image
pil_img = Image.fromarray(cv2.cvtColor(enhanced, cv2.COLOR_BGR2RGB))
enhanced_images.append(pil_img)
# 保存 PDF
enhanced_images[0].save(output_path, save_all=True, append_images=enhanced_images[1:], quality=100)
print(f"已保存到: {output_path}")
def batch_process():
for file in os.listdir(INPUT_FOLDER):
if file.lower().endswith(".pdf"):
input_path = os.path.join(INPUT_FOLDER, file)
output_path = os.path.join(OUTPUT_FOLDER, file)
process_pdf(input_path, output_path)
if __name__ == "__main__":
import numpy as np
batch_process()
处理文件
- 准备文件
input_pdfs/ # 把要处理的 PDF 放这里
output_pdfs/ # 处理后的 PDF 会生成到这里
- 修改脚本顶部的控制变量
- ALPHA(对比度,推荐 1.2 ~ 2.0)
-
BETA(亮度,推荐 -50 ~ 50)
-
运行脚本
python enhance_pdf_text.py
- 运行效果
- ALPHA=1.5, BETA=-30 → 浅灰字会变接近黑色,背景更干净。
- ALPHA=2.0, BETA=-50 → 适合底色很浅的情况(会有“硬边”效果)。