python pdf删除图片_使用PyMuPdf提取、删除及替换PDF中的图片文件

《python pdf删除图片_使用PyMuPdf提取、删除及替换PDF中的图片文件》

有时候想把PDF中的图片文件提取出来,身为程序员的我当然是自己写段代码来实现,先看看了网上的方法,都是逐行遍历,正则匹配来提取什么的,其实没有那么复杂,PyMuPdf官方文档里自带就有提取图片文件的方法,非常简单,下来用代码来记录下:

1.提取图片

#coding:utf-8

import fitz,os

doc = fitz.open(‘E:\\files\\25109878.pdf’)

imgcount=0

for page in doc:

imageList = page.getImageList()

print(imageList)

for imginfo in imageList:

pix = fitz.Pixmap(doc, imginfo[0])

pix.writePNG(os.path.join(“test\\t_{}.png”.format(imgcount)))

imgcount+=1

短短几行代码聊表心意,通过page.getImageList()提取到图片列表信息,然后在使用fitz.Pixmap提取对应的图片内容,就是这么简单,我们来提取下一张发票里的图片:

《python pdf删除图片_使用PyMuPdf提取、删除及替换PDF中的图片文件》

电子发票里基本都是文字形式的,只有二维码和下方印章的图片,执行上面的代码看看:

《python pdf删除图片_使用PyMuPdf提取、删除及替换PDF中的图片文件》

2.删除PDF中的图片部分

在官方文档里我没看到,但是在它的库文件有这个方法:

《python pdf删除图片_使用PyMuPdf提取、删除及替换PDF中的图片文件》

这个xref对应的应该是图片所在位置的行数

#coding:utf-8

import fitz,os

doc = fitz.open(‘E:\\files\\25109878.pdf’)

imgcount=0

for page in doc:

imageList = page.getImageList()

print(imageList)

for imginfo in imageList:

#删除图片

doc._deleteObject(imginfo[0])

#重新保存PDF

doc.save(‘111.pdf’)

我们来执行看下:

《python pdf删除图片_使用PyMuPdf提取、删除及替换PDF中的图片文件》

很明显图片部分已经删除掉了!

3、替换图片

关于这块由于时间原因没有过多的去研究,这里面有个问题就是,怎么让自己的图片按照PDF中显示的位置及大小进行替换,稍微看下了官方文档,里面只有个insertImage这个方法是插入图片,但是其中有个rect的参数(top,left,wight,height),这几个参数我没太搞明白怎么获取到原始图片的位置及大小,因为有可能图片是缩放过的,于是看了下insertImage的源代码,发现有个_imgname的属性。

《python pdf删除图片_使用PyMuPdf提取、删除及替换PDF中的图片文件》

原本的方法是在原来的图片后面追加一张图片:

《python pdf删除图片_使用PyMuPdf提取、删除及替换PDF中的图片文件》

但是这里就有我提出来的问题怎么获取到原始图片的位置及宽高,目前我还没有找到这个方法,但发现了一个勉为其难的方法,我将红色部分注释掉,然后这样写:

#coding:utf-8

import fitz,os

doc = fitz.open(‘E:\\files\\25109878.pdf’)

imgcount=0

for page in doc:

imageList = page.getImageList()

for imginfo in imageList:

rect = fitz.Rect(0, 0, 80, 80)

page.insertImage(rect, filename=”test.png”, _imgname=imginfo[7])

doc.save(‘111.pdf’)

《python pdf删除图片_使用PyMuPdf提取、删除及替换PDF中的图片文件》

这里的insertImage加入图片的方式有3种,这里我们直接通过文件名加载,imginfo[7]就是原始图片的name,我直接插入到原始图片的位置,我们来执行看看:

《python pdf删除图片_使用PyMuPdf提取、删除及替换PDF中的图片文件》

这样貌似是实现了图片的替换,但上面多了一块fitz.Rect(0, 0, 80, 80)这个区域,查了下文档貌似没找到好的办法处理,那我就将它设置为fitz.Rect(0, 0, 0.1, 0.1),我们来看看:

《python pdf删除图片_使用PyMuPdf提取、删除及替换PDF中的图片文件》

这样就勉强实现了替换的效果,其实主要关键就是怎么获取到原始图片的坐标及宽高,如果能解决这个问题,那就不需要这么麻烦的操作,由于时间原因,我也没有过多的去深入研究了,如果有知道的小伙伴记得@我^_^

以上就是利用PyMuPdf提取、删除及替换PDF中的图片文件

《python pdf删除图片_使用PyMuPdf提取、删除及替换PDF中的图片文件》

关注公众号,超越平凡才能成就自我

    原文作者:weixin_39623355
    原文地址: https://blog.csdn.net/weixin_39623355/article/details/110899317
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞