首页 > 解决方案 > 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'

请帮我找出解决方案,提前谢谢。

标签: python

解决方案


您的函数有一些奇怪的方法,例如_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


推荐阅读