2011-03-31 218 views
5

我正在使用Yii Framework,TCPDF和jQuery來生成pdf。如何使用AJAX(jQuery)從TCPDF(PHP)生成PDF文件?

pdf是通過輸入表單並使用ajax提交生成的。

pdf已創建,但在返回給客戶端時出現問題,不下載。

這裏是PHP代碼 $pdf->Output('Folder Label.pdf','D');

jQuery的成功函數 success: function(data) { window.open(data); }

這是我從這個網站獲得。

能否請你幫

+0

什麼是 「下來不下載。」意思? – 2011-03-31 17:19:33

回答

1

您需要保存的PDF到某個服務器上,然後從你的JavaScript發出window.location = '/url/to/pdf-you-just-saved.pdf';。用戶瀏覽器會提示他們下載PDF文件。

+1

Downvote解釋? – Treffynnon 2011-03-31 19:04:30

0

不完全,這會導致某些瀏覽器出錯,this是設置窗口位置的正確方法。

window.location.assign(downloadUrlToPdf); 

所以

  1. 發送的請求通過Ajax使PDF服務器
  2. 進程和服務器上生成PDF
  3. 返回Ajax調用的URL文件您剛製作
  4. 使用上述代碼片段打開所述文件的下載
+0

請參閱https://developer.mozilla.org/en/DOM/window.location具體而言,「newLocation是位置對象或**字符串**,指定要導航到的URL」。列出有'window.location ='';'問題的瀏覽器。 – Treffynnon 2011-03-31 19:06:14

+0

@Treffynnon - 簡單:Internet Explorer。 http://stackoverflow.com/questions/1939332/window-location-problem – 2011-03-31 21:43:02

+0

我從來沒有在IE7 +這個問題。然而,我很久沒有支持IE6,我的客戶和他們的用戶也不支持。http://ie6countdown.com/ – Treffynnon 2011-03-31 21:46:55

3

如果問題是,你沒有得到瀏覽器的下載對話框的PDF,那麼解決的辦法是做這種方式:

首先,重定向瀏覽器(使用window.location爲其他的答案說)導航到在你的應用程序中的一個特殊的控制器動作,與此URL:http://your.application.com/download/pdf/filename.pdf

實現在URL中引用這樣的動作:

public function actionPdf() { 
    header('Content-Type: application/pdf'); 
    header('Content-Disposition: attachment; filename="filename.pdf";'); 
    header('Content-Length: '.filesize('path/to/pdf')); 
    readfile('path/to/pdf'); 
    Yii::app()->end(); 
} 

這將導致瀏覽器下載文件。

0

在TCPDF,只是通過這個參數的輸出方式:

$pdf->Output('yourfilename.pdf', 'D'); 

這一切

+1

OP指定AJAX。 AJAX通常用於在不重新加載頁面的情況下引入內容 - 換句話說,可能已經輸出了內容。當你嘗試輸出已經輸出的內容時,TCPDF將會(正如我剛纔所見的那樣)產生一個錯誤:'TCPDF錯誤:一些數據已經輸出,不能發送PDF文件' – Tyler 2017-08-24 18:39:00

相關問題