python pdf删除图片_【原创】python批量删除pdf图片水印(Xobject)的一种方法
1.说明:
下载到的pdf总会有一些水印,pdf文件水印添加方式除了acrobat adobe自带的以外,还有很多,所以去除水印方法也很多,这里介绍的也只是一种适用python批量删除图片水印Xobject的方法,对于不想装pitstop、abbyy的情况可供君参考,程序需要完善的地方很多,目前只是实现单一的批量删除pdf图片水印。
2.分析:
分析原pdf水印,排除是页眉页脚,Acrobat添加水印等,在内容窗口分析,可看出此pdf水印为图片水印。
001.png (285.23 KB, 下载次数: 1)
2020-10-17 12:06 上传
2.1 思路:
使用python的fitz库,pdf逐页提取扫描图片,图片再次合并为新pdf,完成“删除”水印。
网上有现成使用fitz库中._getXrefString()方法提取所有图片的代码,测试发现图片提取没有问题,但因为图片提取时无识别,导致提取页面顺序是乱的,水印页面也同样提取,需要通过另外的代码去判别剔除(使用PIL对大小判定可实现),顺序问题在在未深刻理解源代码的前提下未解决,故使用前述逐页提取目标页的方法,调试可行。
2.2 调试:
单页分析,使用fitz的page类下.getImageList()方法,单页得到所有图片信息数组,进一步分析其中的图片大小,可识别出第一个元素即为目标页,再第一个元素即为Xref,所以过程简化为逐页提取所有信息数组第一个元素即可。
002.png (63.31 KB, 下载次数: 3)
2020-10-17 12:06 上传
输出图片后,使用fitz对图片逐页转成pdf并插入新pdf,最终输出页面图片(也可以选择不保存)以及新pdf。
004.png (20.6 KB, 下载次数: 1)
2020-10-17 12:06 上传
003.png (231.36 KB, 下载次数: 0)
2020-10-17 12:06 上传
3.代码实现:
import fitz #pip install pymupdf
import io,os
from PIL import Image
path = r'更大的信息 test.pdf' #目标pdf
pdfname = path.split(".")[0]
f_path = r'img\\' #图片输出文件夹
pdf = fitz.open(path)
doc = fitz.open()
#逐页读取页面
for page_index in range(len(pdf)):
page = pdf[page_index]
target_xref= page.getImageList()[0][0]#取得当前页面目标页xref信息
base_image = pdf.extractImage(target_xref)
image_bytes = base_image["image"] #提取image信息
image_ext = base_image["ext"] #提取图片后缀
image = Image.open(io.BytesIO(image_bytes)) #输出保存图片
output_path = f"{f_path}{pdfname}_{(page_index+1):03}.{image_ext}"
image.save(output_path)
imgdoc = fitz.open(output_path) #对输出图片转pdf
pdfbytes = imgdoc.convertToPDF()
imgpdf = fitz.open("pdf", pdfbytes)
doc.insertPDF(imgpdf) #逐页插入图片
# os.remove(output_path) # 逐页删除图片(可选)
doc.save(f"{f_path}{pdfname}_neo.pdf") #保存新pdf完成图片水印删除
python pdf删除图片_【原创】python批量删除pdf图片水印(Xobject)的一种方法相关推荐
- mysql批量删除进程_小程序批量删除云数据库里的数据
我们用云开发的云数据库存数据,难免会遇到数据过多,或者一些过时数据要删除的需求.之前云开发删除数据库只能一条条的删除.要想批量删除很麻烦,近期云开发推出了批量删除数据的方法.甚至可以稍微改造下实现数据 ...
- mysql批量删除数据库_数据库实现批量删除数据的操作方法(代码实例)
本篇文章就给大家介绍数据库实现批量删除数据的操作方法.有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助.package com.mescs.baseinfo.utils; import ...
- python调用matlab函数_从 Python 调用 MATLAB 函数的三种方法
0. 实验环境Ubuntu 16.04 Matlab R2015b 1. 借助于 mlab 库 安装方法非常简单,只需一行命令 sudo pip install mlab 即可. import num ...
- 2023年最新qq空间说说怎么全部删除_QQ空间说说如何批量删除
2023年最新QQ空间自动删除说说_2023批量删除QQ空间说说插件小工具_QQ空间如何一次性批量删除说说 一千多条说说怎么删?QQ空间说怎么批量删除_怎样把发的空间说说全删了 使用谷歌浏览器插件,一 ...
- excel删除无尽空白行_Excel2019如何批量删除表格中的空白行?
在使用Excel2019编辑文档的时候,在表格中有很多的空白行如何批量的把这些空白行给删除掉呢 Excel2019如何批量删除表格中的空白行? 首先在电脑上用Excel2019打开要编辑的表格,可以看 ...
- python docx 合并文档 图片_使用python抓取大量简历文档内数据(word:docx;pdf;图片等)输出表格文件...
1. 文章背景描述: 近期公司有员工离职了,技术岗位的. 让HR招人,招聘进度也太慢了,实在等不及,就撸起袖子自己上.(之前从来没招聘过) 自己在某招聘网站注册后,花了若干人民币,短时间收到大量求职者 ...
- python pypdf2另存为图片_用Python玩转PDF的各种骚操作
文/Python数据科学 图片来源于网络 Portable Document Format(可移植文档格式),或者PDF是一种文件格式,可以用于跨操作系统的呈现和文档交换.尽管PDF最初是由Adob ...
- 如何使用python批量压缩图片_利用Python 批量压缩图片
方法一 直接调整宽高 先放参考资料:如何用Python智能批量压缩图片? import math from glob import glob from PIL import Image import ...
- python 还原九宫格图片_用Python做一个好玩的朋友圈九宫格抽奖
最近在朋友圈看到个好玩的抽奖九宫格: 随便点开一个: 设计思路 以朋友圈中看到的1号图做参考,我们需要准备 300*900 的白色底图,搞笑表情图,广告语,中间一个醒目的数字编号,外加下方的嘲讽&qu ...
- python 存储图片_使用python存储网页上的图片实例
使用python存储网页上的图片实例 本文介绍在已知网络图片的地址下,存储图片到本地 本文例子随便选择LOFTER上一张图片,复制图片的地址,如下图所示 在Python中输入代码 import req ...
最新文章
- 基于反向代理的Web缓存应用-可缓存的CMS系统设计
- mysql + keepalived高可用
- 【HDU - 5963】朋友(博弈,思维,必胜态必败态,找规律)
- 像个字段相减绝对值_遇见你丨像个英雄一样活着 瘫痪作家用手指敲击文字著百万字文学作品...
- python全排列速度最快_python 写的两种打印全排列的方法速度对比
- C# html转mht
- ssis组件_SSIS脚本组件概述
- 【名额有限】腾讯技术工程-运维技术沙龙
- android root统计,《全球安卓手机 Root 数据报告》:学生党竟然是Root的骨灰级爱好者?...
- Redis一主二从Sentinel监控配置
- 机器学习——支持向量机support vector machine
- SDK对接遇到的问题与解决
- 2018 拼多多校招贪心算法题
- 如何了解职场公司信息,正确投简历?
- docker启动容器发生Error response from daemon故障
- 《思考的技术》的思考技术点
- CSS雕虫小技:八卦五行布图法介绍
- HTTP代理是什么意思?HTTP代理有什么用处?
- python获取行号_在python中获取当前位置所在的行号和函数名
- GAMS学习笔记02——GAMS读取Excel的数据