python去除非页眉页脚,非背景非正式的图片、文字水印代码

news2025/1/12 19:04:22
import fitz
import os
import shutil
 
def remove_watermarks_by_sizes(pdf_path, output_path, watermark_sizes, watermark_rects, watermark_texts):
    """
    从PDF中删除特定大小的图片(水印)和特定的文字。
    参数:
    pdf_path (str): 输入PDF文件的路径。
    output_path (str): 输出PDF文件的路径。
    watermark_sizes (list of tuples): 水印的尺寸列表,每个元素是一个 (宽度, 高度) 的元组。
    watermark_rects (list of str): 水印的矩形位置列表,每个元素是一个矩形位置字符串。
    watermark_texts (list of str): 要删除的特定文字列表。
    """
    doc = fitz.open(pdf_path)
 
    for page_num in range(len(doc)):
        page = doc.load_page(page_num)
        images = page.get_images(full=True)
 
        for img in images:
            xref = img[0]
            base_image = doc.extract_image(xref)
            image_width = base_image['width']
            image_height = base_image['height']
            image_rect = str(page.get_image_rects(xref))
 
            for watermark_size, watermark_rect in zip(watermark_sizes, watermark_rects):
                watermark_width, watermark_height = watermark_size
 
                # 检查图像尺寸是否与水印尺寸匹配
                if watermark_rect:
                    if (
                            image_width == watermark_width and image_height == watermark_height and image_rect == watermark_rect):
                        print(f"Removing image at {image_rect} of size ({watermark_width}, {watermark_height})")
                        page.delete_image(xref)
                        break
                else:
                    if (image_width == watermark_width and image_height == watermark_height):
                        print(f"Removing image at {image_rect} of size ({watermark_width}, {watermark_height})")
                        page.delete_image(xref)
                        break
 
        # 查找并删除特定文字
        for watermark_text in watermark_texts:
            text_instances = page.search_for(watermark_text)
            for inst in text_instances:
                print(f"Removing text: {watermark_text} at {inst}")
                page.add_redact_annot(inst, text="")  # 添加遮盖注释
        page.apply_redactions()  # 应用遮盖注释
 
    temp_output_path = output_path + ".temp"
    doc.save(temp_output_path)
    doc.close()
    shutil.move(temp_output_path, output_path)
 
 
def process_pdfs_in_directory(directory_path, watermark_sizes, watermark_rects, watermark_texts, save_option):
    """
    处理目录下的所有PDF文件。
    参数:
    directory_path (str): PDF文件所在的目录路径。
    watermark_sizes (list of tuples): 水印的尺寸列表,每个元素是一个 (宽度, 高度) 的元组。
    watermark_rects (list of str): 水印的矩形位置列表,每个元素是一个矩形位置字符串。
    watermark_texts (list of str): 要删除的特定文字列表。
    save_option (str): 保存选项 ('overwrite' 或 'suffix')。
    """
    for filename in os.listdir(directory_path):
        if filename.lower().endswith('.pdf'):
            pdf_path = os.path.join(directory_path, filename)
 
            if save_option == 'overwrite':
                output_path = pdf_path
            elif save_option == 'suffix':
                base, ext = os.path.splitext(filename)
                output_path = os.path.join(directory_path, f"{base}_qsy{ext}")
            else:
                raise ValueError("Invalid save_option. Use 'overwrite' or 'suffix'.")
 
            remove_watermarks_by_sizes(pdf_path, output_path, watermark_sizes, watermark_rects, watermark_texts)
            print(f"Processed {pdf_path} -> {output_path}")
 
# 使用示例
directory_path = r"D:\学习\一建2024\2024\经济\讲义"  # 使用原始字符串
watermark_sizes = [(83, 83), (213, 72), (750, 1000)]  # 假设有多个水印图片的大小
watermark_rects = ["", "", ""]  # 对应的水印的矩形位置需要测试获取,主要是防止误删除和水印同样大小的图片。
watermark_texts = ["扫码关注更多内容", "学员专用 请勿外泄"]  # 要删除的特定文字列表
 
# 选择保存方式:'overwrite'覆盖保存 或 'suffix'添加后缀保存
save_option = 'overwrite'  # 选择'suffix' 或 'overwrite'
 
process_pdfs_in_directory(directory_path, watermark_sizes, watermark_rects, watermark_texts, save_option)

去除某目录下所有pdf的图片,文字水印。 

去除后:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2131116.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

现金检测系统源码分享

现金检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

草莓大模型(o1 )同步——实战2024国赛数学建模C题

模型介绍 这是一系列全新AI模型,能推理复杂的任务,解决比以前科学、编程、数学模型更难的问题。o1 模型(草莓)与 GPT-4o 的主要区别在于:它能够比前代更好地处理复杂的编程和数学问题,并能解释其推理过程.以往模型不同的是&#…

引用和指针的区别(面试概念性题型)

个人主页:Jason_from_China-CSDN博客 所属栏目:C系统性学习_Jason_from_China的博客-CSDN博客 概念概述 内存占用: 引用:引用一个变量时,实际上并不占用额外的内存空间,它就是原始变量的别名。指针&#xf…

裸金属 Ironic T和2024.1版本 功能比较

一、Train版 裸金属配置向导 1、系统环境 ansible 2.7.18 kolla-ansible 7.2.2.dev9[rootkolla-ansible-master ~]# python --version Python 2.7.5 [rootkolla-ansible-master ~]# cat /etc/centos-release CentOS Linux relea…

SAP B1 单据页面自定义 - 用户界面编辑字段

背景 接《SAP B1 基础实操 - 用户定义字段 (UDF)》,在设置完自定义字段后,如下图,通过打开【用户定义字段】可打开表单右侧的自定义字段页。然而再开打一页附加页面操作繁复,若是客户常用的定义字段,也可以把这些用户…

快充协议方案,Type-C接口受电端Sink取电快充协议芯片

快充协议芯片是确保充电器与设备之间兼容性的关键,它根据设备的需求提供合适的电压与电流,从 而实现更快速的充电体验。 快充协议芯片不仅仅是提升充电速度,更重要的是确保充电器与设备之间的兼容性,避免因协议不匹配导致的充电效…

从零开始打造一台简易计算机

从零开始打造一台可运行的简易计算机专题系列结合一个免费开源的 线上数字电路模拟器(仿真器), 从最基本的继电器(晶体管)功能讲起, 到最终完成一个可以批量执行指令的简易计算机. 跟随文中的步骤, 即可亲手在线上打造一台可运行的简易的计算机, 在此过程中, 将获得对计算机底…

2024lims实验室管理系统排名 6款LIMS软件厂商

随着实验室管理的不断升级,LIMS系统逐渐成为实验室不可或缺的一部分。这款实验室信息管理系统以其稳定性、多功能性和用户友好性在竞争激烈的市场中脱颖而出。 随着实验室管理的不断升级,LIMS系统逐渐成为实验室不可或缺的一部分。这款实验室信息管理系…

如何使用Python创建目录或文件路径列表

在 Python 中,创建目录或生成文件路径列表通常涉及使用 os、os.path 或 pathlib 模块。下面是一些常见的任务和方法,用于在 Python 中创建目录或获取文件路径列表。 问题背景 在初始阶段的 Python 学习过程中,可能遇到这样的问题&#xff1a…

NVG040W语音芯片:为制氧机带来个性化语音提示和报警功能

在当今社会,家庭医疗设备和健康保健产品越来越受到人们的关注。制氧机作为其中的一种,为许多需要氧气治疗的人们提供了重要的帮助。然而,对于许多用户来说,如何正确操作和维护这些设备仍然是一个挑战。为此,NVG040W语音…

点成分享 | 微生物浊度测量技术:比浊仪校准的最佳实践与策略

比浊仪通过检测悬浮液中微生物对光的散射程度来反映微生物含量。微生物浓度越高,透过的光越少,散射的光越多。因此,微生物浓度与透光度成反比,与吸光度成正比。该技术广泛应用于细菌浊度测定、抗生素药敏实验等微生物检测领域。 …

ElementPlus表单验证报错 formEl.validate is not a function

出现问题的代码 <!-- 密码重置弹框 --><el-dialog v-model"innerVisible" width"500" title"密码重置" append-to-body><el-form ref"ruleFormRef" style"max-width: 600px" :model"passForm" sta…

“鸿儒”——AIGC团队知识管理工作台

项目介绍 “鸿儒”——AIGC团队知识管理工作台是一项创新性的信息管理和协作平台&#xff0c;“鸿儒”立足于AIGC&#xff08;Artificial Intelligence Generated Content&#xff09;技术的前沿。该平台以机器学习和自然语言处理技术为核心&#xff0c;致力于协助团队更加高效…

Java实现邮箱发送功能详细步骤及注意事项?

Java实现邮箱发送怎么设置&#xff1f;JavaMail发送邮件的流程&#xff1f; 无论是用于用户注册验证、密码重置&#xff0c;还是系统通知&#xff0c;邮箱发送功能都能提供可靠的通信手段。AokSend将详细介绍Java实现邮箱发送功能的步骤&#xff0c;并探讨其中的注意事项。 J…

哪种掏耳朵方式好?高性价比的可视挖耳勺推荐!

耳朵健康作为人们个人健康的一种方式&#xff0c;它的重要性不可忽视。市面上的掏耳勺有多种&#xff0c;铁质掏耳勺、棉签、可视挖耳勺等&#xff0c;那么哪种掏耳勺最好用呢&#xff1f; 答案显而易见是可视挖耳勺&#xff0c;因为它摒弃了传统掏耳勺的耳勺头硬邦邦的问题&am…

jupyter notebook添加环境/添加内核

参考&#xff1a; jupyter notebook添加环境/添加内核&#xff08;超详细&#xff09;_python_leoound-GitCode 开源社区 Jupyter Notebook 切换虚拟环境_jupyter 选择环境-CSDN博客 1.激活想添加的环境 conda activate pytorch39 2.下载核 conda install ipykernel 3.按照…

MINICPM-V2_6之图像embedding的resampler-代码解读

目的 基于上一篇MINICPM-V2_6图像得到embedding-代码解读将图片patch找到对应的embedding&#xff08;包括位置embedding和像素embedding&#xff09;&#xff0c;embedding经过多层attention后会得到vision_embedding&#xff0c;vision_embedding的长度对应的是patch的个数&…

超链接/列表/多媒体/表格标记

1.超链接标记&#xff0c; 要将两个前端网页连接起来用什么标记呢&#xff1f; 答案是a标记&#xff0c;也就是超链接 下图就是两个html建立了超链接 效果是点击我是1号会跳转到我是2号那里 2.列表标记分为有序列表ol和无序列表ul, 每一列用li标签 <hr color"yell…

华为项目管理认证HCIA-PM认证 |课程大纲

大家想要往上升的&#xff0c;或多或少都要懂点技术&#xff0c;但这并不是让你们对技术的认知层面要做到面面俱到&#xff0c;每个细节都清楚&#xff0c;而是只要知道产品开发的流程和研发所需的资源设备就可以了。 如何才能在短时间内掌握这些技术&#xff1f;最直接有效的…

PHP智能收银精准管理收银服务系统小程序源码

智能收银&#xff0c;精准管理 —— 解锁收银服务新境界 &#x1f389; 开篇&#xff1a;告别传统&#xff0c;迎接智能收银新时代 在快节奏的现代生活中&#xff0c;每一次购物体验都值得我们追求更加高效与便捷。传统的收银方式已难以满足商家与顾客日益增长的需求&#xff…