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. P>
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. P>
Voici mon code. S'il vous plaît quelqu'un aide. Merci. P>
10 Réponses :
1.Vous pouvez faire cela en utilisant: p>
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 P>
Après cela, vous n'avez besoin que de faire: p>
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. P>
ou p>
2.Vous pouvez utiliser f pour l'enregistrer sur votre serveur, puis obtenir des données telles que ceci: p>
$ fileatt = $ pdf-> sortie ("devis.pdf", 'e'); code> p> p>
$ data = chunk_split ($ Fileatt); code> p>
$ fileName = emplacement_on_server. "devis.pdf"; code> p> p>
$ fileatt = $ pdf-> sortie ($ nom de fichier, 'f'); code> p>
$ data = chunk_split (base64_encode (fichier_get_contents ($ fichier fichier))); code> p>
Pas besoin de $ data = chunk_split ($ Fileatt); code>, 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 code> 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.
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)
Depuis la méthode officiellement documentée utilisant 's' 's' code> ou
'e' code> renvoyé
null code> pour moi, je suis allé de l'avant et utilisé Truc tampon de sortie, par exemple:
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`
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. P>
exemple_054.php. p>
Puis j'ai créé une forme identique de TCPDF avec DOMPDF. P>
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. P>
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. P>
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 !! p>
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
Il y a du code de donc dans la question ci-dessus p> tcpdf.php code>. Nous pouvons voir que l'option
E code> dans la fonction code> de sortie code>. Il utilise
base64_encode code> &
chunk_split cod> et ajoute également
en-têtes code> avec elle, il n'est donc pas nécessaire d'ajouter des en-têtes.
Utilisation de Étape 2: Obtenez le chemin de fichier et envoyez le chemin de fichier à la fonction d'envoi du courrier électronique. P>
codeigniter code> et
TCPDF code>, c'est ce qui a fonctionné pour moi.
<?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());
}
}
}
?>
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; } }
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.
Je sais que c'est une sorte de vieille question (mettre de l'ancienne dessus!). Mais je réussis à le faire comme ça.
êtes-vous sûr que
$ _ session ['content'] code> n'est pas vide au moment de la génération PHP?