创建PDF并通过电子邮件发送
我正在查看用户输入一些信息到表单中的能力,并通过mail()
发送。创建PDF并通过电子邮件发送
我想要的是将详细信息作为PDF附件发送。可能与发件人的姓名和日期/时间有关。 test_user_06052011.pdf
我有一个PDF的设计,但我不知道如何将此设计集成在PHP中创建一个PDf。
有没有人有我可以做到这一点的例子或方式?
看一看到FPDF - http://www.fpdf.org/ - 它是免费的,并产生一个伟大的工具PDF的
有是由PHP recomended一个PDF生成,但它会非常昂贵,但名字现在elludes我,我几次使用过FPDF,并取得了巨大的成功。
创建PDF服务器站点的非常简单的方法是使用wkhtmltopdf。但是,您需要通过shell访问服务器才能进行设置。
要创建PDF,您需要两个文件:一个是生成要转换为PDF的HTML的PHP。比方说,这是invoice.php:
<?php
$id = (int) $_GET['id'];
?>
<h1>This is invoice <?= $id ?></h1>
<p>some content...</p>
而另外一个,这将获取发票和使用wkhtmltopdf它转换成PDF:
<?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 = "[email protected]";
$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 <[email protected]>
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);
根据您的要求,你也可以看看TCPDF,我用了很多对从PHP动态创建PDF文件...这^ h作为(有限)HTML内置的PDF功能,并且非常易于使用(只需查看示例)。还有一个主要的好处:它仍然处于积极的发展阶段(对于某些人来说可能过于活跃:p)。
TCPDF为我做了这份工作 - 谢谢! – 2017-09-12 02:09:14
如果您使用Acrobat制作了Fillable PDF,以下是一大段帮助您入门的代码。这段代码需要最新版本的phpmailer才能正常工作,所以只需下载它并将其放入同一目录中的类文件夹中,然后将此代码提交到包含此代码的页面。
/* 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 = "[email protected]"; // GMAIL username
$mail->Password = "xxxxxxxx"; // GMAIL password
$mail->AddAddress('[email protected]', 'First Last');
$mail->SetFrom('[email protected]', '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天以上试图找出一个非常类似的问题!
今天找不到原生mail()
功能的原因。在大多数微不足道的情况下,我们可以使用PHPMailer库,使用OOP风格,即使不理解标题,我们也有机会发送电子邮件。 不保存物理文件该解决方案甚至是
$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';
}
http://stackoverflow.com/questions/2132015/best-way-to的可能的复制-create-a-pdf-with-php – 2011-05-06 08:23:29
欢迎来到SO,sipher_z!请停止在问题标题中撰写标签。你已经完成了11个问题中的大部分。 >。 2011-05-06 08:28:48
@Tomalak Geret'kal对标题中的标签表示歉意。我会确保我今后不会这样做 – 2011-05-06 08:32:51