2011-05-06 240 views
5

我正在查看用户输入一些信息到表单中的能力,并通过mail()发送。创建PDF并通过电子邮件发送

我想要的是将详细信息作为PDF附件发送。可能与发件人的姓名和日期/时间有关。 test_user_06052011.pdf

我有一个PDF的设计,但我不知道如何将此设计集成在PHP中创建一个PDf。

有没有人有我可以做到这一点的例子或方式?

+2

http://stackoverflow.com/questions/2132015/best-way-to的可能的复制-create-a-pdf-with-php – 2011-05-06 08:23:29

+1

欢迎来到SO,sipher_z!请停止在问题标题中撰写标签。你已经完成了11个问题中的大部分。 >。< – 2011-05-06 08:28:48

+0

@Tomalak Geret'kal对标题中的标签表示歉意。我会确保我今后不会这样做 – 2011-05-06 08:32:51

回答

1

看一看到FPDF - http://www.fpdf.org/ - 它是免费的,并产生一个伟大的工具PDF的

有是由PHP recomended一个PDF生成,但它会非常昂贵,但名字现在elludes我,我几次使用过FPDF,并取得了巨大的成功。

4

创建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); 
1

根据您的要求,你也可以看看TCPDF,我用了很多对从PHP动态创建PDF文件...这^ h作为(有限)HTML内置的PDF功能,并且非常易于使用(只需查看示例)。还有一个主要的好处:它仍然处于积极的发展阶段(对于某些人来说可能过于活跃:p)。

+0

TCPDF为我做了这份工作 - 谢谢! – 2017-09-12 02:09:14

3

如果您使用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天以上试图找出一个非常类似的问题!

1

今天找不到原生mail()功能的原因。在大多数微不足道的情况下,我们可以使用PHPMailer库,使用OOP风格,即使不理解标题,我们也有机会发送电子邮件。 不保存物理文件该解决方案甚至

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

下面是一个完整的代码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'; 
    }