2017-06-14 52 views
0

的数组的JSON元素的文件我有一个看起来像一个JSON响应:如何创建字节

{u'AllowExistingAttachmentToBeOverwritten': False, 
u'Name': u'Go-Daddy.pdf', 
u'AttachmentData': u'JVBERi0xLjQKJdPr6eEKMSAwIG9iago8PC9DcmVhdG9yIChNb3ppbGxhLzUuMCBcKFdpbmR... 
u'ItemIdAttachedTo': 91198711, 
u'Description': u''} 

如何将其转换为PDF文件?

我想:

with open(fileName, 'wb') as f: 
    f.write(result['AttachmentData']) 
    f.close() 

也试过:

with open(fileName, 'wb') as f: 
    f.write(result['AttachmentData'].encode()) 
    f.close() 

但在这两种情况下,该文件被创建但是Adobe无法打开该文件。

+0

可能的重复https://stackoverflow.com/questions/2252726/how-to-create-pdf-files-in-python – Nurjan

+0

你检查过pyfpdf吗? https://www.blog.pythonlibrary.org/2012/07/10/an-intro-to-pyfpdf-a-simple-python-pdf-generation-library/ – TasosGlrs

回答

0

只需添加到@Zebromatz。您只是尝试将文件数据解码为base64。 同时在json中发送时是否使用base64编码进行验证。 您可能的代码如下。

import base64 

# bla bla bla 
# bla bla bla 

with open(fileName, 'wb') as f: 
    f.write(base64.b64decode(result['AttachmentData'])) 
    f.close() 

看看这是否可行。

+0

感谢您的详细解答。像魅力一样工作。 –

+0

请投票接受 – Haranadh

1

为了完全回答你的问题,只要你从json文件接收到的数据在大多数情况下都是用BASE64 UTF8编码的。为了能够得到它的内容或者将它保存到磁盘上,它应该是BASE64DECODED。

复制下面的网站使用了您的情况(TE得到BASE64ENCODED PDF): http://jsfiddle.net/eliseosoto/JHQnk/

按@埃伦-S其中pdf_base64是JSON响应收到的PDF格式的建议。

import base64 
pdf_base64 = 'JVBERi0xLj...' 
with open('test.pdf', 'wb') as f: 
    f.write(base64.b64decode(pdf_base64)) 
    f.close() 

该解决方案经过测试,其工作原理类似于魅力。

请参考下面的链接了解更多信息。 Embedding a File Attachment in JSON Object

+0

@ eran-s:我想你可能需要根据Zebromatz调用'decode'函数而不是'encode'。尝试将行更改为'f.write(base64.b64decode(result ['AttachmentData']))' – Haranadh