2014-03-07 35 views
1

我有一个Django应用程序,其中我有一个页面显示一些数据和图像,现在我需要将该HTML页面转换为pdf,所以我试图使用Docraptor在django中生成pdf与docraptor

所以下面是我的代码/视图生成PDF

def generate_report_pdf(request, user_id): 
    site = Site.objects.get(id=settings.SITE_ID) 
    url = site.domain + reverse('overview', args=[user_id,]) 
    docraptor = DocRaptor(settings.DOCRAPTOR_API_KEY) 
    with open("test.pdf", "wb") as f: 
     f.write(docraptor.create({ 
      'document_url': url, 
      'test': True, 
      'document_type':'pdf', 
     }).content) 

    print f,f.name,">>>>>>>>>>>>" 
    print type(f),">>>>>>>>>>>>" 
    print dir(f),">>>>>>>>>>>>" 
    file = open(f, 'r').read() 
    return HttpResponse(file, mimetype='application/pdf') 

输出:

Exception Type: TypeError 
Exception Value: coercing to Unicode: need string or buffer, file found 

此错误在线路file = open(f, 'r').read()

进出把上述发生打印报表是

<closed file 'test.pdf', mode 'wb' at 0x7faea05a59c0> test.pdf >>>>>>>>>>>> 
<type 'file'> >>>>>>>>>>>> 
['__class__', '__delattr__', '__doc__', '__enter__', '__exit__', '__format__', '__getattribute__', '__hash__', '__init__', '__iter__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'close', 'closed', 'encoding', 'errors', 'fileno', 'flush', 'isatty', 'mode', 'name', 'newlines', 'next', 'read', 'readinto', 'readline', 'readlines', 'seek', 'softspace', 'tell', 'truncate', 'write', 'writelines', 'xreadlines'] 

那么,为什么我会得到这个Exception Value: coercing to Unicode: need string or buffer, file found错误,以及如何显示我在django中的PDF文件?

回答

2

取而代之的是 -

file = open(f, 'r').read() 

尝试

file = open(f.name, 'r').read() 

你传入文件对象,而功能需求文件路径/文件名。

+0

正确使用相同的工作 –

+0

@ shivakrishna:这是Gr8! – anuragal

+0

@shivakrishna - 你能否接受答案,如果它的工作! – anuragal