我正在使用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)来格式化我的数据。我可以在视图中执行代码然后返回到控制器/操作而不显示视图吗?
答案 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:
答案 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是你的观点。