2015 年 8 月:在 Windows 7 中重新安装时,问题仍然存在:
Poppler.Document.new_from_data(data, len(data), None)
返回:类型错误:必须是字符串而不是字节。
Poppler.Document.new_from_data(str(data), len(data), None)
返回:PDF 文档损坏 (4)。
我一直无法使用这个功能。
我尝试使用 NamedTemporayFile 而不是磁盘上的文件,但由于未知原因,它返回未知错误。
所以我正在使用一个临时文件。不是最漂亮的方式,但它有效。
如果有人有想法,这是 Python 3.4 的测试代码:
from gi.repository import Poppler
import tempfile, urllib
from urllib.parse import urlparse
from urllib.request import urljoin
testfile = "d:/Mes Documents/en cours/PdfBooklet3/tempfiles/preview.pdf"
document = Poppler.Document.new_from_file("file:///" + testfile, None) # Works fine
page = document.get_page(0)
print(page) # OK
f1 = open(testfile, "rb")
data1 = f1.read()
f1.close()
data2 = "".join(map(chr, data1)) # converts bytes to string
print(len(data1))
document = Poppler.Document.new_from_data(data2, len(data2), None)
page = document.get_page(0) # returns None
print(page)
pdftempfile = tempfile.NamedTemporaryFile()
pdftempfile.write(data1)
file_url = urllib.parse.urljoin('file:', urllib.request.pathname2url(pdftempfile.name))
print( file_url)
pdftempfile.seek(0)
document = Poppler.Document.new_from_file(file_url, None) # unknown error