简体   繁体   English

每页将2张图片插入pdf文件

[英]inserting 2 images into a pdf on each page

I have a PHP script which emails someone 2 images when they have completed a payment via paypal. 我有一个PHP脚本,当他们通过贝宝(Paypal)完成付款时,会通过电子邮件将2张图片发送给他人。 Now 1 of these images has text added to it via the imagettftext function. 现在这些图像中的1个通过imagettftext函数添加了文本。

Now what I am looking to do, is instead of email the 2 images, I want the 2 images to be added to a PDF file on their own pages, and then have that PDF file emailed to them. 现在,我要做的是,不是通过电子邮件发送2张图像,而是希望将2张图像添加到其各自页面上的PDF文件中,然后将该PDF文件通过电子邮件发送给他们。

Heres my code for the email which sends the images: 这是我发送图片的电子邮件的代码:

$sql = mysql_query("select * from `bookings` where `id`='$order_id'");

while ($row = mysql_fetch_assoc($sql))
{
    foreach ($row as $k => $v)
        $$k = $v;

    $img = imagecreatefrompng("ticket-blank.png");

    if (!empty($lead_home_phone)) $phone = "Home Phone: $lead_home_phone\n";
    else if (!empty($lead_work_phone)) $phone = "Work Phone: $lead_work_phone\n";
    else if (!empty($lead_mobile_phone)) $phone = "Mobile Phone: $lead_mobile_phone\n";

    $dets = "Full name: $lead_title $lead_name\n";
    $dets .= "Address 1: $lead_address_1\n";
    $dets .= "Postcode: $lead_postcode\n";
    $dets .= "City/Town: $lead_city\n";
    $dets .= "State/Province: $lead_state\n";
    $dets .= "Country: $lead_country\n";
    if (!empty($phone)) $dets .= "$phone\n";
    $dets .= "Email Address: $lead_email";

    imagettftext($img, 8, 0, 50, 115, imagecolorallocate($img, 0, 0, 0), 'arial.ttf', "BOOKING FOR ".date('F j, Y', $the_date)."\nORDER ID # $order_id");
    imagettftext($img, 8, 0, 270, 115, imagecolorallocate($img, 0, 0, 0), 'arial.ttf', "$num_adults ADULTS $num_children CHILDREN\n$ticket_type");
    imagettftext($img, 8, 0, 50, 165, imagecolorallocate($img, 0, 0, 0), 'arial.ttf', $dets);
    imagettftext($img, 8, 0, 415, 165, imagecolorallocate($img, 0, 0, 0), 'arial.ttf', "Total: CZK $pay_total");

    $img_name = time().'.png';

    imagepng($img, "tickets/$img_name");

    $files = array();
    $files []= "tickets/$img_name";
    $files []= "tickets/brochure.jpg";

    // email fields: to, from, subject, and so on
    $from = "info@mysite.com"; 
    $subject ="Your Ticket"; 

    $message = "Booking Complete!";

    $headers = "From: $from";

    // boundary 
    $semi_rand = md5(time()); 
    $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 

    // headers for attachment 
    $headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\""; 

    // multipart boundary 
    $message = "This is a multi-part message in MIME format.\n\n" . "--{$mime_boundary}\n" . "Content-Type: text/html; charset=\"iso-8859-1\"\n" . "Content-Transfer-Encoding: 7bit\n\n" . $message . "\n\n"; 
    $message .= "--{$mime_boundary}\n";

    // preparing attachments
    for ($x=0; $x < count($files); $x++)
    {
        $file = fopen($files[$x],"rb");
        $data = fread($file,filesize($files[$x]));
        fclose($file);
        $data = chunk_split(base64_encode($data));
        $message .= "Content-Type: {\"application/octet-stream\"};\n" . " name=\"$files[$x]\"\n" . 
        "Content-Disposition: attachment;\n" . " filename=\"$files[$x]\"\n" . 
        "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
        $message .= "--{$mime_boundary}\n";
    }

    // mail the emails with attachments
    mail('me@myemail.com', $subject, $message, $headers); 
}

How would I go about adding the 2 images into a PDF file, and then emailing that? 如何将2张图片添加到PDF文件中,然后通过电子邮件发送?

Take a look at a php pdf generation library like fpdf . 看看像fpdf这样的php pdf生成库。 I've used fpdf before and find it pretty easy and straight forward. 我以前使用过fpdf,发现它非常简单直接。 Here is an example of how to use it from their site: 这是一个如何在他们的网站上使用它的示例:

<?php
require('fpdf.php');

class PDF extends FPDF
{
// Page header
function Header()
{
    // Logo
    $this->Image('logo.png',10,6,30);
    // Arial bold 15
    $this->SetFont('Arial','B',15);
    // Move to the right
    $this->Cell(80);
    // Title
    $this->Cell(30,10,'Title',1,0,'C');
    // Line break
    $this->Ln(20);
}

// Page footer
function Footer()
{
    // Position at 1.5 cm from bottom
    $this->SetY(-15);
    // Arial italic 8
    $this->SetFont('Arial','I',8);
    // Page number
    $this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
}
}

// Instanciation of inherited class
$pdf = new PDF();
$pdf->AliasNbPages();
$pdf->AddPage();
$pdf->SetFont('Times','',12);
for($i=1;$i<=40;$i++)
    $pdf->Cell(0,10,'Printing line number '.$i,0,1);
$pdf->Output();
?>

As you can see you basically just create a pdf, add a page, and then add images, text, tables etc. to that page and then you can output the pdf. 如您所见,您基本上只需要创建一个pdf文件,添加一个页面,然后将图像,文本,表格等添加到该页面,然后您就可以输出pdf了。 In your case you would want to output it to some temp file, email that file, then probably delete that file to save room on your server (or delete them after some amount of days) 在您的情况下,您希望将其输出到一些临时文件,通过电子邮件发送该文件,然后删除该文件以节省服务器空间(或在几天后删除它们)。

Hopefully this helps! 希望这会有所帮助!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM