当前位置: 首页 > news >正文

用python裁切PDF文件中的图片

想把所有pdf文件的图片下边裁切掉一块,用Adobe Acrobat只能一页页处理,于是想到了用python进行批处理。

代码如下:

"""
Title: cutPdfImage
Author: JackieZheng
Date: 2024-09-26 20:51:24
LastEditTime: 2024-09-26 22:14:24
LastEditors:
Description:
FilePath: \\pythonCode\\cutPdfImage.py
"""import fitz  # pip install pymupdfdef cut_images_and_replace(pdf_path):doc = fitz.open(pdf_path)for page_num in range(len(doc)):if page_num > 147:  # 从哪页开始处理page = doc[page_num]img_xrefs = page.get_images(full=True)for img_index, img in enumerate(img_xrefs):xref = img[0]base_image = doc.extract_image(xref)pix = fitz.Pixmap(doc, xref)# 假设裁切后图像大小new_width = pix.widthnew_height = pix.height - 150# 创建新图像new_pix = fitz.Pixmap(fitz.csRGB,fitz.Rect(0, 0, new_width, new_height),pix.alpha)# 将原图像复制到新图像中new_pix.copy(pix, fitz.Rect(0, 0, new_width, new_height))# 删除原图片page.delete_image(xref)# 插入裁切后的图片page.insert_image((0, 0, page.rect.width, page.rect.height - 20),pixmap=new_pix,keep_proportion=True)print(f"Processed and replaced image {img_index + 1} on page {page_num + 1}.")doc.save(pdf_path[:-4] + '_processed.pdf')doc.close()pdf_file_path = "C:\\Users\\JackieZheng\\Desktop\\22.pdf"
cut_images_and_replace(pdf_file_path)

PS:处理后的文件会变大,有兴趣的同学可以优化下。

相关文章:

  • 力扣(leetcode)每日一题 1014 最佳观光组合
  • React第十章(useState)
  • windows上安装mingw教程及mingw64国内下载地址汇总
  • 【JavaEE】http/https 超级详解
  • 六,MyBatis-Plus 扩展功能(逻辑删除,通用枚举,字段类型处理,自动填充功能,防全表更新与删除插件,MybatisX快速开发插件)
  • css的盒模型
  • 数据集-目标检测系列-豹子 猎豹 检测数据集 leopard>> DataBall
  • Spring Boot框架下的足球青训俱乐部后台开发
  • 数据分析-28-交互式数据分析EDA工具和低代码数据科学工具
  • C++ STL(1)迭代器
  • 速刷DuckDB官网24小时-掌握核心功法
  • 基于Hive和Hadoop的电商消费分析系统
  • 新农人的求索:既要种菜,也要种钱
  • web开发(1)-基础
  • 2024年7月大众点评乌鲁木齐美食店铺基础信息
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 【comparator, comparable】小总结
  • bootstrap创建登录注册页面
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • JAVA多线程机制解析-volatilesynchronized
  • Java-详解HashMap
  • linux安装openssl、swoole等扩展的具体步骤
  • scrapy学习之路4(itemloder的使用)
  • 汉诺塔算法
  • 力扣(LeetCode)357
  • 前端存储 - localStorage
  • 问题之ssh中Host key verification failed的解决
  • 线上 python http server profile 实践
  • 一个完整Java Web项目背后的密码
  • nb
  • ​比特币大跌的 2 个原因
  • (1)Jupyter Notebook 下载及安装
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (k8s)kubernetes 部署Promehteus学习之路
  • (ZT)薛涌:谈贫说富
  • (第27天)Oracle 数据泵转换分区表
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (二)延时任务篇——通过redis的key监听,实现延迟任务实战
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (六)DockerCompose安装与配置
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (转) RFS+AutoItLibrary测试web对话框
  • ./和../以及/和~之间的区别
  • .NET C# 使用GDAL读取FileGDB要素类
  • .Net Core 生成管理员权限的应用程序
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • /etc/shadow字段详解
  • @ohos.systemParameterEnhance系统参数接口调用:控制设备硬件(执行shell命令方式)
  • @staticmethod和@classmethod的作用与区别
  • [ 数据结构 - C++]红黑树RBTree
  • [2024最新教程]地表最强AGI:Claude 3注册账号/登录账号/访问方法,小白教程包教包会