Django - 将使用xhtml2pdf创建的PDF写入服务器磁盘

时间:2014-07-22 19:32:53

标签: django xhtml2pdf

我正在尝试编写一个脚本,将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'

有谁知道如何解决这个问题?谢谢!

1 个答案:

答案 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()