我必须从 pdf 中删除敏感信息。我想在图像层和文本层中都这样做。我设法使用 fitz 库获得了一半的目标结果。这是我使用的简化形式的代码。
phrase_to_redact = 'example'
document = fitz.open(path)
for page in document:
rects = page.searchFor(phrase_to_redact)
for rect in rects:
page.addRedactAnnot(rect, fill=color)
page.apply_redactions()
这段代码给了我一个 pdf,其中我要审查的短语被填充的矩形模糊。当我选择其中部分模糊的文本时,复制并粘贴到记事本中,我得到的复制件没有被删减的单词(没有隐藏在矩形后面的部分)。我想要实现的是,在复制文本时,有删除单词长度的中性字符代替该单词。我可以使用 fitz 库另外做的是填写另一个选定的短语来代替被审查的词。那么代码应该是这样的。
phrase_to_redact = 'example'
document = fitz.open(path)
for page in document:
rects = page.searchFor(phrase_to_redact)
for rect in rects:
page.addRedactAnnot(rect, text='example_phrase', fill=color)
page.apply_redactions()
这样,一个新的短语会在 pdf 中视觉上出现在被删减的单词的位置,但是当我复制包含新单词的片段时,由于删失单词而产生的间隙仍然是空的。要复制新插入的单词,我只需要选择那个单词。我检查了页面上的块在使用此代码进行此类编辑后的外观。
document = fitz.open(path)
for page in document:
blocks = page.getText("dict")["blocks"]
print(blocks)
而且我注意到删减的词从块中的行中删除,并且带有新短语的新块被添加到块列表的末尾。所以块不是按照视觉出现的顺序排列的,而是按照它们添加的顺序排列的。因此,当我从整个页面中提取文本时,新插入的短语出现在最后,并且不清楚它们替换的单词来自哪里。
有没有办法用另一个文本替换pdf中的文本,以便在从编辑的pdf页面复制粘贴文本时新文本将代替旧文本?我已经搜索了互联网,但我发现的只是编辑图像层,它不能以我想要的方式复制编辑的内容。