一个去掉PDF背景水印的思路

起因

昨天测试 使用"https://github.com/VikParuchuri/marker" 将 pdf 转 Markdown的过程中,发现转换后的文件中会保护一些背景图片,是转换过程中,程序把背景图识别为了内容。于是想着怎么把背景图片去掉。

背景水印图片的特征

我这里拿到的PDF图片都是文字类型的,背景水印应该都是后期加进去的。

总结出两个特征:

  • 每页都存在相同的背景图片
  • 作为背景覆盖了页面大部分区域

基于上面的特征,写代码将背景移除

  • 代码:
python 复制代码
import fitz

def scan_background_images(pdf_path):
    doc = fitz.open(pdf_path)
    num_pages = len(doc)
    image_usage = {}  # 字典来记录每个图片的使用情况和页面面积覆盖

    # 遍历文档中的每一页
    for page in doc:
        page_area = abs(page.rect)  # 计算页面面积
        images = page.get_images(full=True)

        for img in images:
            xref = img[0]
            img_rect = page.get_image_rects(xref)
            img_area = sum([abs(rect) for rect in img_rect])  # 计算该图片在当前页面的总覆盖面积

            if img_area / page_area >= 0.5:  # 判断是否覆盖了超过50%的页面面积
                if xref in image_usage:
                    image_usage[xref]['count'] += 1
                    image_usage[xref]['pages'].add(page.number)
                else:
                    image_usage[xref] = {'count': 1, 'pages': set([page.number])}

    # 确定在至少80%的页面上重复出现的图片
    background_images = []
    threshold = 0.8 * num_pages  # 计算至少需要出现在多少页面上

    for xref, data in image_usage.items():
        if data['count'] >= threshold:
            background_images.append(xref)

    # 移除背景图片
    for page in doc:
        for xref in background_images:
            page.clean_contents()  # 清理页面内容,准备删除操作
            page.delete_image(xref)

    # 保存修改后的PDF
    new_pdf_path = pdf_path.replace('.pdf', '_no_bg.pdf')
    doc.save(new_pdf_path)
    doc.close()

    return new_pdf_path

# 使用函数
pdf_path = "example.pdf"
new_pdf_path = scan_background_images(pdf_path)
print("Modified PDF saved to:", new_pdf_path)
  • 依赖
bash 复制代码
pip install PyMuPDF

效果

  • 去背景前
  • 去背景后
相关推荐
Lyn_Li5 小时前
扫描 PDF 歪了怎么办?用 6 种检测方法做本地批量扶正(附开源工具)
python·pdf·ocr·tesseract·开源工具·文档处理·本地处理·扫描件纠偏
Mr.Daozhi20 小时前
从零构建 AI 学术论文助手(四):PDF.js 实时截图 + Gemini 视觉分析
javascript·人工智能·pdf·canvas·pdf.js·gemini
wenxin77wx2 天前
3步部署OlmOCR:一行命令将PDF转为LLM训练数据
pdf·- olmocr
2501_930707782 天前
PDF 转 Markdown:在线与离线转换完整指南
pdf
ShiXZ2132 天前
PDF-OCR文件识别篇(七):数据入库
java·pdf·json·ocr·springboot
hong78173 天前
西门子触摸屏PROSAVE传输PDF组件没有选项
pdf·触摸屏·西门子
王莎莎-MinerU3 天前
当 RealDocBench 开始追问字段级问答,MinerU 为什么更适合做知识库与科研 Agent 的文档验收层
大数据·人工智能·算法·pdf·ocr
weixin_3975740920 天前
PDF复杂表格的1:1还原引擎:跨页表格自动拼接技术实战
大数据·人工智能·pdf
Metaphor69220 天前
使用 Python 将 PDF 转换为 HTML
python·pdf·html
2601_9618451520 天前
粉笔行测5000题电子版|pdf|解析
pdf·新媒体运营·github·个人开发·内容运营·规格说明书·极限编程