吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9714|回复: 31
收起左侧

[Python 原创] 【原创】python批量删除pdf图片水印(Xobject)的一种方法

[复制链接]
制冷设备 发表于 2020-10-17 12:06
本帖最后由 制冷设备 于 2020-10-17 12:35 编辑

1.说明:

下载到的pdf总会有一些水印,pdf文件水印添加方式除了acrobat adobe自带的以外,还有很多,所以去除水印方法也很多,这里介绍的也只是一种适用python批量删除图片水印Xobject的方法,对于不想装pitstop、abbyy的情况可供君参考,程序需要完善的地方很多,目前只是实现单一的批量删除pdf图片水印。

2.分析:

分析原pdf水印,排除是页眉页脚,Acrobat添加水印等,在内容窗口分析,可看出此pdf水印为图片水印。
001.png

2.1 思路:

使用python的fitz库,pdf逐页提取扫描图片,图片再次合并为新pdf,完成“删除”水印。
网上有现成使用fitz库中._getXrefString()方法提取所有图片的代码,测试发现图片提取没有问题,但因为图片提取时无识别,导致提取页面顺序是乱的,水印页面也同样提取,需要通过另外的代码去判别剔除(使用PIL对大小判定可实现),顺序问题在在未深刻理解源代码的前提下未解决,故使用前述逐页提取目标页的方法,调试可行。

2.2 调试:

单页分析,使用fitz的page类下.getImageList()方法,单页得到所有图片信息数组,进一步分析其中的图片大小,可识别出第一个元素即为目标页,再第一个元素即为Xref,所以过程简化为逐页提取所有信息数组第一个元素即可。
002.png
输出图片后,使用fitz对图片逐页转成pdf并插入新pdf,最终输出页面图片(也可以选择不保存)以及新pdf。
004.png
003.png

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完成图片水印删除

免费评分

参与人数 7吾爱币 +7 热心值 +6 收起 理由
hj170520 + 1 + 1 我很赞同!
wanfon + 1 + 1 谢谢@Thanks!
lizhipei78 + 2 + 1 谢谢@Thanks!
Coptis2020 + 1 谢谢@Thanks!
1113 + 1 + 1 我很赞同!
叶凯 + 1 + 1 谢谢@Thanks!
dgy + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 制冷设备 发表于 2020-10-17 15:18
本帖最后由 制冷设备 于 2020-10-17 15:33 编辑
qq9199 发表于 2020-10-17 15:15
是的, 有大量的pdf文件, 偶尔有几个打不开, 一个个的找太费劲了.

打不开的,你可以发上来看看,有时间研究下。

搜了下,有现成的代码了,可以参考这个
https://blog.csdn.net/weixin_34336292/article/details/89821833
也有打包好的程序
http://gerry.lamost.org/blog/?p=919
还有传说中的pdftoy,不过没见过...
 楼主| 制冷设备 发表于 2020-10-24 20:03
漠北-孤城 发表于 2020-10-23 23:15
楼主 帮看一下这个怎么整  

或者说有成品吗 我自己操作就不用麻烦楼主了

之前在也帖子里回过的
因为这个水印是直接成为页面图片一部分了,不是在图层之上的一个对象
所以这个程序不适用
infox 发表于 2020-10-17 12:19
 楼主| 制冷设备 发表于 2020-10-17 12:26

打包的成品程序还没有,因为目前代码自用够用了,就没优化,后续界面化的话需要做一些判定条件。
中国好媳妇 发表于 2020-10-17 12:41
加油,虽然小白不会用pyton,但是思路看懂了
qq9199 发表于 2020-10-17 13:26
有没有检测pdf损坏的?
 楼主| 制冷设备 发表于 2020-10-17 13:45
qq9199 发表于 2020-10-17 13:26
有没有检测pdf损坏的?

这个代码里没有,具体想要批量检测pdf是否损坏?
小黑屋 发表于 2020-10-17 13:57
对于内容是图片的PDF管用
wanshiz 发表于 2020-10-17 13:57
楼主有本事
Coptis2020 发表于 2020-10-17 13:58
支持原创...........
yijian 发表于 2020-10-17 14:42
楼主你的这个python包可以给pdf加水印吗?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 10:14

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表