javascript - jsPDF、html2canvas、PHPMailer,又是...!将 PDF 附加到邮件

标签 javascript php jquery email pdf

我已经阅读了很多关于“如何从 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/

相关文章:

javascript - 如何检查值是否为空?

javascript - React - 向 Children 发送功能 Prop

javascript - 使用 browserify 时未定义 require 错误

javascript - jquery 动画和 CSS 位置

php - mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows 等...期望参数 1 是资源

javascript - 'mouseup' 和 'click' 事件有什么区别?

javascript - 如何从剑道网格中获取选中的行?

javascript - RxJS 将当前值推送给迟到的订阅者

PHP mySQL一对多获取结果作为数组

php - 如何计算行和列中的值的总和?