我正在尝试编写一个脚本,将xhtml2pdf创建的pdf直接保存到服务器,而不会执行通常的提示用户将其下载到计算机的路径。 Documents()是我想要保存的模型,new_project和output_filename变量在别处设置。
html = render_to_string(template, RequestContext(request, context)).encode('utf8')
result = open(output_filename, "wb")
pdf = CreatePDF(src=html, dest=results, path = "", encoding = 'UTF-8', link_callback=link_callback) #link callback was originally set to link_callback, defined below
result.close()
if not pdf.err:
new_doc=Documents()
new_doc.project=new_project
new_doc.posted_by=old_mess[0].from_user_fk.username
new_doc.documents = result
new_doc.save()
当这个配置到达new_doc.save()时,我得到错误:'file'对象没有属性'_committed'
有谁知道如何解决这个问题?谢谢!
答案 0 :(得分:2)
在玩完之后我找到了一个有效的解决方案。问题是我没有创建新文档,而结果(pdf)仍然是开放的。
" +"需要添加到open(),以便pdf文件可用于读写,而不仅仅是写作。
请注意,这会将pdf首先保存在不同的文件夹中(文件)。如果这不是您的应用程序的理想结果,您将需要删除它。
html = render_to_string(template, RequestContext(request, context)).encode('utf8')
results = StringIO()
result = open("Files/"+output_filename, "w+b")
pdf = CreatePDF(src=html, dest=results, path = "", encoding = 'UTF-8', link_callback=link_callback) #link callback was originally set to link_callback, defined below
if not pdf.err:
result.write(results.getvalue())
new_doc=Documents()
new_doc.project=new_project
new_doc.documents.save(output_filename, File(result))
new_doc.posted_by=old_mess[0].from_user_fk.username
new_doc.save()
result.close()