继上篇从PDF中提取图片数据之后,我们看如何使用PIL修改图片并写入到PDF文件。
先放两个相关链接:
使用PyPDF4提取pdf文件中的图片

PIL从内存中加载图片

先放代码:

import PyPDF4
from io import BytesIO
from PIL import Image, ImageDrawdef covertImg(bimg):img = Image.open(BytesIO(bimg))# 看你想实现什么功能了im = doSomething(img)stream = BytesIO()# 将图片保存到stream中# 注意,保存的格式要和pdf中原图片的格式保持一致im.save(stream, 'jpeg')img.close()return stream.getvalue()pdf = PyPDF4.pdf.PdfFileReader("pdffile.pdf")
newpdf = PyPDF4.pdf.PdfFileWriter()for i in range(0, pdf.getNumPages()):pg = pdf.getPage(i)obj = pg['/Resources']['/XObject']for j in obj:img = obj[j].getData()stream = covertImg(img)# 在PyPDF4 1.27.0中,此方法未实现,需要修改obj[j].setData(stream)newpdf.addPage(pg)with open('newpdf.pdf', 'wb') as f:newpdf.write(f)

划重点!!!

上面代码中的obj[j]是一个EncodedStreamObject的实例,在PyPDF4 1.27.0版本中,EncodedStreamObject类中的setData方法并未实现。此版本的发布时间是18年8月,很可能不会再更新了。

最简单的修改方法:

  1. 打开PyPDF4模块中的generic.py
  2. 找到EncodedStreamObject类中的setData方法
  3. 将方法中的原有代码注释,添加self._data = data

修改结果如下:

使用此方法要注意修改后的图片格式要和原图片格式保持一致,如果图片格式不一致,图片将无法正常显示。

另外pdf结构中保存了图片的宽度和高度等信息,如果更换后的图片大小(宽度*高度)和原图片的不一致,可能也会产生问题。

使用PyPDF4和PIL修改PDF文件中的图片相关推荐

  1. 怎么修改PDF文件中的文字

    怎么修改PDF文件中的文字 最初PDF只被看作是一种页面预览格式,而不是生产格式.然而市场的感觉并非如此,市场期望转化了这种格式的焦点,从而也改变了该产品.各种各样的电子书阅读器充斥着国内外市场,已经 ...

  2. 如何用迅捷PDF转换器获取PDF文件中的图片

    工作中有的人喜欢将文档保存为PDF格式,因为PDF格式安全性和兼容性都比较高,但是在使用PDF文档的时候,也会一些小问题,比如说,PDF文档过大,想要查看文档中的图片,就需要耗费不少的时间,那么怎么才 ...

  3. PDF文件中的图片如何删除?分享两种删除方法

    我们怎么把PDF文件中的图片给删除掉呢?大家在日常使用PDF文件的过程中,难免会对文件有编辑需求,有时候需要编辑文字,有时候需要对文件中的图片进行删除处理.遇到这种只需要删除PDF文件里的图片的时候, ...

  4. 如何快速在PDF文件中插入图片

    在 PDF文件中插入图片我优先想到了 Adobe Acrobat DC,胜任此项工作完全 OK.但是有个问题,Acrobat 会自动识别 PDF 中的文字.如果有手写字迹经过 Acrobat 识别再保 ...

  5. 向pdf文件中插入图片及文字 java实现

    向pdf文件中插入图片及文字 引入itextpdf相关依赖 <!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf --> ...

  6. PDF文件中的图片怎么导出?

    我们经常使用PDF文档.我们都知道,PDF文档在阅读方面的体验非常的好,但是想使用PDF文件内的内容却很难,由于PDF可以固定文档的页面布局,因此无法直接保存PDF文档中的内容.我们在阅读PDF文件内 ...

  7. Python脚本工具,PyMuPDF批量提取PDF文件中的图片

    如何批量快速提取出PDF中的图片文件,你是否遇到这样的一个问题,尤其是PPT文件转换为PDF文件,需要快速提取其中的图片文件,如果你恰好会那么一点py,同时复制粘贴没问题的话,那么相信你也能够很轻松的 ...

  8. 解决Zotero显示pdf文件中的图片左上角有黑色遮挡的问题

    解决Zotero显示pdf文件中的图片左上角有黑色遮挡的问题 在菜单编辑选择"首选项": 弹出如下图所示的对话框. 3. 选择"高级"-"设置编辑器& ...

  9. 如何编辑 删除 修改 pdf文件中的文字

    要编辑修改PDF文件一般用三种 软件 ,分别是:(1)Adobe Acrobat:(2)Foxit PDF Editor:(3)文电通.现介绍用Adobe Acrobat软件编辑PDF文件的方法: 你 ...

最新文章

  1. ETSI MEC — 参考架构模型
  2. Java Eclipse和MyEclipse快捷键
  3. PhotoSwipe 图片浏览插件使用方法
  4. mysql 操作类 C .net_.NET MYSQL数据库操作基类( C#源码)
  5. 使用Java 8和Lambda简化ReadWriteLock
  6. bi power 两个日期挑较早的日期_功率 BI 中的时间智能:利用时间
  7. 散度与梯度在图像中的应用
  8. linux(cat,more,less,head)——对文件显示进行查看操作
  9. 计算机中字符编码换算
  10. css的white-space属性导致了空格问题——查看十六进制发现2020变成了c2a0
  11. ffdshow 源代码分析 5: 位图覆盖滤镜(总结)
  12. Copilot 自动编程AI工具
  13. 使用Java代码发送邮件
  14. 使用Mac文件保险箱加密数据
  15. 悦诗风吟网络营销的目标_悦诗风吟产品网络营销推广策划方案
  16. 王森:程序设计师真情忏悔录
  17. 如何实现电脑远程开机
  18. 使用servlet过滤器播放amr音频
  19. 腾讯优图:开源 YOLO 系列代码(含 YOLOv3 以及各种 Backbone)
  20. 单相逆变器及基于STM32 SPWM生成代码

热门文章

  1. 运营积分兑换商城系统的核心关键点,既然是....
  2. Introduction to Algorithms (Table Doubling, Karp-Rabin)
  3. python英文字符串单词个数统计_python统计字符串中单词数量
  4. AI也搞种族歧视,误将黑人标记为灵长类动物
  5. 滴答滴答滴答滴答滴答滴答滴答滴答滴答
  6. 火猴之烟花效果展示(firemonkey)
  7. vulnhub之DC9靶机
  8. Dcat admin自定义行按钮确认框复制当前行数据
  9. 熵,KL散度,交叉熵
  10. mysql 1067 invalid_mysql error 1067 invalid default timestamp