Проблема извлечения текста из PyPDF2 / PDFminner при создании PDF с использованием InDesign - PullRequest
0 голосов
/ 21 февраля 2020

У нас есть большое количество PDF-файлов, созданных с помощью InDesign, и не весь текст был извлечен PyPDF2. Вот код: -

for pageNum in range(0, pdfReader.numPages):
    pageObj = pdfReader.getPage(pageNum)
    # note text is a bytes object not string.
    text = pageObj.extractText().encode('utf-8') 
    search_text = text.lower()
    if search_word in search_text.decode("utf-8"):
        search_word = search_word.strip()
        search_word_count += 1
        print("Pattern Found on Page: " + str(pageNum+1)) 

search_word_count_list.append(search_word_count)
print("The word:- '{}' was found:- {} times\n".format(search_word, search_word_count))

Я провел некоторое тестирование с PDFminner и обнаружил, что у меня были те же результаты, то есть те же биты текста были извлечены / не извлечены. Поэтому я подумал, что с PDF что-то должно происходить.

За этим я работал с наборщиком текста, проводя некоторые тесты, и обнаружил, когда текстовые поля заблокированы в InDesign (Crtl + L), экспортированном PDF. его текст заблокирован и не может быть извлечен, я имею в виду, что заблокированные биты не могут быть извлечены через PyPDF2 или PDFminner.

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

Редактировать 1

Таким образом, проводим некоторое тестирование с помощью Adobe Acrobat pro 11. При сохранении в виде обычного текста заблокированный текст не сохраняется в тексте. файл. Но разблокированный текст сохраняется в файл .txt.

Проверка вкладки «Безопасность» в Acrobat: -

Открыв все проверенные документы в Acrobat, я выбираю «Файл» -> «Свойства», переключаемся на На вкладке «Безопасность» диалогового окна «Свойства документа» я прочитал «Метод безопасности: Без защиты», и в соответствии с ограничениями все «Разрешено» (печать, изменение, копирование ...). Поэтому я думаю, что это все действительные PDF-файлы, которые не защищены.

Редактировать 2

Я попытался установить pdf2txt, но мой компьютер не соответствует требованиям, так как мне не хватает "Microsoft Visual C ++ 14.0" и поскольку это рабочая машина, она заблокирована.

Редактировать 3

Acrobat сообщает версию PDF 1.7. PDF Producer Adobe PDF Library 15.0

Я могу скопировать и вставить заблокированный текст, поэтому не думаю, что растеризация - это проблема.

Редактировать 4 - возможное решение

Итак, у меня есть протестирован с использованием https://pdftotext.com/ и он смог получить доступ к заблокированному тексту. Поэтому я поговорю с ИТ-отделом, чтобы установить «Microsoft Visual C ++ 14.0», чтобы я мог использовать библиотеку pdf2txt.

Edit 5

У меня не было особой удачи с установкой PDFtotext из-за проблем установка попплера, который является не чем иным как кошмаром для установки. На обратной стороне ввода usr2564301 я провел еще несколько испытаний с PDFminner. Вот код, который я использую для тестирования: -

from pdfminer.pdfinterp import PDFResourceManager,PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from io import BytesIO
def pdf_to_text(path):
    manager = PDFResourceManager()
    retstr = BytesIO()
    layout = LAParams(all_texts=True)
    device = TextConverter(manager, retstr, laparams=layout)
    filepath = open(path, 'rb')
    interpreter = PDFPageInterpreter(manager, device)
    for page in PDFPage.get_pages(filepath, check_extractable=True):
        interpreter.process_page(page)
        text = retstr.getvalue()
        filepath.close()
        device.close()
        retstr.close()
        return text

Что касается версий, у меня установлена ​​pdfminer==20191125. На Github написано «Поддерживает PDF-1.7. (Ну, почти)», так что, возможно, проблема в PDF 1.7?

Редактировать 6

Просто попытался использовать PDFminer ( PDF2txt.py) через командную строку. Используя этот код python C:\Users\my_name\AppData\Local\Programs\Python\Python37-32\Scripts\pdf2txt.py -o output.txt file_name.pdf, но я получаю тот же результат, т. Е. Заблокированный текст не проходит.

Редактировать 7

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

Обратите внимание, что нет проблем, когда текст находится на передней панели и заблокирован. Только когда на главной странице.

...