我正在使用Docraptor将 HTML转换为PDF ,docraptor会进行转换并向我发送回复,我在理解如何将此响应转换为PDF档案。
以下是响应的内容:
b'%PDF-1.4\n%\xe2\xe3\xcf\xd3\n\n1 0 obj\n<</Type /Catalog\n/Pages 2 0 R>>\nendobj\n\n2 0 obj\n<</Type /Pages\n/Kids [3 0 R]\n/Count 1>>
\nendobj\n\n4 0 obj\n<</Length 5 0 R\n/Filter /FlateDecode>>\nstream\nx\x9cs\n\xe125\xd13\x00\x02\x05s#3=sSC#\x85\x90\x14.}7C\x05C#\x88x
H\x1a\x97\x86GjNN\xbeB\xb8\xa6BH\x16\x97\x89\x81\x9e\x81\x91\xa9\x89\x82\x0
... ... ...
... ... lots of code ... ...
... ... ...
<</Info 10 0 R\n/Size 11\n/Root 1 0 R\n/ID [<5FCD137048BC4E60BF5E3D2E3741CD4B> <5FCD137048BC4E60BF5E3D2E3741CD4B>]>>\nstartxref\n12234\n
%%EOF\n'
我当时想要做那样的事情:
#docraptor response
response = doc_api.create_doc({ "type": "pdf", "document_content": "<html><body>Hello World!</body></html>" })
with open("test.pdf", "wb") as f:
f.write(response)
file = open(f.name, 'r').read()
错误: UnicodeDecodeError:'charmap'编解码器无法解码195位的字节0x90:字符映射到
我怎样才能做到这一点?
答案 0 :(得分:2)
打开文件进行阅读时使用二进制模式:
with open('test.pdf', 'rb') as f:
doc = f.read()
没有二进制标志,Python 3期望数据使用默认文件系统编码进行编码,并且它将尝试将传入数据解码为unicode字符串:
>>> import sys
>>> sys.getfilesystemencoding()
'utf-8'
在我的系统上,默认编码为UTF-8。在文本模式下,Python将尝试从UTF8解码为str
对象,但如果文件中的数据不是UTF-8编码,则可能会失败。