python - Python AttributeError:“页面”对象没有属性“_getContents”
问题描述
我正在尝试使用 python 代码从 PDF 中删除水印,而我正在运行的代码是我正在使用 PyMuPDF
并使用过的fitz
库。
def remove_img_on_pdf(idoc, page):
#image list
img_list = idoc.getPageImageList(page)
con_list = idoc[page]._getContents()
# xref 274 is the only /Contents object of the page (could be
for i in con_list:
c = idoc._getXrefStream(i) # read the stream source
#print(c)
if c != None:
for v in img_list:
arr = bytes(v[7], 'utf-8')
r = c.find(arr) # try find the image display command
if r != -1:
cnew = c.replace(arr, b"")
idoc._updateStream(i, cnew)
c = idoc._getXrefStream(i)
return idoc
doc=fitz.open('ELN_Mod3AzDOCUMENTS.PDF')
rdoc = remove_img_on_pdf(doc, 0) #first page
rdoc.save('no_img_example.PDF')
我得到这个错误说
Traceback (most recent call last):
File "watermark.py", line 27, in <module>
rdoc = remove_img_on_pdf(doc, 0) #first page
File "watermark.py", line 5, in remove_img_on_pdf
con_list = idoc[page]._getContents()
AttributeError: 'Page' object has no attribute '_getContents'
请帮我找出解决方案,提前谢谢。
解决方案
您的函数有一些奇怪的方法,例如_getContents
,_getXrefStream
和_updateStream
,也许它们已被弃用或类似,但这里是解决您的问题的工作代码:
import fitz
def remove_img_on_pdf(idoc, page):
img_list = idoc.getPageImageList(page)
con_list = idoc[page].get_contents()
for i in con_list:
c = idoc.xref_stream(i)
if c != None:
for v in img_list:
arr = bytes(v[7], 'utf-8')
r = c.find(arr)
if r != -1:
cnew = c.replace(arr, b"")
idoc.update_stream(i, cnew)
c = idoc.xref_stream(i)
return idoc
doc = fitz.open('ELN_Mod3AzDOCUMENTS.PDF')
rdoc = remove_img_on_pdf(doc, 0)
rdoc.save('no_img_example.PDF')
如您所见,我使用了另一种方法而不是非工作方法。此外,这里是.PyMuPDF
推荐阅读
- dependency-injection - 如何在运行时解析参数化类?
- flutter - App被杀死时如何保存更改?
- c# - 我需要在 c#winform 应用程序中跟踪赛道,我可以在上面添加和移动点,但找不到任何教程
- javascript - C# 的 JSON 结果不适用于 Chart.js
- node.js - 续集,检查行是否存在并返回布尔值
- regex - PowerShell如何在特定模式之后捕获文本字符串但不将模式本身包含在结果中
- android - 安装firebase插件后使用cordova运行应用程序时编译错误
- reactjs - 组件重新渲染 React Material UI 时保持 Autocomplete 值
- javascript - Angular 表单:在 Angular 表单中找不到表单控件
- powershell - 如何使用 Azure DevOps REST API 设置发布定义工件