10

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

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

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

pdfminer.pdfdocument.PDFEncryptionError: 未知算法: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', '过滤器':/标准,'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 以获取其他算法,但它并没有解决我的问题。

非常感谢。

4

3 回答 3

18

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

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

于 2016-02-22T18:35:22.007 回答
1

我得到了完全相同的错误,使用加密选项 -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
于 2018-07-25T18:47:06.047 回答
-3

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

于 2016-04-01T02:54:44.107 回答