我已经阅读了很多关于“如何从 html2canva 或 jsPDF 通过 PHPMailer 附加 PDF”的答案,但我尝试的一切都没有奏效。
现在,我有一个带有一些输入的 HTML 页面。当客户填写所有这些信息时,他点击发送按钮。
- html2canva 截图
- jsPDF 根据需要将其切割成页面
- jQuery 将 PDF 发送到 PHP 脚本
- PHPMailer 接受它并通过邮件发送。
一切正常,除了 PDF 文件的附件。
所以,我需要你的帮助;)
这是我的:
JS 脚本:
html2canvas($("#Div"), {
onrendered: function(canvas) {
//=== Take screenshot
var imgData = canvas.toDataURL('image/jpeg');
//=== PDFize it
var doc = new jsPDF("p", "px");
var options = {
pagesplit: true
};
//=== Split it
var imgWidth = 210;
var pageHeight = 295;
var imgHeight = canvas.height * imgWidth / canvas.width;
var heightLeft = imgHeight;
var doc = new jsPDF('p', 'mm');
var position = 0;
doc.addImage(imgData, 'PNG', 0, position, imgWidth, imgHeight);
heightLeft -= pageHeight;
while (heightLeft >= 0) {
position = heightLeft - imgHeight;
doc.addPage();
doc.addImage(imgData, 'PNG', 0, position, imgWidth, imgHeight);
heightLeft -= pageHeight;
}
//=== Send it
$.post("mail.php",
{
data: doc;
}, function () {}).done(function() {/*SOME CODE*/});
//=== Just to test the PDF
doc.save( 'file.pdf');
}
});
还有我的 PHP 脚本:
<?php
if(!empty($_POST['data']))
{
require 'lib/PHPMailer-master/PHPMailerAutoload.php';
$mail = new PHPMailer;
$mail->isSMTP();
$mail->Host = '*';
$mail->SMTPAuth = *;
$mail->Username = '*';
$mail->Password = '*';
$mail->SMTPSecure = '*';
$mail->Port = *;
$mail->setFrom('*', '*');
$mail->addAddress('*', '*');
//=== Tested this
$originalbase = $base;
//=== or this
$base = explode('data:application/pdf;base64,', $_POST['data']);
$mail->addStringAttachment($originalbase, "name.pdf", "base64", "application/pdf");
$mail->isHTML(true);
$mail->Subject = '*';
$mail->Body = '*';
if(!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
echo 'Message has been sent';
}
} else echo "No Data Found";
?>
我测试过base64解码,没有,mime类型,没有...
编辑 1:2016 年 10 月 13 日 似乎很适合
var PDF = doc.output('datauri');
$base = explode('data:application/pdf;base64,', $_POST['data']);
$base = base64_decode($base[1]);
$mail->addStringAttachment($base, 'pdfName.pdf');
编辑 2:13.10.2016 替换
var PDF = doc.output('datauri');
通过
var PDF = doc.output('datauristring');
为了避免重定向到创建的 PDF
最佳答案
尝试不带其他参数的这一行,如果它不起作用,你能分享发布到php的base64请求的一部分吗
$mail->addStringAttachment($pdfString, 'pdfName.pdf');
关于javascript - jsPDF、html2canvas、PHPMailer,又是...!将 PDF 附加到邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40014881/