CakePHP 生成 pdf 然后作为电子邮件附件发送


CakePHP generate pdf then send as email attachment

我正在使用TCPDF库在我的CakePHP应用程序中创建发票。如果我去/invoices/view/1我的 view.ctp 包含用于在浏览器中生成和显示 pdf 的代码。我想添加将 pdf 作为电子邮件附件发送的功能,因此我创建了操作/invoices/send_invoice并将代码从 view.ctp 复制到电子邮件模板中。

现在我卡住了,我不知道如何在附加之前先生成 PDF。在我的视图.ctp页面模板的末尾,我使用。

$pdf->Output(APP . 'File/pdf_invoices' . DS . 'invoice-'.$invoice['Invoice']['id'].'.pdf', 'I');

这会将 PDF 发送到浏览器中查看,而无需创建文件。如果我使用"F"或"FI"作为 $pdf->Output(( 的最后一个参数,我可以保存文件,但不能保证用户在尝试将其作为电子邮件发送之前会查看发票。

在我的send_invoice操作中,我需要将pdf生成为文件,以便将其附加到:

$email->attachments(APP . 'File/pdf_invoices' . DS . 'invoice-'.$invoice['Invoice']['id'].'.pdf');

在我的电子邮件模板中拥有生成 PDF 文件的代码意味着当我尝试附加该文件时该文件尚不存在。有没有办法从电子邮件模板本身附加文件?我在想也许我可以在我的发票模型上编写一个函数来生成 pdf,但我想使用一些视图帮助程序(如数字帮助程序(来格式化我的数据。是否可以在视图中执行代码,然后在不显示视图的情况下返回到控制器/操作?

带有 PDF 附件的 Cakephp 电子邮件和使用 CakePDF 插件生成

步骤1:安装和设置蛋糕PDF

步骤 2:配置

第 3 步:应用控制器配置

App::uses('CakePdf', 'CakePdf.Pdf');
public $components = array("Email","RequestHandler");

第 4 步:CakePHP 的控制器代码

    // PDF Generation code
    $this->set('extraparams', $categories);
    $this->pdfConfig = array(
        'orientation' => 'portrait',
        'filename' => 'invoice_'. $orderID
    );
    $CakePdf = new CakePdf();
    $CakePdf->viewVars(array('extraparams' => $categories));
    $CakePdf->template('confirmpdf', 'default');
    //get the pdf string returned
    $pdf = $CakePdf->output();
    //or write it to file directly

    $pdf = $CakePdf->write(APP . 'webroot'. DS .'files' . DS . 'orders' . DS . 'order_'.$orderID.'.pdf');
    $pdf = APP . 'webroot'. DS .'files' . DS . 'orders' . DS . 'order_'.$orderID.'.pdf';
    // PDF Generation code
    return $pdf;

非常有用的链接,只需按照提到的步骤操作,您的 PDF 就会生成:

阅读更多

为此,

您可以创建一个视图对象,然后手动调用使其正确呈现所需的函数。

 $view = new View(null, false);
 $view->set(//set view data here like normal);
 $view->viewPath = 'pdf';  //folder to look in in Views directory
 $output = $view->render('pdf', 'pdf');  //layout name and view name

然后只需保存输出,或根据需要使用它。

另一种可能性,如果你可以使用wkhtmltopdf,是生成一个临时pdf文件,附加它并删除它。 wkhtmltopdf做的主要工作:它直接将html文件转换为pdf。html 是您的观点。