2015-12-18 23 views
5

Próbuję wyodrębnić tekst z plików pdf, a następnie spróbować zidentyfikować odniesienia. Używam pdfminer 20140328. Z plików niezaszyfrowanych jego działa dobrze, ale mam teraz plik gdzie uzyskać:PDF Miner PDFEncryptionError

File "C:\Tools\Python27\lib\site-packages\pdfminer\pdfdocument.py", line 348, in _initialize_password

raise PDFEncryptionError('Unknown algorithm: param=%r' % param)

pdfminer.pdfdocument.PDFEncryptionError: Unknown algorithm: param={'CF': {'StdCF': {'Length': 16, 'CFM': /AESV2, 'AuthEvent': /DocOpen}}, 'O': '}\xe2>\xf1\xf6\xc6\x8f\xab\x1f"O\x9bfc\xcd\x15\xe09~2\xc9\\x87\x03\xaf\x17f>\x13\t^K\x99', 'Filter': /Standard, 'P': -1548, 'Length': 128, 'R': 4, 'U': 'Kk>\x14\xf7\xac\xe6\x97\xb35\xaby!\x04|\x18(\xbfN^Nu\x8aAd\x00NV\xff\xfa\x01\x08', 'V': 4, 'StmF': /StdCF, 'StrF': /StdCF}

Sprawdziłem pdfinfo, że plik ten wydawał się być szyfrowane AES, ale nie mogę go otworzyć bez żadnych problemów. więc mam dwa pytania:

  • w pierwszym: jak to możliwe, że dokument jest szyfrowany, ale mogę go otworzyć bez hasła?

  • a po drugie: jak sprawić, aby PDFMiner prawidłowo odczytał ten plik? Gdzieś czytałem, żeby zainstalować pycrypto, aby uzyskać dodatkowe algorytmy, ale nie naprawiłem mojego problemu.

Wielkie dzięki.

Odpowiedz

8

Miałem ten sam problem z niektórymi dokumentami. Wygląda na to, że dokument jest zaszyfrowany, ale hasło jest puste. Dlatego możemy łatwo otworzyć bez hasła.

Skończyło się na rozwiązaniu problemu z programem użytkowym Ubuntu: qpdf. Może odszyfrować plik, jeśli podasz hasło (puste w moim przypadku). I wdrożone polecenie powłoki w skrypt Pythona, który odszyfrować dokument z pustym hasłem:

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

gdzie

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

pdfminer należy wyodrębnić tekst teraz.

-3

Istnieje PDF PDF z programem PDFill (www.pdfill.com). Użyłem darmowej wersji narzędzia programu do zrobienia tego samego - wystarczy "podzielić" wszystkie strony dokumentu i zapisać wynik. Zapisany plik można następnie odczytać przez pdfminer.