Как заменить / удалить текст из PDF с помощью Python? - PullRequest
0 голосов
/ 15 сентября 2018

У меня есть код, который скрывает части PDF (просто покрывая его белым многоугольником), но проблема в том, что текст все еще там , если вы нажмете Ctrl-F, вы все равно сможете найти Это.

Моя цель - удалить текст из самого PDF-файла. С помощью pdfminer мне удалось извлечь текст из pdf, но я не знаю, возможно ли на самом деле «заменить» текст, скажем, просто пустыми пробелами. Это возможно с помощью Python? Извлечение этого недостаточно. Мне нужно удалить текст из PDF

Ответы [ 3 ]

0 голосов
/ 13 августа 2019

Возможна ли такая вещь? Да, хотя это не рекомендуется. На мой взгляд, вам лучше всего открыть и прочитать существующий файл, переместить его в редактируемый формат, удалить любой текст, который вы не хотите представлять, а затем преобразовать его обратно.

Однако вы можете извлечь данные и удалить их из памяти, используя:

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.

Текст замены будет просто "", так как вы хотите удалить все экземпляры / случаи определенного фрагмента текста.

0 голосов
/ 17 августа 2019

Теперь я не знаю, насколько точным является решение Джона Лимбериса, но если вы используете его код, вам следует использовать менеджер контекста.Я бы предложил изменить его так:

import PyPDF2

with open("example.pdf", "rb") as pdfFileObj:
    pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
    print(pdfReader.numPages)
    pageObj = pdfReader.getPage(0)
    print(pageObj.extractText())
0 голосов
/ 13 августа 2019

Это требует большого объема памяти, но вы можете скопировать оставшуюся часть 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 pg 78,стр. 81;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...