如何将pdf响应转换为pdf文件?

时间:2017-11-20 09:54:34

标签: python pdf

我正在使用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:字符映射到

我怎样才能做到这一点?

1 个答案:

答案 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编码,则可能会失败。