Создание PDF и отправка по электронной почте - PullRequest
6 голосов
/ 06 мая 2011

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

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

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

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

Ответы [ 6 ]

4 голосов
/ 06 мая 2011

Очень простой способ создания 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 );
3 голосов
/ 30 апреля 2017

Вот полный код 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';
    }
3 голосов
/ 30 июля 2012

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

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

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

2 голосов
/ 14 октября 2016

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

$mail = new PHPMailer();
...
$doc = $pdf->Output('S');
$mail->AddStringAttachment($doc, 'doc.pdf', 'base64', 'application/pdf');
$mail->Send();
1 голос
/ 06 мая 2011

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

1 голос
/ 06 мая 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...