我正在使用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端解析它。它可以在没有图片的情况下工作,但每当添加该图片时,它都不能很好地播放。