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)的一种方法相关推荐

  1. mysql批量删除进程_小程序批量删除云数据库里的数据

    我们用云开发的云数据库存数据,难免会遇到数据过多,或者一些过时数据要删除的需求.之前云开发删除数据库只能一条条的删除.要想批量删除很麻烦,近期云开发推出了批量删除数据的方法.甚至可以稍微改造下实现数据 ...

  2. mysql批量删除数据库_数据库实现批量删除数据的操作方法(代码实例)

    本篇文章就给大家介绍数据库实现批量删除数据的操作方法.有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助.package com.mescs.baseinfo.utils; import ...

  3. python调用matlab函数_从 Python 调用 MATLAB 函数的三种方法

    0. 实验环境Ubuntu 16.04 Matlab R2015b 1. 借助于 mlab 库 安装方法非常简单,只需一行命令 sudo pip install mlab 即可. import num ...

  4. 2023年最新qq空间说说怎么全部删除_QQ空间说说如何批量删除

    2023年最新QQ空间自动删除说说_2023批量删除QQ空间说说插件小工具_QQ空间如何一次性批量删除说说 一千多条说说怎么删?QQ空间说怎么批量删除_怎样把发的空间说说全删了 使用谷歌浏览器插件,一 ...

  5. excel删除无尽空白行_Excel2019如何批量删除表格中的空白行?

    在使用Excel2019编辑文档的时候,在表格中有很多的空白行如何批量的把这些空白行给删除掉呢 Excel2019如何批量删除表格中的空白行? 首先在电脑上用Excel2019打开要编辑的表格,可以看 ...

  6. python docx 合并文档 图片_使用python抓取大量简历文档内数据(word:docx;pdf;图片等)输出表格文件...

    1. 文章背景描述: 近期公司有员工离职了,技术岗位的. 让HR招人,招聘进度也太慢了,实在等不及,就撸起袖子自己上.(之前从来没招聘过) 自己在某招聘网站注册后,花了若干人民币,短时间收到大量求职者 ...

  7. python pypdf2另存为图片_用Python玩转PDF的各种骚操作

    文/Python数据科学  图片来源于网络 Portable Document Format(可移植文档格式),或者PDF是一种文件格式,可以用于跨操作系统的呈现和文档交换.尽管PDF最初是由Adob ...

  8. 如何使用python批量压缩图片_利用Python 批量压缩图片

    方法一 直接调整宽高 先放参考资料:如何用Python智能批量压缩图片? import math from glob import glob from PIL import Image import ...

  9. python 还原九宫格图片_用Python做一个好玩的朋友圈九宫格抽奖

    最近在朋友圈看到个好玩的抽奖九宫格: 随便点开一个: 设计思路 以朋友圈中看到的1号图做参考,我们需要准备 300*900 的白色底图,搞笑表情图,广告语,中间一个醒目的数字编号,外加下方的嘲讽&qu ...

  10. python 存储图片_使用python存储网页上的图片实例

    使用python存储网页上的图片实例 本文介绍在已知网络图片的地址下,存储图片到本地 本文例子随便选择LOFTER上一张图片,复制图片的地址,如下图所示 在Python中输入代码 import req ...

最新文章

  1. 基于反向代理的Web缓存应用-可缓存的CMS系统设计
  2. mysql + keepalived高可用
  3. 【HDU - 5963】朋友(博弈,思维,必胜态必败态,找规律)
  4. 像个字段相减绝对值_遇见你丨像个英雄一样活着 瘫痪作家用手指敲击文字著百万字文学作品...
  5. python全排列速度最快_python 写的两种打印全排列的方法速度对比
  6. C# html转mht
  7. ssis组件_SSIS脚本组件概述
  8. 【名额有限】腾讯技术工程-运维技术沙龙
  9. android root统计,《全球安卓手机 Root 数据报告》:学生党竟然是Root的骨灰级爱好者?...
  10. Redis一主二从Sentinel监控配置
  11. 机器学习——支持向量机support vector machine
  12. SDK对接遇到的问题与解决
  13. 2018 拼多多校招贪心算法题
  14. 如何了解职场公司信息,正确投简历?
  15. docker启动容器发生Error response from daemon故障
  16. 《思考的技术》的思考技术点
  17. CSS雕虫小技:八卦五行布图法介绍
  18. HTTP代理是什么意思?HTTP代理有什么用处?
  19. python获取行号_在python中获取当前位置所在的行号和函数名
  20. GAMS学习笔记02——GAMS读取Excel的数据

热门文章

  1. 【模型开发】评分卡应用
  2. 关掉win10电脑hyper-v虚拟机方法
  3. 专业的户外直播视频传输系统是如何搭建起来的?通过GB28181协议建立的户外直播方案
  4. 2-3、迭代法计算定积分
  5. Hadoop和HBase集群的JMX监控
  6. 什么是php 开发,php开发是什么?
  7. 【Python笔记】pyqt5进度条-多线程图像分块处理防止窗体卡顿
  8. 后台配置税码(进项税或者销项税税码)
  9. 联想e480怎么一键恢复_Lenovo笔记本电脑如何使用一键恢复
  10. python爬取公众号历史文章