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

时间:2013-10-02 18:10:39

标签: php email cakephp pdf cakephp-2.4

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

现在我被卡住了,我不知道如何在附加PDF之前先生成PDF。 在我的view.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文件的代码意味着当我尝试附加文件时该文件尚不存在。有没有办法从电子邮件模板本身附加文件?我想也许我可以在我的Invoice模型上编写一个函数来生成pdf,但我想使用一些View Helpers(比如Number helper)来格式化我的数据。我可以在视图中执行代码然后返回到控制器/操作而不显示视图吗?

3 个答案:

答案 0 :(得分:2)

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

步骤1:安装和设置CakePDF

第2步:配置

第3步:App Controller配置

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:

Read More

答案 1 :(得分:0)

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

 $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

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

答案 2 :(得分:0)

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