Создание PDF-файла и отправка по электронной почте

Я смотрю на то, как пользователи могут вводить некоторую информацию в форму и отправлять ее по mail() .

Я хочу, чтобы детали были отправлены как вложение PDF. Возможно, с именем отправителя и датой / временем. test_user_06052011.pdf

У меня есть проект для PDF, но я не уверен, как бы я интегрировал этот проект для создания PDf в PHP.

У кого-нибудь есть примеры или способы, которыми я мог бы это сделать?

Взгляните на FPDF – http://www.fpdf.org/ – Это бесплатно и отличный инструмент для создания PDF-файлов

Существует PDF-генератор, который рекомендуется PHP, однако он был бы очень дорогим, и теперь меня зовут сейчас, однако я использовал FPDF несколько раз с большим успехом.

Очень простой способ создания сайта PDF-сервера – использовать wkhtmltopdf . Однако для его настройки вам понадобится доступ к серверу.

Для создания PDF вам нужны два файла: один – это PHP, который генерирует HTML, который вы хотите преобразовать в PDF. Допустим, это invoice.php:

 <?php $id = (int) $_GET['id']; ?> <h1>This is invoice <?= $id ?></h1> <p>some content...</p> 

А другой, который будет выставлять счет-фактуру и преобразовывать ее в PDF с помощью wkhtmltopdf:

 <?php $tempPDF = tempnam( '/tmp', 'generated-invoice' ); $url = 'http://yoursite.xx/invoice.php?id=123'; exec( "wkhtmltopdf $url $tempPDF" ); header('Content-Type: application/pdf'); header('Content-Disposition: attachment; filename=invoice.pdf'); echo file_get_contents( $tempPDF ); unlink( $tempPDF ); 

После того, как вы создали файл PDF, вы также можете отправить письмо с приложением таким образом:

 <?php $to = "abc@gmail.com"; $subject = "mail with attachment"; $att = file_get_contents( 'generated.pdf' ); $att = base64_encode( $att ); $att = chunk_split( $att ); $BOUNDARY="anystring"; $headers =<<<END From: Your Name <abc@gmail.com> Content-Type: multipart/mixed; boundary=$BOUNDARY END; $body =<<<END --$BOUNDARY Content-Type: text/plain See attached file! --$BOUNDARY Content-Type: application/pdf Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="your-file.pdf" $att --$BOUNDARY-- END; mail( $to, $subject, $body, $headers ); 

Если вы сделали Fillable PDF с Acrobat, вот хороший фрагмент кода, который поможет вам начать работу. Этот код требует, чтобы новейшая версия phpmailer работала, поэтому просто загрузите ее и поместите в папку класса в том же каталоге, в который вы помещаете этот код. Имейте форму pdf для отправки на страницу с этим кодом.

 /* Branden Sueper 2012 // PDF to Email - PHP 5 // Includes: PHPMailer 5.2.1 */ <?php if(!isset($HTTP_RAW_POST_DATA)) { echo "The Application could not be sent. Please save the PDF and email it manually."; exit; } echo "<html><head></head><body><img src='loading.gif'>"; //Create PDF file with data $semi_rand = md5(time()); $pdf = $HTTP_RAW_POST_DATA; $file = $semi_rand . ".pdf"; $handle = fopen($file, 'w+'); fwrite($handle, $pdf); fclose($handle); // require_once('class/class.phpmailer.php'); //include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded $mail = new PHPMailer(false); // the true param means it will throw exceptions on errors, which we need to catch $mail->IsSMTP(); // telling the class to use SMTP try { $mail->Host = "mail.xxxxxxx.com"; // SMTP server $mail->SMTPDebug = 2; // enables SMTP debug information (for testing) $mail->SMTPAuth = true; // enable SMTP authentication $mail->SMTPSecure = "ssl"; // sets the prefix to the servier $mail->Host = "smtp.gmail.com"; // sets GMAIL as the SMTP server $mail->Port = 465; // set the SMTP port for the GMAIL server $mail->Username = "xxxxxxx@xxxxxxx.com"; // GMAIL username $mail->Password = "xxxxxxxx"; // GMAIL password $mail->AddAddress('Recipient@xxxxxxx.com', 'First Last'); $mail->SetFrom('reply-to-address@xxxxxxx.com', 'First Last'); $mail->Subject = 'Your Subject'; $mail->Body = 'Hello!'; $mail->AddAttachment($file); // attachment $mail->Send(); //Delete the temp pdf file then redirect to the success page unlink($file); echo '<META HTTP-EQUIV="Refresh" Content="0; URL="success.php">'; exit; } catch (phpmailerException $e) { //you can either report the errors here or redirect them to an error page //using the above META tag echo $e->errorMessage(); //Pretty error messages from PHPMailer } catch (Exception $e) { echo $e->getMessage(); //Boring error messages from anything else! } //Verify the temporary pdf file got deleted unlink($file); ?> 

PHPMailer Просто скачайте PHP-почерк и настройте приведенный выше код по своему вкусу. Для получения дополнительной информации о том, как создать заполняемый PDF, перейдите по адресу http://www.adobe.com/products/acrobatpro/create-fillable-pdf-forms.html.

Удачи! Я помню, что потратил 3+ дня, пытаясь выяснить очень похожую проблему!

В зависимости от ваших требований вы также можете взглянуть на TCPDF , я многому использую для создания PDF-файлов «на лету» с PHP … Он имеет (ограниченный) HTML-встроенный PDF-файл и очень прост в использовании (просто посмотрите примеры). И еще одно важное преимущество: он все еще находится в активном развитии (немного слишком активен для некоторых, возможно: p).

Невозможно найти причину использования функции native mail() сегодня. В основном тривиальные ситуации мы можем использовать библиотеку PHPMailer, которая в стиле ООП дает нам возможность отправлять электронные письма даже без понимания заголовка. Решение даже без сохранения физического файла

 $mail = new PHPMailer(); ... $doc = $pdf->Output('S'); $mail->AddStringAttachment($doc, 'doc.pdf', 'base64', 'application/pdf'); $mail->Send(); 

Вот полный код http://codexhelp.blogspot.in/2017/04/php-email-create-pdf-and-send-with.html

  /**/ $mailto = $_POST['mailto']; $mailfrom = $_POST['mailfrom']; $mailsubject = $_POST['mailsubject']; $firstname = $_POST['firstname']; $lastname = $_POST['lastname']; $description = $_POST['description']; $description = wordwrap($description, 100, "<br />"); /* break description content every after 100 character. */ $content = ''; $content .= ' <style> table { border-collapse: collapse; } table{ width:800px; margin:0 auto; } td{ border: 1px solid #e2e2e2; padding: 10px; max-width:520px; word-wrap: break-word; } </style> '; /* you css */ $content .= '<table>'; $content .= '<tr><td>Mail To</td> <td>' . $mailto . '</td> </tr>'; $content .= '<tr><td>Mail From</td> <td>' . $mailfrom . '</td> </tr>'; $content .= '<tr><td>Mail Subject</td> <td>' . $mailsubject . '</td> </tr>'; $content .= '<tr><td>Firstname</td> <td>' . $firstname . '</td> </tr>'; $content .= '<tr><td>Lastname</td> <td>' . $lastname . '</td> </tr>'; $content .= '<tr><td>Description</td> <td>' . $description . '</td> </tr>'; $content .= '</table>'; require_once('html2pdf/html2pdf.class.php'); $to = $mailto; $from = $mailfrom; $subject = $mailsubject; $html2pdf = new HTML2PDF('P', 'A4', 'fr'); $html2pdf->setDefaultFont('Arial'); $html2pdf->writeHTML($content, isset($_GET['vuehtml'])); $html2pdf = new HTML2PDF('P', 'A4', 'fr'); $html2pdf->WriteHTML($content); $message = "<p>Please see the attachment.</p>"; $separator = md5(time()); $eol = PHP_EOL; $filename = "pdf-document.pdf"; $pdfdoc = $html2pdf->Output('', 'S'); $attachment = chunk_split(base64_encode($pdfdoc)); $headers = "From: " . $from . $eol; $headers .= "MIME-Version: 1.0" . $eol; $headers .= "Content-Type: multipart/mixed; boundary=\"" . $separator . "\"" . $eol . $eol; $body = ''; $body .= "Content-Transfer-Encoding: 7bit" . $eol; $body .= "This is a MIME encoded message." . $eol; //had one more .$eol $body .= "--" . $separator . $eol; $body .= "Content-Type: text/html; charset=\"iso-8859-1\"" . $eol; $body .= "Content-Transfer-Encoding: 8bit" . $eol . $eol; $body .= $message . $eol; $body .= "--" . $separator . $eol; $body .= "Content-Type: application/octet-stream; name=\"" . $filename . "\"" . $eol; $body .= "Content-Transfer-Encoding: base64" . $eol; $body .= "Content-Disposition: attachment" . $eol . $eol; $body .= $attachment . $eol; $body .= "--" . $separator . "--"; if (mail($to, $subject, $body, $headers)) { $msgsuccess = 'Mail Send Successfully'; } else { $msgerror = 'Main not send'; }