如何使用python替换/删除pdf中的文本?

时间:2018-09-15 17:03:33

标签: python python-3.x pdf

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

我的目标是实际从pdf本身删除文本。使用pdfminer,我设法从pdf中提取了文本,但我不知道是否有可能仅用一些空白来“替换”文本。使用python这样的事情可能吗?仅仅提取是不够的。我需要将文本从PDF中删除

5 个答案:

答案 0 :(得分: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页;

答案 1 :(得分:0)

以下是一些可以帮助您的python软件包:

pdfrw

读写PDF文件;水印,将图像从一个PDF复制到另一个。

slate

简化了从PDF文件提取文本的操作。

PDFQuery

使用Jquery或XPath语法的PDF抓取。需要PDFMinerpyquerylxml库。

`PDFMiner`

从PDF文件中提取文本,图像,对象坐标,元数据。纯Python。

`PyPDF2`

分割,合并,裁剪PDF文件。纯Python。

答案 2 :(得分:0)

是的,通常称为“修订”,它涉及从PDF文件中完全删除文本/图形。

PDFTron PDFNet SDK可以进行真正的编辑。

这里是仅在浏览器中使用库的实时示例。 https://www.pdftron.com/samples/web/samples/PDFNet/ViewerRedactTest/index.html https://www.pdftron.com/documentation/web/samples/full-samples#viewerredact

它也可以通过Python 2.7(或3)(如果需要)在Windows,macOS和Linux上使用。 https://www.pdftron.com/documentation/samples/py/PDFRedactTest?platforms=windows https://www.pdftron.com/documentation/samples?platforms=windows#pdfredact

答案 3 :(得分:0)

这可能吗?是的,尽管不建议这样做。我认为,最好的办法是打开并阅读现有文件,将其移动为可编辑的格式,删除不需要的任何文本,然后将其转换回去。

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

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文件对象。

当您要删除某段文本的所有实例/情况时,替换文本将只是“”。

答案 4 :(得分:0)

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

Here是如何从文本层编辑社会保险号的示例。