【问题标题】:How to replace/delete text from a pdf using python?如何使用python替换/删除pdf中的文本?
【发布时间】:2019-02-20 03:36:52
【问题描述】:

我有隐藏部分 pdf 的代码(只用白色多边形覆盖它)但问题是,文本仍然 那里,如果你 ctrl-f 你仍然可以找到它。

我的目标是实际从 pdf 本身中删除文本。使用 pdfminer 我设法从 pdf 中提取文本,但我不知道是否可以用一些空格来实际“替换”文本。使用python可以做到这一点吗?提取它是不够的。我需要从 PDF 中删除文本

【问题讨论】:

  • 用具体的工具,当然是可以的!看看我在谷歌上找到的这个链接...binpress.com/manipulate-pdf-python
  • 引用@Ryan 已删除的答案(省略广告部分):是的,这通常称为编辑,涉及从 PDF 文件中完全删除文本/图形。 PDF的编校不是小事,所以不知道有没有免费的Python编校工具。
  • 老实说,伙计们,最终,在通过 Python 尝试了不同的方法 5 小时之后。我意识到更聪明的做法是使用 Adob​​e 来编辑文本。我感谢提供赏金的人,但我已经过了实际检查这些新解决方案是否可行的地步。
  • 嗨,@Wallace,您能否分享您如何使用 adobe redact 以编程方式实现目标的任何参考资料?
  • 嘿,很抱歉这么长的回复,这是大约一年前的事情,所以我没有任何参考资料。但是 Adob​​e(高级版)有一项功能,可以在文档的每一页上的一个位置编辑给定的文本,我使用了该功能。我实际上忘记了我使用的 adobe 软件的确切名称,因为它在另一台笔记本电脑上。对不起。

标签: python python-3.x pdf


【解决方案1】:

这会占用大量内存,但您可以复制除您要删除的部分之外的 pdf 的其余部分,然后用不包含您要删除的部分的新版本覆盖文件。您可以使用 PyPDF 通过检索内容流并查找和删除相关部分来执行此操作。

PyPDF 文档https://pythonhosted.org/PyPDF2/PageObject.html?highlight=getcontents#PyPDF2.pdf.PageObject.getContents;

PDF 标准 https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/PDF32000_2008.pdf 第 78 页,第 81 页;

【讨论】:

    【解决方案2】:

    这样的事情可能吗?是的,虽然不推荐。在我看来,最好的办法是打开并阅读现有文件,将其移动到可编辑的格式,删除您不希望出现的任何文本,然后再将其转换回来。

    但是,您可以使用以下方法提取数据并将其从内存中删除:

    import PyPDF2 
    
    # creating a pdf file object 
    pdfFileObj = open('example.pdf', 'rb') 
    
    # creating a pdf reader object 
    pdfReader = PyPDF2.PdfFileReader(pdfFileObj) 
    
    # printing number of pages in pdf file 
    print(pdfReader.numPages) 
    
    # creating a page object 
    pageObj = pdfReader.getPage(0) 
    
    # extracting text from page 
    print(pageObj.extractText()) 
    
    # closing the pdf file object 
    pdfFileObj.close() 
    

    逐行,这个程序会:

    pdfFileObj = open('example.pdf', 'rb') 打开example.pdf并将文件对象保存为pdfFileObj

    pdfReader = PyPDF2.PdfFileReader(pdfFileObj) 创建一个PdfFileReader 的对象并传递整个PDF 文件对象,得到一个PDF 阅读器对象。

    print(pdfReader.numPages) 给出页数。

    pageObj = pdfReader.getPage(0) 创建PageObject 类的对象。 PDF阅读器对象具有函数getPage(),它以页码(起始表单索引0)作为参数并返回页面对象。

    print(pageObj.extractText()) 从 PDF 页面中提取文本。

    pdfFileObj.close() 关闭 PDF 文件对象。

    替换文本只是“”,因为您想删除某段文本的所有实例/案例。

    【讨论】:

    • 假设我将其转换为可编辑的格式(单词或文本),这本身并不容易。您建议如何将其转换回 pdf?
    • print(pageObj.extractText()) 不起作用
    【解决方案3】:

    我在我的一个项目中使用了pdf-redactor,效果非常好。

    Here 是一个如何从文本层编辑社会安全号码的示例。

    【讨论】:

    • 如何直接从 python 中使用这个库(不经过标准输入和标准输出?)
    • 您可以使用 import pdf_redactor 在脚本中导入模块。检查这个例子:github.com/JoshData/pdf-redactor/blob/primary/example.py
    • 但它仍然使用命令行中的标准输入。我解决了它向 pdf_redactor 添加另一个函数,该函数接受输入和输出文件名。
    • 但是,它不适用于我的 pdf。它会创建一个新的 pdf,但不会替换文本。我用一个简单的示例 (africau.edu/images/default/sample.pdf) 检查它是否有效。
    • 也使用 qpdf --stream-data=uncompress 没有帮助。我知道 pdf 文件是从一个简单的 MS Word 文件创建的。所以它不应该是异国情调的。
    猜你喜欢
    • 1970-01-01
    • 2019-11-26
    • 2015-10-20
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多