2013-02-26 122 views
0

我使用CakePHP 1.3和TCPDF使用print_pdf.ctp打印PDF文件。打印完成後,我無法將網頁重定向至引薦網站。控制器操作的註釋部分未被達到。我如何管理這個?CakePHP 1.3和TCPDF:如何在打印後返回到控制器PDF

請注意print_pdf()鏈接到一個按鈕。因此,用戶加載一個頁面,按下與「print_pdf」動作相關聯的「打印」按鈕,點擊該按鈕時打印PDF文件。我想重定向的原因是print_pdf操作更新了一些數據,並且需要刷新按鈕所在的頁面以反映此更新。

控制器:

// This action is linked to a button 
function print_pdf() { 
    ...  
    $this->layout = 'pdf'; //this will use the pdf.ctp layout 
    $this->render(); 

    // Line below are not executed 
    ... 
    $this->redirect($this->referer()); 
} 
+0

一旦你點擊渲染,它會加載頁面。在進入PDF之前,你可以做出這些改變嗎?或者可以打開一個新標籤頁/窗口,進行更改,然後關閉該標籤頁? – iexiak 2013-02-26 18:08:29

+0

如果我在渲染之前重定向頁面,它將不會打印PDF。我也嘗試過使用Javascript,我將一個頁面刷新分配給'print_pdf'按鈕,但這也不起作用,因爲頁面只是在執行'print_pdf'動作之前刷新。我必須在'print_pdf'視圖中重定向嗎? (這看起來不太合適) – musicliftsme 2013-02-26 18:39:48

+1

您可能必須通過使用JavaScript的AJAX調用來完成此操作;點擊按鈕;發送一個Ajax調用到服務器並更新數據庫,當Ajax調用返回'success'時,更新信息並打開PDF – thaJeztah 2013-02-26 19:46:01

回答

0

我仍然不能完全肯定我理解你想要做什麼。您正嘗試重定向到另一個頁面以保存一些信息,然後立即向該人員顯示PDF?

爲什麼不運行任何保存從PDF函數內部做:

// This action is linked to a button 
function print_pdf() { 
    ... 
    //$this->redirect($this->referer()); 
    //Put whatever you were going to redirect to before the render. Instead of redirecting just run the thing as part of this function. 
    ...  
    $this->layout = 'pdf'; //this will use the pdf.ctp layout 
    // Line below are not executed 
    $this->render();  
} 

$這個 - >渲染();應該逃離控制器並直接進入視圖。你不能把任何東西放在後面。如果您想用按鈕對頁面進行更改,則可以在渲染之前執行此操作。

+0

我基本上重定向到同一頁面刷新頁面以反映PDF已經被打印。如果在渲染之前重定向,則不會顯示PDF下載提示。我希望用戶能夠獲得「下載」窗口,以便他可以下載PDF文件。 – musicliftsme 2013-03-04 18:30:30