2013-10-02 119 views
1

我正在使用TCPDF库在我的CakePHP应用程序中创建发票。如果我去/invoices/view/1我的view.ctp包含代码来在浏览器中生成和显示pdf。我想添加将PDF作为电子邮件附件发送的功能,因此我创建了动作/invoices/send_invoice,并将view.ctp中的代码复制到电子邮件模板中。CakePHP生成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 Helper(如Number helper)来格式化我的数据。我可以在视图中执行代码,然后返回控制器/操作而不显示视图吗?

回答

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 

然后只保存输出,或使用它,但无论你需要什么。

+0

谢谢!我可以用这行'$ email-> attachments(array('invoice - '。$ invoice_id。'。pdf'=> array('data'=> $ output)));' –

0

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

2

CakePHP的电子邮件与PDF附件和PDF生成与CakePDF插件

第一步:安装和设置CakePDF

步骤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正在生成:

Read More

+1

对于一个潜在的解决方案总是值得欢迎的,但请[在链接中添加上下文](http://meta.stackoverflow.com/a/8259/169503),以便您的同行用户可以了解它是什么以及它为什么在那里。如果目标网站无法访问或永久离线,请始终引用重要链接中最相关的部分。考虑到_barely不仅仅是一个链接到外部网站_是一个可能的原因[为什么和如何删除一些答案?](http://stackoverflow.com/help/deleted-answers)。 –

+1

@XaviLópez:感谢您的建议,以上更新 - 希望它能帮助更多! –

+0

不客气,谢谢你的贡献! –

相关问题