需求:用python批量删除有特定颜色字体的pdf页面

### Python 实现批量删除 PDF 中特定颜色字体的页面 要实现通过 Python 批量删除 PDF 文档中具有特定颜色字体的页面,可以借助 `PyMuPDF`(也称为 `fitz`)、`pypdf` 或其他类似的库来操作 PDF 文件。以下是具体的技术方案: #### 技术原理 1. **解析 PDF 页面内容**:利用 PyMuPDF 提取每一页的文字及其属性(如字体大小、颜色等)。 2. **筛选条件匹配**:检测是否有指定颜色的字体存在于某页中。如果存在,则标记该页为待移除状态。 3. **重新组装 PDF**:保留未被标记的页面并生成新的 PDF。 --- #### 示例代码 以下是一个完整的解决方案示例: ```python import fitz # PyMuPDF def check_page_for_color(page, target_rgb=(0, 0, 1)): # 默认目标颜色为蓝色 (R,G,B)=(0,0,1) """ 检查给定页面是否存在指定 RGB 值的颜色字体。 参数: page: 当前处理的 PDF 页面对象。 target_rgb: 目标颜色的 RGB 值,默认为纯蓝 (0, 0, 1)。 返回值: bool: 是否找到目标颜色字体。 """ text_instances = page.get_text("rawdict")["blocks"] for block in text_instances: if "lines" not in block: continue for line in block["lines"]: for span in line["spans"]: color = span.get("color", None) if isinstance(color, int): # 十六进制颜色编码转换 rgb = tuple((color >> i & 0xFF / 255 for i in (16, 8, 0))) elif isinstance(color, list): rgb = tuple(c / 255 for c in color[:3]) else: continue if abs(rgb[0] - target_rgb[0]) < 0.01 and \ abs(rgb[1] - target_rgb[1]) < 0.01 and \ abs(rgb[2] - target_rgb[2]) < 0.01: return True return False def remove_pages_with_specific_color(input_pdf_path, output_pdf_path, target_rgb=(0, 0, 1)): """ 移除包含特定颜色字体的所有页面。 参数: input_pdf_path: 输入 PDF 文件路径。 output_pdf_path: 输出 PDF 文件路径。 target_rgb: 待查找的目标颜色 (默认为蓝色)。 """ doc = fitz.open(input_pdf_path) pages_to_keep = [] for p_num in range(len(doc)): page = doc[p_num] if not check_page_for_color(page, target_rgb=target_rgb): pages_to_keep.append(p_num) new_doc = fitz.open() for idx in pages_to_keep: new_doc.insert_pdf(doc, from_page=idx, to_page=idx) new_doc.save(output_pdf_path) new_doc.close() if __name__ == "__main__": input_folder = "./input_pdfs" output_folder = "./output_pdfs" os.makedirs(output_folder, exist_ok=True) for filename in os.listdir(input_folder): if filename.endswith(".pdf"): input_pdf_path = os.path.join(input_folder, filename) output_pdf_path = os.path.join(output_folder, filename) try: remove_pages_with_specific_color( input_pdf_path=input_pdf_path, output_pdf_path=output_pdf_path, target_rgb=(0, 0, 1) # 设置为目标颜色 (RGB),例如蓝色 ) print(f"{filename} 已成功处理!") except Exception as e: print(f"处理 {filename} 出错: {str(e)}") ``` --- #### 关键点说明 1. **颜色比较逻辑**: 将十六进制颜色码转为标准化 `(r,g,b)` 形式以便于对比[^1]。 2. **性能优化**: 对大文件或复杂文档建议分批次读写以减少内存占用[^2]。 3. **跨平台支持**: 上述脚本适用于 Windows/Linux/MacOS 平台,只需调整输入/输出目录即可[^3]。 --- #### 注意事项 - 若目标颜色接近而非完全一致,需适当放宽误差范围(如 ±0.01)。 - 处理大量 PDF 文件时应考虑异常捕获机制以免中断整个流程。 ---

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

Python内容推荐

基于python的自动办公-22 批量修改word文件中的段落格式.zip

基于python的自动办公-22 批量修改word文件中的段落格式.zip

基于python的自动办公-22 批量修改word文件中的段落格式.zip

python自动化办公——python操作Excel、Word、PDF集合大全

python自动化办公——python操作Excel、Word、PDF集合大全

本文是鉴于有些粉丝的工作需求,有时候需要遇到这些文件的处理。因此,我写了一个文章集合,供大家参考,整篇文章已经整理成册(如下图所示),如有需求,请私聊! 目录   章节一:python使用openpyxl操作excel     1、openpyxl库介绍     2、python怎么打开及读取表格内容?        1)Excel表格述语        2)打开Excel表格并获取表格名称        3)通过sheet名称获取表格        4)获取表格的尺寸大小        5)获取表格内某个格子的数据          ① sheet[“A1”]方式          ② s

去除多种颜色的PDF水印!!!基于python & PYQT.zip

去除多种颜色的PDF水印!!!基于python & PYQT.zip

去除多种颜色的PDF水印!!!基于python & PYQT.zip

利用Python 自动化生成地质解释图件.pdf

利用Python 自动化生成地质解释图件.pdf

利用Python 自动化生成地质解释图件.pdf

Python办公自动化教程Word篇.pdf

Python办公自动化教程Word篇.pdf

Python办公自动化教程【Word篇】.pdf

Python数据分析实践:气温数据热力图.pdf

Python数据分析实践:气温数据热力图.pdf

6.2 气温数据热力图 ** 6.2.1 数据采集—气温数据 在绘图之前,需要说明一下绘图的数据源,案例中的数据是通过爬虫获取的,用的是 深圳8月份每天的最高气温,即生成两列数据(日期和最高气温)。在有了原始数据的基 础上,还需要对数据进行清洗和整理,关于这部分是做任何数据分析或可视化都必经的 坎。详细可以通过下面的代码来了解: 步骤一:数据采集 In [1]: import datetime import calendar import requests from bs4 import BeautifulSoup import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns import requests from lxml import etree import json import csv headers { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36

python-xlwt模块详解.pdf

python-xlwt模块详解.pdf

python-xlwt模块详解.pdf

Python库 | PyMuPDF-1.17.7-cp39-cp39-win32.whl

Python库 | PyMuPDF-1.17.7-cp39-cp39-win32.whl

python库,解压后可用。 资源全名:PyMuPDF-1.17.7-cp39-cp39-win32.whl

selenium-python.pdf

selenium-python.pdf

selenium-python.pdf

python自动化办公手册.pdf

python自动化办公手册.pdf

python自动化办公手册pdf ,更多Pyhon自动化学习可参考我的这篇文章:https://blog.csdn.net/qq_36816848/article/details/118077191

Python库 | pikepdf-2.16.1-cp38-cp38-win32.whl

Python库 | pikepdf-2.16.1-cp38-cp38-win32.whl

python库,解压后可用。 资源全名:pikepdf-2.16.1-cp38-cp38-win32.whl

Python库 | PyMuPDF-1.18.17-cp37-cp37m-win32.whl

Python库 | PyMuPDF-1.18.17-cp37-cp37m-win32.whl

python库,解压后可用。 资源全名:PyMuPDF-1.18.17-cp37-cp37m-win32.whl

python-xlwt模块详解借鉴.pdf

python-xlwt模块详解借鉴.pdf

python-xlwt模块详解借鉴.pdf

【案例】Python飞书机器人编辑表格.pdf

【案例】Python飞书机器人编辑表格.pdf

【案例】 【案例】Python飞书机器⼈编辑表格 飞书机器⼈编辑表格 #!/usr/bin/env python # -*- coding: utf-8 -*- from .config import * import requests import json class Bot: def __init__(self, app): self.app = app # app为机器⼈ self.table = None # 共享⽂档的table_id self.sheet = None # 共享⽂档的sheet_id self.token = self.get_token() self.header = { "Authorization": self.token, "Content-Type": "application/json; charset=utf-8" } def get_token(self): """获取应⽤token""" url = url_api['url_token'] headers = {"Content-Type": "text/plain"} r = requests.post(url, headers=headers, json=self.app) return "Bearer " + json.loads(r.text)['tenant_access_token'] def use(self, table, sheet): self.table = table self.sheet = sheet return self def add_data(self, sheet_range="", values=[]): """增加数据,原始数据下移""" data = { "valueRange": { "range": self.sheet + sheet_range, "values": values } } r = requests.post(urls['插⼊数据'] % self.table, headers=self.header, json=data) return r.text def del_data(self, major=0, start_index=1, end_index=1): """删除数据""" data = { "dimension": { "sheetId": self.sheet, "majorDimension": ['ROWS', 'COLUMNS'][major], "startIndex": start_index, "endIndex": end_index } } r = requests.delete(urls['删除数据'] % self.table, headers=self.header, json=data) return r.text def union_cell(self, sheet_range, major=0): """合并单元格""" url = urls['合并单元格'] % self.table data = { "range": self.sheet + sheet_range, "mergeType": ['MERGE_ALL', 'MERGE_ROWS', 'MERGE_COLUMNS'][major] } r = requests.post(url, headers=self.header, json=data) return r.text def split_cell(self, sheet_range): """拆分单元格""" data = { "range": self.sheet + sheet_range } r = requests.post(urls['拆分单元格'] % self.table, headers=self.header, json=data) return r.text def set_style(self, sheet_range, kind): def set_style(self, sheet_range, kind): """设置单元格格式""" data = { "appendStyle": { "range": self.sheet + sheet_range, "style": self.style_list(kind) } } r = requests.put(urls['设置单元格格式'] % self.table, headers=self.header, json=data) return r.text def phone_to_open_id(self, mobile

_leetcode-python.pdf

_leetcode-python.pdf

LeetCode的解题思路 包含问题 1-200. Python version... pdf格式

Python库 | pdf-diff3-0.9.2.tar.gz

Python库 | pdf-diff3-0.9.2.tar.gz

python库。 资源全名:pdf-diff3-0.9.2.tar.gz

aspose-cells-8.5.2.rar

aspose-cells-8.5.2.rar

excel转pdf

DOT文件转换为DOC文件.rar

DOT文件转换为DOC文件.rar

DOT文件转换为DOC文件.rar

spire.pdf.free

spire.pdf.free

读取pdf 内容 版本 spire.pdf.free-4.4.1

pdf设置书签

pdf设置书签

NULL 博文链接:https://bilipan.iteye.com/blog/1012178

最新推荐最新推荐

recommend-type

科技中介服务机构如何利用平台提升服务质量与客户粘性?.docx

科技中介服务机构如何利用平台提升服务质量与客户粘性?
recommend-type

(共129页PPT)一个鸡蛋品某省市定位农业品牌小鲜蛋战略创意报告全案某著名企业.pptx

(共129页PPT)一个鸡蛋品某省市定位农业品牌小鲜蛋战略创意报告全案某著名企业.pptx
recommend-type

高校技术转移办公室人员如何系统化管理院所的科技成果转化资源?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。
recommend-type

科技中介服务机构如何提升技术需求挖掘的准确性?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。
recommend-type

空心杯电机:机器人驱动全球精密微型运动新增长.docx

空心杯电机:机器人驱动全球精密微型运动新增长
recommend-type

科研院所如何利用生成式AI构建科创知识图谱与智能体,实现低成本数据驱动决策与高效技术转移

资源摘要信息:“科研院所如何借助生成式AI赋能工具突破客户获取成本攀升,达成打造低成本的数据驱动决策能力?”这一命题直指当前我国科技创新体系中最关键、最紧迫的结构性矛盾——科研供给侧与产业需求侧之间的系统性脱节。其核心知识点涵盖生成式人工智能(GenAI)在科技成果转化全生命周期中的深度嵌入逻辑、数据要素重构创新服务范式的底层机制、以及以“科创知识图谱+数智应用+智能体”三位一体架构支撑的新型技术转移基础设施建设路径。具体而言,该知识点体系可从五个维度展开深度解析:第一,生成式AI对传统技术转移价值链的解构与重铸。不同于以往仅作为辅助工具的AI应用,生成式AI凭借其强大的语义理解、跨模态推理、动态内容生成与上下文自适应能力,实现了从“被动响应式匹配”向“主动预见式策动”的范式跃迁。例如,在专利价值评估环节,生成式AI不再局限于结构化指标打分,而是通过融合专利文本、引用网络、技术演进脉络、竞品布局、产业政策文本、企业年报、投融资事件等多源异构数据,构建动态演化型技术价值预测模型;它能自动生成《某纳米催化剂专利在新能源汽车电池回收场景下的商业化潜力白皮书》,包含技术成熟度(TRL)、市场渗透节奏推演、潜在合作企业画像、风险预警清单及定制化转化路径建议,将原本需3–6个月的人工尽调压缩至小时级输出,显著降低客户触达前的沉没成本。第二,科创知识图谱作为AI赋能的底层认知基座,其构建绝非简单实体关系抽取,而是融合领域本体工程、专家规则注入、大模型微调与持续反馈学习的闭环系统。该图谱需覆盖“技术—学科—专利—标准—论文—人才—企业—园区—政策—资本—产业链—应用场景”12类核心节点,并建立超百万级三元组的动态关联网络,支持语义级检索、技术路线推演、断点识别与替代方案生成。第三,数智应用层体现为面向不同角色的轻量化、场景化SaaS工具集:面向科研人员的“成果智荐助手”可自动将结题报告转化为技术简报、商业计划书初稿与PPT路演素材;面向企业CTO的“需求反向寻技引擎”支持以自然语言描述产线痛点(如“注塑件表面熔接痕超标且良率低于82%”),即时推送匹配度Top5的高校专利、中试进展、技术持有人联系方式及成功案例视频;面向技术经理人的“转化沙盘推演系统”则集成政策计算器、资金链模拟器、风险热力图与合规审查模块,实现全流程数字化预演。第四,智能体(Agent)架构赋予平台自主协同能力:多个专业Agent(如“政策解读Agent”“法律合规Agent”“估值建模Agent”“路演辅导Agent”)可在用户授权下组成临时协作团队,自动完成从需求确认、知识产权尽调、作价入股方案设计到对接地方政府专项基金的端到端服务,彻底打破传统中介依赖强、响应慢、标准化低的瓶颈。第五,低成本数据驱动决策能力的本质,是构建“感知—分析—决策—执行—反馈—进化”的PDCA智能飞轮:通过埋点采集用户行为、转化进度、市场反馈等实时数据,持续优化推荐算法、调整知识图谱权重、迭代Agent策略库,使整个科技创新服务平台具备自我进化能力。这种能力不仅将单次客户获取成本降低60%以上(科易网实测数据),更使科研院所能基于全域转化数据,精准识别优势学科集群、预判区域产业升级方向、动态配置技术转移专项经费、科学评估团队绩效,真正实现从“经验治所”到“数据治所”的战略升级。尤为关键的是,该模式并非替代科研人员,而是将其从繁琐的信息筛选、文书撰写、流程协调中解放,聚焦于高价值的技术再创新与战略级产学研协同设计,从而在根本上重塑国家创新体系的运行效率与韧性。
recommend-type

用Rust构建企业级中后台:RushWind Admin开源实践与踩坑记录

上个月一个周五的晚上,我把 RushWind Admin 的仓库从 private 切成了 public。这个用 **Rust** 写的 **企业级中后台** 框架,从那天起正式 **开源** 了。 做这个项目的起因其实很朴素。我在过去几年里反复做企业内部管理系统,从供应链后台到运营平台,每次都是用户管理、角色权限、菜单配置、增删改查,换个业务壳再来一遍。一开始用 Java,后来换过 Go,确实都能干,但总觉得少了点东西。直到我把其中一个核心后端用 Rust 重写之后,才发现这个领域被低估了太多——Rust 的强类型、内存安全和极致性能,恰恰是中后台系统最需要的三样东西,只是很少有人愿意把这
recommend-type

思科虚拟环境里路由器和服务器是怎么配合工作的?

### 思科虚拟机环境中路由器与服务器的关系及作用 在思科虚拟机环境中的路由器与服务器之间的交互主要体现在以下几个方面: #### 路由器的功能和角色 路由器作为网络设备的核心组件之一,在虚拟化环境下同样承担着重要的职责。它不仅负责数据包的转发,还提供多种管理功能来保障网络性能和安全性。例如,`show` 命令可以帮助管理员查看路由器的状态、配置以及资源利用率等信息[^1]。 #### 服务器的角色 服务器则是在计算能力和服务提供方面的核心节点。特别是在云环境中,当内网IP资源较为充裕时,可以通过特定技术手段使虚拟机直接利用宿主机的物理网卡进行通信,从而减少中间环节带来的延迟并提升效率[
recommend-type

VPP插件pktdump源码分析与数据包捕获功能实现

VPP(Vector Packet Processing)是由思科公司主导开发的高性能开源网络数据平面框架,广泛应用于电信运营商、云服务提供商及边缘计算场景中,其核心目标是实现接近线速(line-rate)的数据包转发能力,同时保持高度可扩展性与模块化设计。本压缩包命名为“vpp_plugin.zip”,虽标题简洁,但实质承载的是VPP生态中极为关键的一类组件——插件(Plugin)。在VPP架构中,插件机制是其区别于传统内核网络栈(如Linux kernel netfilter)的核心设计理念之一:VPP本身提供统一的向量化处理引擎、内存管理(如buffer pool、ring-based packet I/O)、事件调度器(worker thread模型)、CLI接口及API服务层,而具体协议支持、硬件驱动、监控功能、调试工具等均以动态加载插件的方式实现,从而实现“核心精简、功能按需”的工程哲学。 压缩包内包含两个文件:`pktdump.am` 和 `pktdump`,二者构成一个完整的VPP插件单元。其中,`pktdump` 是编译后的可执行插件二进制文件(通常为ELF格式共享对象,即.so文件,但在VPP构建体系中常以无扩展名方式命名),而 `pktdump.am` 则是Autotools构建系统中的Automake模板文件(.am后缀),用于指导插件源码的编译流程,包括头文件路径、依赖库链接(如vppinfra、vlib、vnet)、编译标志(-fPIC、-shared)、安装规则等。该插件名称“pktdump”直指其功能本质——数据包抓取与转储(Packet Dump),属于VPP中最基础也最常用的调试类插件之一。它并非替代tcpdump或Wireshark的全功能抓包工具,而是深度嵌入VPP数据通路的轻量级观测模块,可在任意VPP graph node(如ip4-input、ethernet-input、ip4-lookup等)前后注入钩子(hook),实时捕获经过该节点的原始packet buffer内容,并支持多种输出方式:控制台打印(hex dump + ASCII)、环形缓冲区缓存、文件写入(pcap格式兼容)、甚至通过VPP API回调至外部管理进程。 从技术实现层面看,pktdump插件严格遵循VPP插件开发规范:首先定义`vlib_plugin_register_t`结构体全局变量,声明插件元信息(版本号、作者、描述、初始化/退出函数入口);其次实现`pktdump_init()`函数,在VPP启动时注册CLI命令(如`pktdump enable`, `pktdump disable`, `pktdump set filter`)、API消息类型(通过vpp-api-python或binary API调用)、以及graph node hook点;最关键的是其hook逻辑——利用VPP的node dispatch机制,在目标node执行前或后,遍历待处理的vector(即一批连续的packet buffers),对每个buffer调用`vlib_buffer_get_current()`获取L2/L3起始地址,结合`vlib_buffer_length_in_chain()`计算总长度,再依据用户配置的过滤条件(如源IP、目的端口、协议类型)进行匹配,命中则执行dump动作。整个过程完全运行在用户态,不触发上下文切换或系统调用,避免了传统抓包工具因频繁陷入内核导致的性能瓶颈,单核即可稳定捕获10M+ pps的流量样本。 此外,pktdump插件还体现VPP的内存零拷贝特性:dump操作直接读取vlib_buffer中预分配的data区域,无需memcpy复制到用户缓冲区;其日志输出采用VPP内置的`clib_warning()`或`vlib_cli_output()`,与VPP主日志系统无缝集成;插件热加载/卸载支持(通过`vppctl plugin reload`)确保运维过程中业务不中断。在实际部署中,pktdump常被用于故障定位(如ACL策略未生效、NAT转换异常)、性能分析(识别特定流引发的缓存失效)、协议栈验证(检查分片重组是否正确)等场景。值得注意的是,由于其运行于高速转发路径,生产环境启用时需谨慎配置采样率(如每千包抓1个)与缓冲区大小,防止因I/O阻塞拖慢整体吞吐。综上所述,“vpp_plugin.zip”虽仅含两个文件,却浓缩了VPP插件化架构的设计精髓、向量化编程范式、用户态网络栈调试方法论及电信级软件工程实践,是深入理解现代高性能数据平面不可或缺的学习样本与实战工具。
recommend-type

恐惧饥荒自建服务器全指南:从CPU选型到SteamCMD部署与排错

## 1. 为什么50人的房间却撑不过开局:先说清楚恐惧饥荒服务器的本质 先交代一句,我入坑恐惧饥荒(Dread Hunger)自建服务器,不是因为官方服务器不够用,而是被延迟逼的。当年200多人的服务器列表刷下来,亚洲节点一只手数得过来,进美服顶着180ms延迟,开个煤桶导航半天转不过身。更别提官方服务器偶尔来一次集体掉线,一船人莫名其妙全被送回大厅。所以我才决定自己搭一台专服,从硬件选型到配置文件逐行打磨,前前后后折腾了将近一个星期。 这个游戏和其他用UNITY引擎的生存游戏不太一样。**恐惧饥荒的专用服务器本质上是一个独立的64位进程**,博主在搜"服务器配置[20260926011