2016-10-13 16 views
2

「html2canvaまたはjsPDFからPHPMailer経由でPDFを添付する方法」に関する多くの回答を読んだが、試したすべてがうまくいかなかった。jsPDF、html2canvas、PHPMailer、もう一度...!メールにPDFを添付する

今のところ、いくつかの入力があるHTMLページがあります。顧客がすべてを記入すると、彼は[送信]ボタンをクリックします。

  • html2canva jsPDFはとしてページにカット
  • スクリーンショットを撮ることが
  • を必要とするようにjQueryはphpmailerのは、それを取り、メールで送信
  • PHPスクリプトにPDFを送信します。

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"; 

?> 

私が持っていましたベースなしのデコードでテストされていますが、MIMEタイプはありません。

編集1:13.10: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で良いように思われます。2016 その後、PHPに、全体のHTMLコードを送信するユーザーがフォームを送信作成したPDF

答えて

2

このラインを試してみてくださいそれ以外のパラメータがなければ、あなたはあなたの助けのために

$mail->addStringAttachment($pdfString, 'pdfName.pdf'); 
+0

くそー!私のために良いと思われる。 – OverSu

+0

私はJSから受け取ったPHPのvarを少し爆発させなければなりませんでした。 $ base = explode( 'data:application/pdf; base64、'、$ _POST ['data']); $ base = base64_decode($ base [1]); $ mail-> addStringAttachment($ base、 'pdfName.pdf'); – OverSu

+0

だからそれは働く??? – Diptox

0

使用html2pdf、へのリダイレクトを回避するために

var PDF = doc.output('datauri'); 

によって

var PDF = doc.output('datauristring'); 

を交換してくださいこのコード部分を使用してPDFを作成します。

$htmlCode= $_POST["htmlCodeSentWithJquery"]; 

require_once(dirname(__FILE__).'/html2pdf/html2pdf.class.php'); 
$html2pdf = new HTML2PDF('P','A4','fr'); 
$html2pdf->WriteHTML($htmlCode); 
$html2pdf->Output('pdfFileName.pdf'); 

コンストラクタ

/** 
* Constructeur 
* 
* @param string  $sens - landscape or portrait orientation 
* @param string  $format - format A4, A5, ... 
* @param string  $langue - language: fr, en, it ... 
* @param boolean  $unicode - TRUE means clustering the input text IS unicode (default = true) 
* @param String  $encoding - charset encoding; Default is UTF-8 
* @param array  $marges - margins by default, in order (left, top, right, bottom) 
* @return null 
*/ 
public function __construct($sens = 'P', $format = 'A4', $langue='en', $unicode=true, $encoding='UTF-8', $marges = array(5, 5, 5, 8)) 

についての詳細情報は、あなたのメール機能を使用してファイルを送信

OR

HTML2PDFのメール機能を使用し

$content_PDF = $html2pdf->Output('', true); 
    require_once(dirname(__FILE__).'/pjmail/pjmail.class.php'); 
    $mail = new PJmail(); 
    $mail->setAllFrom('[email protected]_site.net', "My personal site"); 
    $mail->addrecipient('[email protected]_site.net'); 
    $mail->addsubject("Example sending PDF"); 
    $mail->text = "This is an example of sending a PDF file"; 
    $mail->addbinattachement("my_document.pdf", $content_PDF); 
    $res = $mail->sendmail(); 

More about the email function

+0

感謝をPHPに掲載BASE64の物乞いの一部を共有することができ、動作しませんが、システム全体がhtml2canvaライブラリを使用しているため、私はHTML2PDFに切り替えることはできません。 .. – OverSu

+0

私の他の答えをチェックしてください、もし彼らがそれを見つけるなら他の人にこの答えを聞かせてください – Diptox

0
//=== Send it  
$.post("mail.php", 
{ 
    data: doc; 
}, function() {}).done(function() {/*SOME CODE*/}); 

BY 

//=== Send it  
$.post("mail.php", 
{ 
    data: doc //or doc.output('datauristring') 
}, function() {}).done(function() {/*SOME CODE*/}); 
+1

前者BYを後者に置き換えることを意味しますか? – mkl

関連する問題