8
votes

Envoi d'une pièce jointe à l'adresse TCPDF

php J'ai un formulaire de demande de cours simple, qui est rempli, un email est envoyé au demandeur avec une citation de frais pour les cours qu'il a sélectionnés en tant que pièce jointe PDF.

J'utilise TCPDF et je transmettez les données du formulaire à la bibliothèque à l'aide de variables de session. Le contenu est au format HTML.

Le PDF est généré et envoyé sous forme de pièce jointe selon les besoins, problème est qu'il est vide..unly l'en-tête et le pied de page sont dans le document. Ceci est particulièrement donc sous Linux. Sous Windows, le document PDF est généré comme prévu lors de la téléchargement. Toutefois, lorsque vous cliquez sur "Afficher" avant de télécharger le document, seul l'en-tête et le pied de page affichent.

Voici mon code. S'il vous plaît quelqu'un aide. Merci. xxx


1 commentaires

êtes-vous sûr que $ _ session ['content'] n'est pas vide au moment de la génération PHP?


10 Réponses :


10
votes

1.Vous pouvez faire cela en utilisant:

$ fileatt = $ pdf-> sortie ("devis.pdf", 'e');

L'option E: renvoyez le document en tant que pièce jointe de messagerie multi-pièces de base64 mime (RFC 2045), j'ai trouvé ces informations sur: Documentation TCPDF

Après cela, vous n'avez besoin que de faire:

$ data = chunk_split ($ Fileatt);

Et votre fichier est prêt à être attaché à la poste, il n'est pas nécessaire de travailler avec des fichiers. Gardez simplement vos en-têtes et autres paramètres et cela fera le travail.

ou

2.Vous pouvez utiliser f pour l'enregistrer sur votre serveur, puis obtenir des données telles que ceci:

$ fileName = emplacement_on_server. "devis.pdf";

$ fileatt = $ pdf-> sortie ($ nom de fichier, 'f');

$ data = chunk_split (base64_encode (fichier_get_contents ($ fichier fichier)));


2 commentaires

Pas besoin de $ data = chunk_split ($ Fileatt); , comme TCPDF divise déjà les données en morceaux. Peut-être que ce n'était pas le cas dans le passé. En fait, utiliser chunk_split sur sa sortie gâchre maintenant les choses.


$ nom de fichier = 'sortie.pdf'; $ pdfstring = $ pdf-> sortie ($ _ serveur ["dactylography_root '].' / chemin / à / to / fichier / '. $ nom de fichier,' s '); $ mail-> addfstringatchment ($ pdfstring, nom de fichier); C'est la seule façon dont cela a fonctionné pour moi.



8
votes
Output($name='yourfilename.pdf', $dest='E')
E is the solution for the problem u have. Here is a lisst of the possible values of the $dest string (Destination where to send the document):
I: send the file inline to the browser (default). 
D: send to the browser and force a file download with the name given by name.
F: save to a local server file with the name given by name.
S: return the document as a string (name is ignored).
FI: equivalent to F + I option
FD: equivalent to F + D option
E: return the document as base64 mime multi-part email attachment (RFC 2045)

0 commentaires

1
votes

Depuis la méthode officiellement documentée utilisant 's' 's' ou 'e' renvoyé null pour moi, je suis allé de l'avant et utilisé Truc tampon de sortie, par exemple: xxx


0 commentaires

7
votes

J'ai essayé de nombreuses options. Celui qui a fonctionné était lorsque j'ai utilisé le réglage de sortie de sortie TCPDF "F" pour enregistrer dans un dossier. Inclus les fichiers phpmailer et ont utilisé le code ci-dessous.

$pdf->Output("folder/filename.pdf", "F"); //save the pdf to a folder setting `F`
require_once('phpmailer/class.phpmailer.php'); //where your phpmailer folder is
$mail = new PHPMailer();                    
$mail->From = "email.com";
$mail->FromName = "Your name";
$mail->AddAddress("email@yahoo.com");
$mail->AddReplyTo("email@gmail.com", "Your name");               
$mail->AddAttachment("folder/filename.pdf");      
// attach pdf that was saved in a folder
$mail->Subject = "Email Subject";                  
$mail->Body = "Email Body";
if(!$mail->Send())
{
   echo "Message could not be sent. <p>";
   echo "Mailer Error: " . $mail->ErrorInfo;
}
else
{
   echo "Message sent";
} //`the end`


0 commentaires

0
votes

C'est beaucoup plus de travail pour le faire, mais je voulais donner à l'utilisateur l'option de sortie D: Envoyer au navigateur et forcer un fichier Télécharger avec le nom donné par nom ou enregistrez-le immédiatement sous forme de fichier PDF prêt pour Édition.

exemple_054.php.

Puis j'ai créé une forme identique de TCPDF avec DOMPDF.

Une fois le formulaire soumis, le formulaire appellera mon script de soumission et le script de soumission accédera aux valeurs peuplées et à son tour remplirons mon document DOMPDF identique. Je sauvegarde ensuite mon DOMPDF DOC avec ses nouvelles valeurs polageuses. Le fichier DOMPDF enregistré peut désormais être envoyé par courrier électronique via PHPMailer en tant que pièce jointe de courrier électronique PDF entièrement peuplée.

Il y avait probablement un moyen plus facile de le faire via TCPDF elle-même, mais cela satisfait parfaitement mes exigences. Et je dois apprendre Dompdf avec TCPDF en même temps.


0 commentaires

0
votes

Comme un ampleur sur mon dernier message, cela ne s'applique que si l'utilisateur choisit d'accéder au fichier PDF à partir du navigateur, option de sortie D: exemple_054.php. Je n'ai vu aucun autre moyen d'envoyer par courrier électronique en tant que PDF créé sur le navigateur et envoyez-le comme la pièce jointe du fichier PDF du fichier PDF sans ré-création du fichier PDF avec DOMPDF et enregistrer le PDF peuplé afin de pouvoir être envoyé alors comme pièce jointe. Si l'utilisateur choisit de sauvegarder le fichier PDF avant de remplir, il s'agit d'un non-question, car le fichier peuplé existera alors pour la pièce jointe. S'il est un moyen plus facile de gérer ce scénario, merci de me le faire savoir !!


2 commentaires

Ben, combiner les deux, à moins qu'ils ne soient des réponses vraiment différentes. Il suffit de cliquer sur le lien d'édition ci-dessous la réponse et de la modifier. Et supprimer la 2e réponse


@Ben Vous devez faire un lien HREF pour des exemples (fichier de liens_054.php) dans votre réponse



0
votes

Il y a du code de tcpdf.php . Nous pouvons voir que l'option E dans la fonction de sortie . Il utilise base64_encode & chunk_split et ajoute également en-têtes avec elle, il n'est donc pas nécessaire d'ajouter des en-têtes. xxx

donc dans la question ci-dessus xxx


0 commentaires

0
votes

Utilisation de codeigniter code> et TCPDF code>, c'est ce qui a fonctionné pour moi.

  1. Étape 1: Enregistrez le document sur le serveur. LI>
  2. Étape 2: Obtenez le chemin de fichier et envoyez le chemin de fichier à la fonction d'envoi du courrier électronique. P>

    <?php
    
    function GenerateQuotation(){
        session_start();
    
        require_once('../config/lang/eng.php');
    
        require_once('../tcpdf.php');
    
        // create new PDF document
    
        $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
    
        // set document information
    
        $pdf->SetCreator(PDF_CREATOR);
    
        $pdf->SetAuthor('Name of Author');
    
        $pdf->SetTitle('Quotation Request');
    
        $pdf->SetSubject('TCPDF Tutorial');
    
        $pdf->SetKeywords('TCPDF, PDF, example, test, guide');
    
        $pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, '', PDF_HEADER_STRING);
    
        $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
        $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
    
        $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
    
        $pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
        $pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
        $pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
    
        $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
    
        $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
    
        $pdf->setLanguageArray($l);
    
        $pdf->setFontSubsetting(true);
    
        $pdf->SetFont('dejavusans', '', 14, '', true);
    
        $pdf->AddPage();
    
        $html = '<span style="font-size:7pt;">' . $_SESSION['content'] . '</span>';
        $html .= <<<EOD
        EOD;
    
        $pdf->writeHTMLCell($w=0, $h=0, $x='', $y='', $html, $border=0, $ln=1, $fill=0, $reseth=true, $align='', $autopadding=true);       
    
        //Change this according to where you want your document to be uploaded to
        $LocationOnServer = 'C:\wamp64\www\projectname\uploads\invoices/\/'; 
    
        $FileNamePath = $LocationOnServer.'quotation.pdf';
    
        //Save the document to the server
        $QuotationAttachment = $pdf->Output($FileNamePath, 'F');
    
        $EmailAddress = $_SESSION['email'];       
    
        if(!empty($FileNamePath)){
            $this->SendQuotation($EmailAddress,$FileNamePath);
        }
        else{
            print_r('Could not trace file path');
        }             
    
    }
    
    function SendQuotation($EmailAddress,$FileNamePath){
        $Subject = 'My subject here';
        $Message = 'My Email body message here';
    
        $this->email
            ->from('xxxxx@xxxx.com', 'From Who')    
            ->to($EmailAddress) 
            ->subject($Subject)
            ->message($Message);
    
        $this->email->attach($FileNamePath);
        if($this->email->send()){
            print_r('Email Sent');
    
        }else{
            print_r($this->email->print_debugger());
        }
    
    }
    
    
    }
    ?>
    


0 commentaires

3
votes
First generate the PDF using tcpdf library.Here is the example for generate PDF:

<?php
    ini_set("display_errors", 1);

    require_once('./TCPDF/tcpdf.php');

    class MYPDF extends TCPDF {
        public function Footer() {
            $this->SetY(-15);
            $this->SetFont('helvetica', 'I', 8);
            $this->Cell(0, 0, 'Product Company - Spider india, Phone : +91 9940179997, TIC : New No.7, Old No.147,Mount Road, Little Mount,Saidapet, Chennai, Tamilnadu,Pin - 600015, India.', 0, 0, 'C');
            $this->Ln();
            $this->Cell(0,0,'www.spiderindia.com - TEL : +91-44-42305023, 42305337  - E : marketing@spiderindia.com', 0, false, 'C', 0, '', 0, false, 'T', 'M');
            $this->Cell(0, 10, 'Page '.$this->getAliasNumPage().'/'.$this->getAliasNbPages(), 0, false, 'C', 0, '', 0, false, 'T', 'M');
        }    
    }

    $pdf = new MYPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
    $pdf->SetCreator(PDF_CREATOR);
    $pdf->SetAuthor('Manikandan');
    $pdf->SetTitle('Quote');
    $pdf->SetSubject('Quote');
    $pdf->SetKeywords('PDF, Quote');

    $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
    $pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
    $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
    $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);

    $pdf->SetFont('times', '', 15); 

    $pdf->AddPage();

    // create some HTML content
    $now = date("j F, Y");
    $company_name = 'ABC test company';

    $user_name = 'Mr. Manikandan';
    $invoice_ref_id = '2013/12/03';


    $html = '';
    $html .= '<table style="padding-top:25px;">
                <tr>
                    <td colspan="2" align="left"><h4>Kannama & CO</h4></td>
                    <td colspan="2" align="right"><h1 style="color:#6C8BB5;">Quote</h1></td>
                </tr>

                <tr>
                    <td colspan="2" align="left"><table><tr><td>'.$user_name.'</td></tr><tr><td>Mob NO : 9791564278</td></tr></table></td>
                    <td colspan="2" align="right"><table border="1" align="center"><tr><td>Date</td><td>'.$now.'</td></tr><tr><td>Quote</td><td>#0041</td></tr></table></td>
                </tr>

                <tr>
                    <td colspan="2" align="left"><table><tr><td style="background-color: #2B7DB9;color:white;width:75%;">Customer</td></tr><tr><td>Dear senthil kumar,</td></tr><tr><td>39,Jawahar sangam street,Chockalingapuram,Aruppukottai.</td></tr><tr><td><b>Mob no : </b> 9791564821</td></tr></table></td>
                </tr>


             </table>';

    $html .= '<br><br>
              <table border="1" cellpadding="5">
                <tr style="background-color: #2B7DB9;color:white;">
                    <td colspan="4">Quote # Quote 001</td>            
                </tr>
                <tr>
                    <td><b>Product</b></td>
                    <td><b>Quantity</b></td>
                    <td><b>Subtotal</b></td>
                    <td align="right"><b>Amount (Rs.)</b></td>
                </tr>
                <tr style="background-color: #C1E1F8;">
                    <td>Product 1</td>
                    <td>30</td>
                    <td>10</td>
                    <td align="right">300</td>
                </tr>
                <tr>
                    <td>Product 3</td>
                    <td>15</td>
                    <td>3</td>
                    <td align="right">75</td>
                </tr>
                <tr style="background-color: #C0E1F8;">
                    <td>Product 2</td>
                    <td>15</td>
                    <td>3</td>
                    <td align="right">75</td>
                </tr>
                <tr>
                    <td colspan="3" align="right"><b>Sub Total:</b></td>
                    <td align="right"><b> 375</b></td>
                </tr>
                <tr>
                    <td colspan="3" align="right"><b>GST:</b></td>
                    <td align="right"><b> 5</b></td>
                </tr>
                <tr>
                    <td colspan="3" align="right"><b>CGST:</b></td>
                    <td align="right"><b> 10</b></td>
                </tr>
                <tr>
                    <td colspan="3" align="right"><b>Delivery:</b></td>
                    <td align="right"><b> 100</b></td>
                </tr>
                <tr>
                    <td colspan="3" align="right"><b>Total:</b></td>
                    <td align="right"><b> 1000</b></td>
                </tr>
             </table>';

    $html = str_replace('{now}',$now, $html);
    $html = str_replace('{company_name}',$company_name, $html);
    $html = str_replace('{user_name}',$user_name, $html);
    $html = str_replace('{invoice_ref_id}',$invoice_ref_id, $html);

    $pdf->writeHTML($html, true, false, true, false, '');

    $pdf->lastPage();

    $fileName = time() . '.pdf';
    ob_clean();
    $pdf->Output(FCPATH . 'files/' . $fileName, 'F');

    if (file_exists(FCPATH . 'files/' . $fileName)) {
        if (!empty($data->email)) {
            $status = $this->sendReceiptEmail($fileName, $data->email);
            return $status;   
        } else {
            return false;
        }
    } else {
        return false;
    }

    Use PHP Mailer library to send email. Here is the example to send mail with attachment.

    function sendReceiptEmail($fileName, $mailto)
    {
        $file = FCPATH . 'files/' . $fileName;
        date_default_timezone_set('Asia/Kolkata');

        require __DIR__.'/../libraries/phpmailer/PHPMailerAutoload.php';

        $mail = new PHPMailer;

        $mail->SMTPDebug = 0;
        $mail->Debugoutput = 'html';
        $mail->IsSMTP();
        $mail->Host = "xxx.xxx.com";
        $mail->Port = 587;
        $mail->SMTPAuth = true;
        $mail->Username = "info@xxx.com";
        $mail->Password = "xxxxx";
        $mail->setFrom('info@xxx.com', 'Company Quote');
        $mail->addReplyTo('info@xxx.com');
        $mail->addAddress($mailto);
        $mail->Subject = 'Quote';
        $mail->Body = 'Here we attached quote detail.Please find the attachment.';

        $mail->addAttachment($file);

        //send the message, check for errors
        if (!$mail->send()) {
            return false;
        } else {
            $file = FCPATH . 'files/' . $fileName;
            if (file_exists($file)) {
                unlink($file);
            }
            return true;
        }
    }

1 commentaires

S'il vous plaît ne postez pas de code de code uniquement des réponses. Allez-y et expliquez votre solution et comment vous résolvez la question de l'OP.



2
votes

Je sais que c'est une sorte de vieille question (mettre de l'ancienne dessus!). Mais je réussis à le faire comme ça. XXX


0 commentaires