使用jsPDF创建的PDF不会通过ajax

时间:2016-08-11 23:44:10

标签: javascript python ajax jspdf

我正在使用jsPDF在客户端创建PDF,通过ajax调用将其发送到我的python服务器,然后通过电子邮件将PDF发送给我自己。当我用一些文本创建jsPDF对象时:

var doc = new jsPDF();
doc.text(35, 25, "test");

它有效,我收到附带填充PDF的电子邮件。当我尝试添加图像时:

var doc = new jsPDF();
doc.text(35, 25, "test");
doc.addImage(imageDataURL, 0, 50);

ajax调用没有通过,我收到错误。我已尝试在页面上显示图像,没有文本,但发生了同样的错误。我的python控制器没有抱怨,主要是因为它没有被调用。当我将错误打印到控制台时,它表示responseText为“”,状态为0。

当我使用doc.save()下载创建的PDF时,PDF看起来很好。它有图像,文本是正确的位置。

我的代码如下所示:

使用Javascript:

checkout_button.addEventListener('click', function() {
    var canvas = document.createElement('canvas');
    var context = canvas.getContext('2d');
    var image = new Image();
    image.src = curr_order.image_url;
    canvas.width = image.naturalWidth;
    canvas.height = image.naturalHeight;
    context.drawImage(image, 0, 0, canvas.width, canvas.height);

    var doc = new jsPDF();
    doc.text(35, 25, "test");
    doc.addImage(canvas.toDataURL('image/jpeg', 1), 'jpeg', 0, 50);
    var pdf = doc.output();
    //doc.save();
    $.ajax('{{=URL('default', 'send_note_PDF')}}', {
        data: {
            pdf_data: pdf
        },
        Method: 'POST',
        success: function () {
            console.log('cool');
        },
        error: function (data) {
            console.log('not cool');
            console.log(data);
        }
    });
});

的Python:

def send_note_PDF():
    pdf_data = request.vars.pdf_data
    file = open('test.pdf', 'w')
    file.write(pdf_data)
    file.close()

    msg = MIMEMultipart()
    msg['From'] = 'sending-email@gmail.com'
    msg['To'] = 'receiving-email@gmail.com'
    msg['Subject'] = 'PDF Test'
    body = "test"
    msg.attach(MIMEText(body))

    file = open('test.pdf', 'rb')
    part = MIMEApplication(file.read(), file.name)
    part['Content-Disposition'] = 'attachment; filename="%s"' % file.name
    msg.attach(part)

    mail = smtplib.SMTP('smtp.gmail.com', 587)
    mail.ehlo()
    mail.starttls()
    mail.login('sending-email@gmail.com', 'password')
    mail.sendmail('sending-email@gmail.com', 'receiving-email@gmail.com', msg.as_string())
    mail.close()
    return 'ok'

在通过ajax传递之前,我是否必须格式化doc的输出?我已经尝试将其字符串化并在python端解析它。它可以在没有图片的情况下工作,但每当添加该图片时,它都不能很好地播放。

0 个答案:

没有答案