Prestashop 1.6 - 创建 pdf (tcpdf) 并将其作为电子邮件附件发送

Prestashop 1.6 - create pdf (tcpdf) and send it as email attachment

使用 Prestashop 1.6

我有以下生成PDF的代码

<?php
//============================================================+
// File name   : example_001.php
// Begin       : 2008-03-04
// Last Update : 2013-05-14
//
// Description : Example 001 for TCPDF class
//               Default Header and Footer
//
// Author: Nicola Asuni
//
// (c) Copyright:
//               Nicola Asuni
//               Tecnick.com LTD
//               www.tecnick.com
//               info@tecnick.com
//============================================================+

/**
 * Creates an example PDF TEST document using TCPDF
 * @package com.tecnick.tcpdf
 * @abstract TCPDF - Example: Default Header and Footer
 * @author Nicola Asuni
 * @since 2008-03-04
 */

 require_once(dirname(__FILE__).'/../config/config.inc.php');
 require_once(dirname(__FILE__).'/../init.php');


// Include the main TCPDF library (search for installation path).
// require_once('tcpdf_include.php');
require_once(dirname(__FILE__).'/../tools/tcpdf/config/tcpdf_config.php');
require_once(dirname(__FILE__).'/../tools/tcpdf/tcpdf.php');


// create new PDF document
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);

// set document information
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('Nicola Asuni');
$pdf->SetTitle('TCPDF Example 027');
$pdf->SetSubject('TCPDF Tutorial');
$pdf->SetKeywords('TCPDF, PDF, example, test, guide');

// set default header data
// $pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 027', PDF_HEADER_STRING);

// set header and footer fonts
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));

// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);

// set margins
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);

// set auto page breaks
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

// set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);

// set some language-dependent strings (optional)
if (@file_exists(dirname(__FILE__).'/lang/eng.php')) {
    require_once(dirname(__FILE__).'/lang/eng.php');
    $pdf->setLanguageArray($l);
}

// ---------------------------------------------------------

// set a barcode on the page footer
$pdf->setBarcode(date('Y-m-d H:i:s'));

// set font
$pdf->SetFont('helvetica', '', 11);

// add a page
$pdf->AddPage();

// print a message
$txt = "You can also export 1D barcodes in other formats (PNG, SVG, HTML). Check the examples inside the barcodes directory.\n";
$pdf->MultiCell(70, 50, $txt, 0, 'J', false, 1, 125, 30, true, 0, false, true, 0, 'T', false);
$pdf->SetY(30);

// -----------------------------------------------------------------------------

$pdf->SetFont('helvetica', '', 10);

// define barcode style
$style = array(
    'position' => '',
    'align' => 'C',
    'stretch' => false,
    'fitwidth' => true,
    'cellfitalign' => '',
    'border' => true,
    'hpadding' => 'auto',
    'vpadding' => 'auto',
    'fgcolor' => array(0,0,0),
    'bgcolor' => false, //array(255,255,255),
    'text' => true,
    'font' => 'helvetica',
    'fontsize' => 8,
    'stretchtext' => 4
);

// PRINT VARIOUS 1D BARCODES

// CODE 39 - ANSI MH10.8M-1983 - USD-3 - 3 of 9.
$pdf->Cell(0, 0, 'CODE 39 - ANSI MH10.8M-1983 - USD-3 - 3 of 9', 0, 1);
$pdf->write1DBarcode('CODE 39', 'C39', '', '', '', 18, 0.4, $style, 'N');

// ---------------------------------------------------------

//Close and output PDF document
$pdf->Output('example_027.pdf', 'I');

我有以下发送电子邮件的代码:

require_once(dirname(__FILE__).'/../config/config.inc.php');
require_once(dirname(__FILE__).'/../init.php');

include_once(_PS_SWIFT_DIR_.'Swift.php');
include_once(_PS_SWIFT_DIR_.'Swift/Connection/SMTP.php');
include_once(_PS_SWIFT_DIR_.'Swift/Connection/NativeMail.php');
include_once(_PS_SWIFT_DIR_.'Swift/Plugin/Decorator.php');

$id_shop = 1;

if (!$id_shop) {
    $id_shop = Context::getContext()->shop->id;
}

$configuration = Configuration::getMultiple(array(
    'PS_SHOP_EMAIL',
    'PS_MAIL_METHOD',
    'PS_MAIL_SERVER',
    'PS_MAIL_USER',
    'PS_MAIL_PASSWD',
    'PS_SHOP_NAME',
    'PS_MAIL_SMTP_ENCRYPTION',
    'PS_MAIL_SMTP_PORT',
    'PS_MAIL_TYPE'
), null, null, $id_shop);

$from = $configuration['PS_SHOP_EMAIL'];
$from_name = '';
$connection = new Swift_Connection_SMTP(
    $configuration['PS_MAIL_SERVER'],
    $configuration['PS_MAIL_SMTP_PORT'],
    $configuration['PS_MAIL_SMTP_ENCRYPTION'] == 'ssl' ? Swift_Connection_SMTP::ENC_SSL : (($configuration['PS_MAIL_SMTP_ENCRYPTION'] == 'tls' ? Swift_Connection_SMTP::ENC_TLS : Swift_Connection_SMTP::ENC_OFF))
);
$connection->setTimeout(4);

if (!$connection) {
    echo false;die;
}
if (!empty($configuration['PS_MAIL_USER'])) {
    $connection->setUsername($configuration['PS_MAIL_USER']);
}
if (!empty($configuration['PS_MAIL_PASSWD'])) {
    $connection->setPassword($configuration['PS_MAIL_PASSWD']);
}

$swift = new Swift($connection, Configuration::get('PS_MAIL_DOMAIN', null, null, $id_shop));

$subject = '['.Configuration::get('PS_SHOP_NAME', null, null, $id_shop).'] Tracking barcode';
$message = new Swift_Message($subject);

$message->setCharset('utf-8');

$message->headers->setEncoding('Q');

$to_list = new Swift_RecipientList();

$to_list->addTo('tst@gmail.com', 'tst');
$send = $swift->send($message, $to_list, new Swift_Address($from, $from_name));
$swift->disconnect();

现在我尝试创建一个生成 PDF 并将其作为电子邮件附件发送的脚本:

/**
 * Creates an example PDF TEST document using TCPDF
 * @package com.tecnick.tcpdf
 * @abstract TCPDF - Example: Default Header and Footer
 * @author Nicola Asuni
 * @since 2008-03-04
 */

 require_once(dirname(__FILE__).'/../config/config.inc.php');
 require_once(dirname(__FILE__).'/../init.php');


// Include the main TCPDF library (search for installation path).
// require_once('tcpdf_include.php');
require_once(dirname(__FILE__).'/../tools/tcpdf/config/tcpdf_config.php');
require_once(dirname(__FILE__).'/../tools/tcpdf/tcpdf.php');


// create new PDF document
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);

// set document information
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('Nicola Asuni');
$pdf->SetTitle('TCPDF Example 027');
$pdf->SetSubject('TCPDF Tutorial');
$pdf->SetKeywords('TCPDF, PDF, example, test, guide');

// set default header data
// $pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 027', PDF_HEADER_STRING);

// set header and footer fonts
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));

// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);

// set margins
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);

// set auto page breaks
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

// set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);

// set some language-dependent strings (optional)
if (@file_exists(dirname(__FILE__).'/lang/eng.php')) {
    require_once(dirname(__FILE__).'/lang/eng.php');
    $pdf->setLanguageArray($l);
}

// ---------------------------------------------------------

// set a barcode on the page footer
$pdf->setBarcode(date('Y-m-d H:i:s'));

// set font
$pdf->SetFont('helvetica', '', 11);

// add a page
$pdf->AddPage();

// print a message
$txt = "You can also export 1D barcodes in other formats (PNG, SVG, HTML). Check the examples inside the barcodes directory.\n";
$pdf->MultiCell(70, 50, $txt, 0, 'J', false, 1, 125, 30, true, 0, false, true, 0, 'T', false);
$pdf->SetY(30);

// -----------------------------------------------------------------------------

$pdf->SetFont('helvetica', '', 10);

// define barcode style
$style = array(
    'position' => '',
    'align' => 'C',
    'stretch' => false,
    'fitwidth' => true,
    'cellfitalign' => '',
    'border' => true,
    'hpadding' => 'auto',
    'vpadding' => 'auto',
    'fgcolor' => array(0,0,0),
    'bgcolor' => false, //array(255,255,255),
    'text' => true,
    'font' => 'helvetica',
    'fontsize' => 8,
    'stretchtext' => 4
);

// PRINT VARIOUS 1D BARCODES

// CODE 39 - ANSI MH10.8M-1983 - USD-3 - 3 of 9.
$pdf->Cell(0, 0, 'CODE 39 - ANSI MH10.8M-1983 - USD-3 - 3 of 9', 0, 1);
$pdf->write1DBarcode('CODE 39', 'C39', '', '', '', 18, 0.4, $style, 'N');

// ---------------------------------------------------------

//Close and output PDF document
// $pdf->Output('example_027.pdf', 'I');

$fileatt  = $pdf->Output('tracking_barcode_.pdf', 'E');

// var_dump($doc);die;

$data = chunk_split($fileatt);



include_once(_PS_SWIFT_DIR_.'Swift.php');
include_once(_PS_SWIFT_DIR_.'Swift/Connection/SMTP.php');
include_once(_PS_SWIFT_DIR_.'Swift/Connection/NativeMail.php');
include_once(_PS_SWIFT_DIR_.'Swift/Plugin/Decorator.php');

$id_shop = 1;

if (!$id_shop) {
    $id_shop = Context::getContext()->shop->id;
}

$configuration = Configuration::getMultiple(array(
    'PS_SHOP_EMAIL',
    'PS_MAIL_METHOD',
    'PS_MAIL_SERVER',
    'PS_MAIL_USER',
    'PS_MAIL_PASSWD',
    'PS_SHOP_NAME',
    'PS_MAIL_SMTP_ENCRYPTION',
    'PS_MAIL_SMTP_PORT',
    'PS_MAIL_TYPE'
), null, null, $id_shop);

$from = $configuration['PS_SHOP_EMAIL'];
$from_name = '';
$connection = new Swift_Connection_SMTP(
    $configuration['PS_MAIL_SERVER'],
    $configuration['PS_MAIL_SMTP_PORT'],
    $configuration['PS_MAIL_SMTP_ENCRYPTION'] == 'ssl' ? Swift_Connection_SMTP::ENC_SSL : (($configuration['PS_MAIL_SMTP_ENCRYPTION'] == 'tls' ? Swift_Connection_SMTP::ENC_TLS : Swift_Connection_SMTP::ENC_OFF))
);
$connection->setTimeout(4);

if (!$connection) {
    echo false;die;
}
if (!empty($configuration['PS_MAIL_USER'])) {
    $connection->setUsername($configuration['PS_MAIL_USER']);
}
if (!empty($configuration['PS_MAIL_PASSWD'])) {
    $connection->setPassword($configuration['PS_MAIL_PASSWD']);
}

$swift = new Swift($connection, Configuration::get('PS_MAIL_DOMAIN', null, null, $id_shop));

$subject = '['.Configuration::get('PS_SHOP_NAME', null, null, $id_shop).'] Tracking barcode';
$message = new Swift_Message($subject);

$message->setCharset('utf-8');


$message->attach(new Swift_Message_Attachment($data, 'tst.pdf'));

        $to_list = new Swift_RecipientList();

        $to_list->addTo('tst@gmail.com', 'tst');
$send = $swift->send($message, $to_list, new Swift_Address($from, $from_name));
$swift->disconnect();

sending an email attachment using TCPDF

电子邮件已与附件一起发送,但我无法使用 pdf 查看器打开文件。

这是工作代码:

<?php
//============================================================+
// File name   : example_001.php
// Begin       : 2008-03-04
// Last Update : 2013-05-14
//
// Description : Example 001 for TCPDF class
//               Default Header and Footer
//
// Author: Nicola Asuni
//
// (c) Copyright:
//               Nicola Asuni
//               Tecnick.com LTD
//               www.tecnick.com
//               info@tecnick.com
//============================================================+

/**
 * Creates an example PDF TEST document using TCPDF
 * @package com.tecnick.tcpdf
 * @abstract TCPDF - Example: Default Header and Footer
 * @author Nicola Asuni
 * @since 2008-03-04
 */

 require_once(dirname(__FILE__).'/../config/config.inc.php');
 require_once(dirname(__FILE__).'/../init.php');


// Include the main TCPDF library (search for installation path).
// require_once('tcpdf_include.php');
require_once(dirname(__FILE__).'/../tools/tcpdf/config/tcpdf_config.php');
require_once(dirname(__FILE__).'/../tools/tcpdf/tcpdf.php');


// create new PDF document
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);

// set document information
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('Nicola Asuni');
$pdf->SetTitle('TCPDF Example 027');
$pdf->SetSubject('TCPDF Tutorial');
$pdf->SetKeywords('TCPDF, PDF, example, test, guide');

// set default header data
// $pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 027', PDF_HEADER_STRING);

// set header and footer fonts
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));

// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);

// set margins
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);

// set auto page breaks
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

// set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);

// set some language-dependent strings (optional)
if (@file_exists(dirname(__FILE__).'/lang/eng.php')) {
    require_once(dirname(__FILE__).'/lang/eng.php');
    $pdf->setLanguageArray($l);
}

// ---------------------------------------------------------

// set a barcode on the page footer
$pdf->setBarcode(date('Y-m-d H:i:s'));

// set font
$pdf->SetFont('helvetica', '', 11);

// add a page
$pdf->AddPage();

// print a message
$txt = "You can also export 1D barcodes in other formats (PNG, SVG, HTML). Check the examples inside the barcodes directory.\n";
$pdf->MultiCell(70, 50, $txt, 0, 'J', false, 1, 125, 30, true, 0, false, true, 0, 'T', false);
$pdf->SetY(30);

// -----------------------------------------------------------------------------

$pdf->SetFont('helvetica', '', 10);

// define barcode style
$style = array(
    'position' => '',
    'align' => 'C',
    'stretch' => false,
    'fitwidth' => true,
    'cellfitalign' => '',
    'border' => true,
    'hpadding' => 'auto',
    'vpadding' => 'auto',
    'fgcolor' => array(0,0,0),
    'bgcolor' => false, //array(255,255,255),
    'text' => true,
    'font' => 'helvetica',
    'fontsize' => 8,
    'stretchtext' => 4
);

// PRINT VARIOUS 1D BARCODES

// CODE 39 - ANSI MH10.8M-1983 - USD-3 - 3 of 9.
$pdf->Cell(0, 0, 'CODE 39 - ANSI MH10.8M-1983 - USD-3 - 3 of 9', 0, 1);
$pdf->write1DBarcode('CODE 39', 'C39', '', '', '', 18, 0.4, $style, 'N');

// ---------------------------------------------------------

$filename = "tracking_barcode.pdf";
$file_attachement['content'] =$pdf->Output($filename, 'S');
$file_attachement['name'] = 'tst1.pdf';
$file_attachement['mime'] = 'application/pdf';
//Close and output PDF document
// $pdf->Output('example_027.pdf', 'I');

// $data  = $pdf->Output('tracking_barcode_.pdf', 'E');


// $fileatt = $pdf->Output($filename, 'F');

// $data = chunk_split( base64_encode(file_get_contents($filename)) );

// var_dump($doc);die;

// $data = chunk_split($data);



include_once(_PS_SWIFT_DIR_.'Swift.php');
include_once(_PS_SWIFT_DIR_.'Swift/Connection/SMTP.php');
include_once(_PS_SWIFT_DIR_.'Swift/Connection/NativeMail.php');
include_once(_PS_SWIFT_DIR_.'Swift/Plugin/Decorator.php');

$id_shop = 1;

if (!$id_shop) {
    $id_shop = Context::getContext()->shop->id;
}

$configuration = Configuration::getMultiple(array(
    'PS_SHOP_EMAIL',
    'PS_MAIL_METHOD',
    'PS_MAIL_SERVER',
    'PS_MAIL_USER',
    'PS_MAIL_PASSWD',
    'PS_SHOP_NAME',
    'PS_MAIL_SMTP_ENCRYPTION',
    'PS_MAIL_SMTP_PORT',
    'PS_MAIL_TYPE'
), null, null, $id_shop);

$from = $configuration['PS_SHOP_EMAIL'];
$from_name = '';
$connection = new Swift_Connection_SMTP(
    $configuration['PS_MAIL_SERVER'],
    $configuration['PS_MAIL_SMTP_PORT'],
    $configuration['PS_MAIL_SMTP_ENCRYPTION'] == 'ssl' ? Swift_Connection_SMTP::ENC_SSL : (($configuration['PS_MAIL_SMTP_ENCRYPTION'] == 'tls' ? Swift_Connection_SMTP::ENC_TLS : Swift_Connection_SMTP::ENC_OFF))
);
$connection->setTimeout(4);

if (!$connection) {
    echo false;die;
}
if (!empty($configuration['PS_MAIL_USER'])) {
    $connection->setUsername($configuration['PS_MAIL_USER']);
}
if (!empty($configuration['PS_MAIL_PASSWD'])) {
    $connection->setPassword($configuration['PS_MAIL_PASSWD']);
}

$swift = new Swift($connection, Configuration::get('PS_MAIL_DOMAIN', null, null, $id_shop));

$subject = '['.Configuration::get('PS_SHOP_NAME', null, null, $id_shop).'] Tracking barcode';
$message = new Swift_Message($subject);

$message->setCharset('utf-8');


$message->attach(new Swift_Message_Attachment(
    $file_attachement['content'],
    $file_attachement['name'],
    $file_attachement['mime']
    ));

$to_list = new Swift_RecipientList();

$to_list->addTo('ttt@gmail.com', 'ttt');
$send = $swift->send($message, $to_list, new Swift_Address($from, $from_name));
$swift->disconnect();

您也可以尝试使用下面的代码

$html = 'HTML_CONTENT_FOR_PDF';

$dompdf = new DOMPDF();
$html = utf8_decode($html);
$dompdf->load_html($html);
$dompdf->render();
file_put_contents(FILE_PATH_WITH_NAME, $dompdf->output());

And use the following code to attach it to an email:

$attachment = array(
  'content' => Tools::file_get_contents($file_path),
  'name' => FILE_NAME_FOR_ATTACHMENT,
  'mime' => 'application/pdf'
);

Mail::Send($id_lang,
    TEMPLATE_NAME,
    SUBJECT_TEXT, $template_vars, $customer->email,
    $customer->firstname.' '.$customer->lastname,
    Configuration::get('PS_SHOP_EMAIL'),
    Configuration::get('PS_SHOP_NAME'), $attachment, null
    )
);