2013-10-02 151 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

不客氣,謝謝你的貢獻! –

相關問題