PDF Miner PDFEncryptionError

时间:2015-12-18 14:19:54

标签: python pdf encryption pdfminer

我正在尝试从pdf文件中提取文本,然后尝试识别引用。我正在使用pdfminer 20140328.使用未加密的文件,它运行良好,但我现在得到一个文件,我得到:

  

文件“C:\ Tools \ Python27 \ lib \ site-packages \ pdfminer \ pdfdocument.py”,第348行,在_initialize_password中

     

引发PDFEncryptionError('未知算法:param =%r'%param)

     

pdfminer.pdfdocument.PDFEncryptionError:未知算法:param = {'CF':{'StdCF':{'长度':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 ','过滤':/标准,'P': - 1548,'长度':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}

我用pdfinfo检查过,这个文件似乎是AES加密的,但我可以毫无问题地打开它。 所以我有两个问题:

  • 首先:如何对文档进行加密,但我可以在没有密码的情况下打开它?

  • 其次:如何让PDFMiner正确读取该文件?在某处我读安装pycrypto以获得额外的算法,但它并没有解决我的问题。

非常感谢。

3 个答案:

答案 0 :(得分:11)

我对某些文件有同样的问题。 看起来文档已加密,但密码为空。这就是为什么我们可以在没有密码的情况下轻松打开它。

我最终用Ubuntu的 qpdf 实用程序解决了这个问题。如果您提供密码,它可以解密文件(在我的情况下为空)。我在Python脚本中实现了一个shell命令,该命令将使用空密码解密文档:

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 现在应该提取文本。

答案 1 :(得分:0)

我遇到了完全相同的错误,使用加密选项-V 4加密了PDF。事实证明,最新的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

答案 2 :(得分:-3)

有一个Windows PDF程序PDFill(www.pdfill.com)。我已经使用该程序的免费工具版本来做同样的事情 - 只需“拆分”文档的所有页面并保存结果。然后,pdfminer可以读取保存的文件。