什么是数据作为"string without null bytes, not Binary"?



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

pdftoppm -png myfile.pdf > myfile.png

我现在正在尝试使用Python-Poppler库从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

我不确定这意味着什么。没有null字节,而不是二进制"可以是"数据"?我尝试检查了该方法的来源,但是源文件(此处)甚至不包含一个.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

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

poppler_document_new_from_data调用要求将整个二进制数据传递,包括0个字节,作为第一个参数,作为char*(通常是python 2中的str)。您在Poppler-Python中发现了一个错误。正如@vaulstein在评论中指出的那样,据报道它在上游,但尚未解决。

作为解决方法,要么将PDF存储到文件中,然后使用..NEW_FROM_FILE调用,或者使用gi.repository.Poppler模块。(该模块带有pygobject;例如,请参见以下示例,这是poppler_document_new_from_data的文档。)

相关内容

  • 没有找到相关文章