PDF Miner PDFEncryptionError


Я пытаюсь извлечь текст из pdf-файлов и позже попытаться идентифицировать ссылки. Я использую pdfminer 20140328. С незашифрованными файлами он работает хорошо, но теперь у меня есть файл, где я получаю:

Файл "C:ToolsPython27libsite-packagespdfminerpdfdocument.py", строка 348, in _initialize_password

Raise PDFEncryptionError ('неизвестный алгоритм: param=%r' % param)

Pdfminer.документы PDF.PDFEncryptionError: неизвестный алгоритм: param={'CF': {'StdCF': {'Длина': 16, 'КФМ': /AESV2, 'AuthEvent': /DocOpen}}, 'о': '}XE2 в>Камера xf1xf6xc6x8fxabx1f"оx9bfcдолларовх15xe09~2xc9\x87, такx03Франк КФА beacx17f>х13т^кчипсет X99', 'фильтр': /стандарт, 'Р': -1548, длина: 128, 'Р': 4, 'у': 'Кк>х14xf7Хасверсии XE6x97xb35xaby!x04|x18(xbfN^Nux8aAdx00NVxffxfax01x08', 'V': 4, 'StmF': / StdCF, 'StrF': /StdCF}

Я проверил pdfinfo, что этот файл, по-видимому, зашифрован AES, но я могу открыть его без каких-либо проблем. Так что у меня их два вопросы:

  • Во-первых: как это возможно, что документ зашифрован, но я могу открыть его без пароля?

  • И во-вторых: как заставить PDFMiner правильно прочитать этот файл? Где-то я читал, чтобы установить pycrypto, чтобы получить дополнительные алгоритмы, но это не исправило мою проблему.

Большое спасибо.

3 7

3 ответа:

У меня была такая же проблема с некоторыми документами. Похоже, что документ зашифрован, но пароль пуст. Вот почему мы можем легко открыть его без пароля.

В итоге я решил проблему с помощью утилиты Ubuntu qpdf. Он может расшифровать файл, если вы предоставите пароль (пустой в моем случае). Я реализовал команду оболочки в скрипте Python, которая расшифровывала бы документ с пустым паролем:

from subprocess import call
call('qpdf --password=%s --decrypt %s %s' %('', pdf_filename, pdf_filename_decr), shell=True)

Где

`pdf_filename` - filename of encrypted pdf,
`pdf_filename_decr` - filename of a new decrypted copy.

pdfminer должен извлеките текст сейчас.

Я получил точно такую же ошибку, зашифрованный PDF с опцией шифрования-V 4. Оказывается, это действительно поддерживается в последнем pdfminer.

Если вы использовали pip для установки pdfminer, вы запускаете выпуск 2014 (20140328), который его не поддерживает. Поэтому вместо этого:

git clone https://github.com/euske/pdfminer.git
cd pdfminer
python setup.py install

Убедитесь, что у вас установлен pycrypto:

pip install pycrypto

И что вы можете импортировать AES:

from Crypto.Cipher import AES

Есть программа PDF для Windows PDFill (www.pdfill.com). я использовал бесплатную версию программы инструментов, чтобы сделать то же самое-просто "разбить" все страницы документа и сохранить результат. Сохраненный файл может быть прочитан pdfminer.