使用带有ajax和Django python的JsPDF发送PDF附加电子邮件

时间:2017-03-16 13:42:53

标签: python ajax django pdf jspdf

我在使用带有ajax和django的jspdf发送pdf附加电子邮件时遇到问题。问题是服务器端views.py 打印(pdf_s)始终返回'无' 但客户端 console.log(pdf)返回二进制值。

请参考我尝试过的以下代码。

的script.js

这是客户端代码。我正在使用Ajax将数据发送到服务器

"dateFormats": [{
  "period": "fff",
  "format": "NN:SS:QQQ"
}, {
  "period": "ss",
  "format": "NN:SS:QQQ"
}, {
  "period": "mm",
  "format": "JJ:NN"
}, {
  "period": "hh",
  "format": "JJ:NN"
}, {
  "period": "DD",
  "format": "MMM DD"
}, {
  "period": "WW",
  "format": "MMM DD"
}, {
  "period": "MM",
  "format": "MMM"
}, {
  "period": "YYYY",
  "format": "YYYY"
}]

views.py

function sendMail(){
    getCanvas().then(function(canvas) {
        console.log('Test');
        var img = canvas.toDataURL("image/png",0.98);
        var imgWidth = 200;
        var pageHeight = 295;
        var imgHeight = canvas.height * imgWidth / canvas.width;
        var heightLeft = imgHeight;

        var doc = new jsPDF('p', 'mm', 'a4', 'pt');
        var position = 0;

        doc.addImage(img, 'JPEG', 5, position, imgWidth, imgHeight);
        heightLeft -= pageHeight;

        while (heightLeft >= 0) {
            position = heightLeft - imgHeight;
            doc.addPage();
            doc.addImage(img, 'JPEG', 5, position, imgWidth, imgHeight);
            heightLeft -= pageHeight;
        }
        var pdf = btoa(doc.output());
        console.log(pdf);
        $.ajax({
            type:'POST',
            url:'sendmail/',
            data:{
                pdf_data: pdf,
                csrfmiddlewaretoken: csrftoken
            },
            success:function(data){
                console.log(data);
            }

        });
    });
}

1 个答案:

答案 0 :(得分:0)

通过浏览器开发工具检查ajax请求>网络。也许" pdf_data"参数不存在。

我通过原生js发送文件。

JS

var formData = new FormData();
formData.append('file.pdf', file);
var xhr = new XMLHttpRequest();
xhr.onload = function (e) {
    if (xhr.readyState === 4 && xhr.status === 200){
        result=xhr.responseText;
        console.log(result);
    }
}
xhr.open('POST', url, true);
xhr.setRequestHeader("X-CSRFToken", csrfmiddlewaretoken);
xhr.send(formData);

的Python

element_file=File(request.FILES[request.FILES.keys()[0]])
with open('file.pdf','wb+') as destination: 
   for chunk in element_file.chunks(): destination.write(chunk)

如果通过输入类型="文件"

从本地计算机发送文件,以防万一