我正在使用 jsPDF 在客户端创建一个 pdf,并且使用pdf.save('document.pdf');
. 现在我正在尝试通过使用 AJAX 和后端功能将电子邮件与 PDF 一起作为附件发送Zend_Mail
,但它不起作用!
好吧,我试过了pdf.output();
,pdf.output('blob');
也试过通过pdf.output('datauristring');
但面临不同的问题。
首先,我已经通过 using 将 HTML 转换为 png domtoimage
,其代码如下:
domtoimage.toPng(node)
.then(function (dataUrl) {
/* This function is used to generate or send output of the pdf to the back end */
createCalendarPdf(dataUrl);
})
.catch(function (error) {
alert('Oops, something went wrong! ' + error);
}
);
为了在客户端下载 PDF,我简单地使用了它并且它可以工作
pdf.save('document.pdf');
发送blob
或base64 string
我遇到困难。
第一种方法
下面的代码将 PDF 输出更改为blob
对象 url
BLOB 对象 URL
为 PDF 创建一个 blob 对象 url
var binaryImg = pdf.output();
var length = binaryImg.length;
var arrayBuffer = new ArrayBuffer(length);
var uintArray = new Uint8Array(arrayBuffer);
for (var i = 0; i < length; i++) {
uintArray[i] = binaryImg.charCodeAt(i);
}
var currentBlob = new Blob([uintArray], {type: 'application/pdf'});
var createdBlobUrl = URL.createObjectURL(currentBlob);
# Output looks like this
blob:http://example.com/ff471a1c-702j-453d-01g0-d6a26l901bvz
AJAX 请求
使用FormData
var fd = new FormData();
fd.append('file', createdBlobUrl);
$.ajax({
type: 'POST',
url: functionUrl,
data: fd,
processData: false,
contentType: false,
async: false
}).done(function(data) {
console.log(data);
});
所以,我不确定如何从blob
Zend 或简单的 PHP 中的对象 URL 获取内容。所以我尝试file_get_contents($this->_params['file'])
了,但没有奏效!
第二种方法
由于字符串的长度,试图通过pdf.output();
或pdf.output('datauristring');
无法在后端接收结果。正如我之前所说,我首先将 HTML 模板更改为 PNG,然后再创建一个 PDF。所以,这就是为什么 web 检查器卡在进程之间然后必须完全终止页面的原因。
已经增加了max_post_size
和其他东西已经在php.ini
Zend_Mail 函数
$mail = new Zend_Mail();
$attachment = $mail->createAttachment($pdfFile);
$attachment->type = 'application/pdf';
$attachment->disposition = Zend_Mime::DISPOSITION_ATTACHMENT;
$attachment->encoding = Zend_Mime::ENCODING_BASE64;
$attachment->filename = 'document.pdf';
$mail->setBodyHtml($html);
$mail->setFrom($emailFrom, 'Adeel');
$mail->addTo($emailTo, 'ABC');
$mail->setHeaderEncoding(Zend_Mime::ENCODING_BASE64);
$mail->setSubject($subject);
// send email
$mail->send();
所以,简而言之,我只是想知道如何从blob
对象 url 获取内容,如果有任何可能的方式或如何将base64
字符串传递到后端并在 PHP 中解析它。
我已经花了几天的时间来寻找这个问题的解决方案,但是找不到,或者我在这里做错了什么。