我有一批 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)
但是它不起作用,它用无意义的符号填充文档并删除单词,如下所示...
我可以用什么来去除它们?
我尝试了多种方法删除签名,但一般来说,要么得到与自己相同的签名(随机低密度字符),要么完全将文本丢失为向量,要么得到其他较差的回报。一旦你扭曲了这些签名,其他一切都会被扭曲:
除了如果我导入Word,签名会自动删除!
根据 @mkl 的评论,我应该做得更好,我回到第一个文件并再次尝试。在这里我们可以看到我有 zer0d 2 个图像,第三个图像即将为零,同时实时监控右侧的结果。
所有 4 个现在都为零,并且文本仍然可选
但是正如预期的那样,签名现在无效了
因此,最好在通过删除链进行任何其他签名之前回滚到 rev1(我使用了 Acrobat Reader,另存为),正如 @mkl 所暗示的那样(需要像以前一样进行一些摆弄,但现在更容易删除一个签名,并且签名都消失了。)
你可以尝试使用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")
你可以试试
cpdf -draft in.pdf -o out.pdf
删除所有图像。本手册第 19.1 节中描述了一个
-draft-remove-only
选项,用于更精细的控制。
此代码执行以下操作:
pdf
文件。pdf
文件并删除其中包含的所有图像。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)