有时候想把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提取对应的图片内容,就是这么简单,我们来提取下一张发票里的图片:

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

2.删除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')

我们来执行看下:

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

3、替换图片

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

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

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

#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')

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

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

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

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

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

使用PyMuPdf提取、删除及替换PDF中的图片文件相关推荐

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

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

  2. 使用PyMuPdf删除及替换PDF中的图片

    import fitzif tuple(map(int, fitz.VersionBind.split("."))) < (1, 19, 5):raise ValueErro ...

  3. pdf覆盖图片 Java_Java 添加、替换、删除PDF中的图片的示例代码

    概述 本文介绍通过java程序向PDF文档添加图片,以及替换和删除PDF中已有的图片.另外,关于图片的操作还可参考设置PDF 图片背景.设置PDF图片水印.读取PDF中的图片.将PDF保存为图片等文章 ...

  4. Java 添加、替换、删除PDF中的图片

    本文介绍通过java程序向PDF文档添加图片,以及替换和删除PDF中已有的图片. 工具: Free Spire.PDF for Java (免费版) Jar获取及导入:官网下载,并解压将lib文件夹下 ...

  5. java pdf 图片替换_Java 添加、替换、删除PDF中的图片

    Java 添加.替换.删除PDF中的图片 本文介绍通过java程序向PDF文档添加图片,以及替换和删除PDF中已有的图片. 工具:Free Spire.PDF for Java (免费版) Jar获取 ...

  6. 三种方法,Python轻松提取PDF中全部图片

    有时我们需要将一份或者多份PDF文件中的图片提取出来,如果采取在线的网站实现的话又担心图片泄漏,手动操作又觉得麻烦,其实用Python也可以轻松搞定! 今天就跟大家系统分享几种Python提取 PDF ...

  7. 通过Python的fitz库提取pdf中的图片

    文章目录 前言 一.fitz库是什么? 二.安装fitz库 三.查看fitz库版本 四.pymupdf库是什么? 五.安装pymupdf库 六.查看pymupdf库版本 七.fitz和pymupdf是 ...

  8. 图片提取利器,从PDF中快速提取图片并存储到本地

    PDF是日常生活中经常使用的文件格式,里面可能包含着重要的文字信息和图片资源.然而当需要提取PDF中的图片时,往往需要使用复杂的工具.图片提取利器能够帮助你从PDF中快速提取图片并存储到本地. # c ...

  9. C# Pdf转Png,提取Pdf中的图片

    把Pdf转为图片png格式 命名空间: using Aspose.Pdf; using System.IO; using Aspose.Pdf.Devices; 需要NuGet的包:Aspose.Pd ...

最新文章

  1. golang socket读写同时_epoll在Golang的应用
  2. python以及MATLAB终止循环的快捷键
  3. SQL中的sysobjects与syscolumns
  4. spring配置JDBC事务
  5. 300+队伍/8大直播间,这场NXP智能车竞赛谁才是真的神车?
  6. NSArray创建和使用
  7. pytorch 创建神经网络
  8. 物联网设备数量激增,续航难题该如何解决?
  9. python体测成绩数据分析统计服_体测成绩数据分析
  10. Spring Cloud Alibaba | Dubbo 与 Spring Cloud 完美结合
  11. Java后端开发工程师学习笔记【狂神说Java笔记】
  12. oracle中asm是什么,什么是ASM?
  13. 存储器——存储器容量扩充
  14. 利用mysql客户端查询UCSC数据库
  15. java try 性能损耗_Java上的try catch并不影响性能(转)
  16. 【未来简史】读书笔记
  17. 统计出各分数段的人数
  18. 成员函数的重载、覆盖与隐藏(详细)【转】
  19. 【数据挖掘】关联规则之Galois Closure Based Approach(基于Galois闭包的方法)
  20. ChatGPT会取代互联网程序员吗?

热门文章

  1. 游戏片子“战火兄弟连”正式公映
  2. Scratch 创意游戏(一):弹球游戏
  3. python控制网分_python奇技淫巧
  4. 《你要相信 没有到不了的明天》支撑我走过无数艰难岁月
  5. Heroku搭建简单网站
  6. [blender]制作一个low poly wash basin低模洗手盆
  7. 网络传输大端序_大端、小端与网络字节序
  8. 历届奥运会火炬接力基本情况
  9. web应用程序安全工具和资源(漏洞银行 收集整理)
  10. JSPatch来更新已上线的App中出现的BUG(超级详细)