【问题标题】:Opening PDF file generated by Reportlab in Django using Ajax使用 Ajax 在 Django 中打开 Reportlab 生成的 PDF 文件
【发布时间】:2016-03-29 20:44:31
【问题描述】:

我正在使用带有 Django 的 Reportlab 来生成在客户端计算的数据的 pdf。

选择 Ajax 是因为客户端有重要的数据要传输以生成 pdf。

$.ajax({
    type:'POST',
    url:document.URL + '/export',
    data: JSON.stringify(data),
    dataType:'json',
    contentType:'application/pdf',
    success:function(data){
        // Question 1. What should I insert here to download pdf?
    },
    error:function(e){
        ...
    }
});

这里是 view.py

def export(request, *args, **kwargs):

    // Perform Ajax check
    ...

    response = HttpResponse(content_type='application/pdf')
    response['Content-Disposition'] = 'attachment; filename="essay.pdf"'

    p = canvas.Canvas(response, bottomup=0)
    data = json.loads(request.body)

    p.drawString(100, 100, "Hello world.")
    p.showPage()
    p.save()
    return response

问题 2. 我无法让 ajax 成功完成其请求,只能调用错误回调。这个问题中提到了同样的问题

ReportLab in Django

但没有人回答。我错过了什么吗?

【问题讨论】:

    标签: jquery ajax django reportlab


    【解决方案1】:

    我的解决方案是使用标准格式而不是 ajax。

    你可以在你的 html 中放置一个表单(或者使用 JS 构建它)

    <form id="my_form" action="export" method="post">
        <input id="my_form_data" type="hidden" name="data" />
    </form>
    

    然后,当您希望发送数据时,使用 JS:

    $('#my_form_data').value(JSON.stringify(data));
    $('#my_form').submit();
    

    【讨论】:

      【解决方案2】:

      您不能通过 ajax 下载文件。但是你可以使用这个库:jquery.fileDownload

      jQuery File Download 是一个跨服务器平台兼容的 jQuery 插件,它提供了类似 Ajax 的文件下载体验,这在 Web 上通常是不可能的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-11
        • 1970-01-01
        • 2011-10-05
        • 1970-01-01
        • 2019-05-11
        • 1970-01-01
        相关资源
        最近更新 更多