什么是数据作为“没有空字节的字符串,而不是二进制”?

时间:2015-05-13 10:44:44

标签: python pdf typeerror poppler

我可以使用poppler library从pdf轻松创建图像:

pdftoppm -png myfile.pdf > myfile.png

我现在正尝试使用python-poppler library在Python中执行相同的操作。安装lib(sudo apt-get install python-poppler)后,我可以使用以下命令加载pdf文件:

doc = poppler.document_new_from_file('file://'+urllib(inputF), password=None)

但我现在想从二进制文件加载pdf文件。我以为我可以使用方法poppler.document_new_from_data(),所以我尝试了以下方法,它返回一个类型错误:

>>> d = poppler.document_new_from_data(userDoc.binary)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: document_new_from_data() argument 1 must be string without null bytes, not Binary

我不确定这意味着什么。什么“数据”可以是“字符串没有空字节,而不是二进制”?我尝试检查方法的来源,但源文件(here)甚至不包含单个.py文件。

我尝试将二进制文件转换为base64,但这会导致错误TypeError: Required argument 'length' (pos 2) not found

欢迎任何帮助!

[编辑] 感谢@Vaulstein的提示,我现在得到了更多:

s = binascii.a2b_base64(userDoc.binary)
r = poppler.document_new_from_data(s, len(s), password='')Syntax Warning: May not be a PDF file (continuing anyway)
Syntax Error (3): Illegal character <75> in hex string
Syntax Error (4): Illegal character <df> in hex string
Syntax Error (5): Illegal character <5d> in hex string
Syntax Error (6): Illegal character <28> in hex string
Syntax Error (7): Illegal character <6e> in hex string
Syntax Error (8): Illegal character <3f> in hex string
Syntax Error (9): Illegal character <ca> in hex string
Syntax Error (10): Illegal character <89> in hex string
Syntax Error (11): Illegal character <db> in hex string
>>> r = poppler.document_new_from_data(s, len(s), password='')
Traceback (most recent call last):
  File "<input>", line 1, in <module>
GError: PDF document is damaged

但它似乎仍然不是正确的编码。还有其他想法我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

poppler_document_new_from_data调用需要将整个二进制数据(包括0个字节)作为第一个参数传递为char*(在Python 2中通常为str)。您在poppler-python中发现了一个错误。正如@Vaulstein在评论中指出的那样,它已经reported upstream but is unresolved

作为解决方法,要么将PDF存储到文件并使用..new_from_file调用,要么使用gi.repository.Poppler模块。 (该模块附带PyGObject;例如,请参阅herehere's the documentation for poppler_document_new_from_data。)