2011-03-31 170 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