我正在使用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 是您的观点。