如何从PDF中删除图像?

问题描述 投票:0回答:4

我有一批 pdf,其中包含数字签名图像(以绿色圈出)。

我想要的是删除它们或至少删除上面写的内容,但我找不到任何解决方案,我尝试了以下方法:

from PyPDF2 import PdfReader,PdfWriter  
reader = PdfReader('C:\\Users\\Usuario\\Downloads\\JG_1_01221-2020-0-1801-JR-LA-06.pdf') 
writer = PdfWriter() 
for page in reader.pages: 
   writer.add_page(page) 
with open('C:\\Users\\Usuario\\Desktop\\DEP\\Lats.pdf', "wb") as f:
   writer.write(f)

但是它不起作用,它用无意义的符号填充文档并删除单词,如下所示...

我可以用什么来去除它们?

python image pdf digital-signature
4个回答
2
投票

我尝试了多种方法删除签名,但一般来说,要么得到与自己相同的签名(随机低密度字符),要么完全将文本丢失为向量,要么得到其他较差的回报。一旦你扭曲了这些签名,其他一切都会被扭曲:

除了如果我导入Word,签名会自动删除!

编辑

根据 @mkl 的评论,我应该做得更好,我回到第一个文件并再次尝试。在这里我们可以看到我有 zer0d 2 个图像,第三个图像即将为零,同时实时监控右侧的结果。

所有 4 个现在都为零,并且文本仍然可选

但是正如预期的那样,签名现在无效了

因此,最好在通过删除链进行任何其他签名之前回滚到 rev1(我使用了 Acrobat Reader,另存为),正如 @mkl 所暗示的那样(需要像以前一样进行一些摆弄,但现在更容易删除一个签名,并且签名都消失了。)


1
投票

你可以尝试使用PyMuPDF,我认为它是目前处理PDF最强大的python库。

import fitz


def remove_images(input_pdf, output_pdf):
    doc = fitz.open(input_pdf)
    for page in doc:
        img_list = page.get_images()
        for img in img_list:
            page.delete_image(img[0])

    doc.save(output_pdf)


remove_images("input.pdf", "output.pdf")

1
投票

你可以试试

cpdf -draft in.pdf -o out.pdf

删除所有图像。本手册第 19.1 节中描述了一个

-draft-remove-only
选项,用于更精细的控制。


0
投票

此代码执行以下操作:

  1. 找到文件夹中的所有
    pdf
    文件。
  2. 遍历所有
    pdf
    文件并删除其中包含的所有图像。
  3. 在该文件夹中使用新名称保存修改后的
    pdf
import os
import PyPDF2


class PDF:
    def __init__(self, file_path):
        self.file_path = file_path
        self.pdf = PyPDF2.PdfReader(open(file_path, 'rb'))
        self.pages = len(self.pdf.pages)

    def remove_images(self):
        for i in range(self.pages):
            page = self.pdf.pages[i]
            resources = page['/Resources']
            if '/XObject' in resources:
                xObject = resources['/XObject'].get_object()
                xObject_copy = xObject.copy()  # create a copy of the dictionary
                for obj in xObject_copy:
                    subtype = xObject[obj].get('/Subtype')
                    if subtype == '/Image' or subtype == '/Form' or subtype == '/Group':
                        del xObject[obj]
        return self.pdf

    def save_to_path(self, file_path):
        output = PyPDF2.PdfWriter()
        for i in range(self.pages):
            output.add_page(self.pdf.pages[i])
        with open(file_path, 'wb') as f:
            output.write(f)


if __name__ == '__main__':
    folder_path = r'G:\!Download\pdf_remove_images'

    for file_name in os.listdir(folder_path):
        if file_name.endswith('.pdf'):
            pdf_file = PDF(os.path.join(folder_path, file_name))
            pdf_file.remove_images()
            save_path = os.path.join(folder_path, file_name.replace('.pdf', '_modified.pdf'))
            pdf_file.save_to_path(save_path)
© www.soinside.com 2019 - 2024. All rights reserved.