2012-03-12 74 views
1

我的网站是使用AJAX调用服务器端PHP的HTML/Javascript。我想让用户点击一个图标并从MySQL数据创建一个报告,然后将其保存在客户端桌面而不是进行页面重新加载。在用户桌面上动态创建doc/docx文档

创建文档的选项,我可以收集它,看起来如下所示。 (我收集它需要完成服务器端,而不是使用Javascript。)我不知道在每种情况下文件的结尾。请随时纠正我的误解:)

方法1 - 这只出现创建一个.doc文件。我不确定文件的放置位置。

$fp = fopen("method1.doc", 'w+'); 
$str = "<B>This is the text for the word file created through php programming</B>"; 
fwrite($fp, $str); 
fclose($fp); 

方法2 - 这也似乎创建一个.doc文件。

$word = new COM("word.application") or die ("couldnt create an instance of word"); 
echo "loaded , word version{$word->version}"; 
$word->visible = 1; 
$word->Documents->Add(); 
$word->Selection->TypeText("Sample text."); 
$word->Documents[1]->SaveAs("method2.doc"); 
$word->Quit(); 
$word->Release(); 
$word = null; 

方法3 - 也是一个.doc文件,我想。

header('Content-type: application/vnd.ms-word'); 
header("Content-Disposition: attachment;Filename=method3.doc"); 

echo "<html>"; 
echo "<body>"; 
echo "<b>My first document</b>"; 
echo "</body>"; 
echo "</html>"; 

方法4 - PHPWord

方法5 - PHPDocx

我测试过1 & 2在我家的开发环境,但我无法找到文件!请问最好的方法是什么?

谢谢:)

顺便说一句,我知道有相关的帖子hereherehere,但没有真正回答了这个问题。

+0

在您的第一次和第二次尝试中,文件被保存在服务器上,而不是发送到客户端。如果你需要客户端来保存文件,你应该输出生成的内容并设置适当的响应头文件,就像你在第三个例子中那样(尽管这不会产生一个“正确”的Word文档)。 – 2012-03-12 07:14:20

回答

1

方法1 & 2在服务器端文件系统中的某处创建文档(之后,您需要将其传输到客户端)。

方法3创建文档作为对客户端请求的响应 - 取决于设置,浏览器将保存它或在窗口中打开(或询问“保存/打开/取消?”)。

我个人会制作java applet或flash应用程序,它可以访问你的本地文件系统。它可以从服务器加载文件并保存到本地文件系统,无需重新加载页面。

2

如果你想有一个图标,并且点击图标时它会下载没有页面重新加载,那么你只需要链接到一个图标,该图标带来一个脚本,使用适当的头文件开始下载。

例子:

header ('Pragma: no-cache'); 
header('Content-Disposition: attachment; filename="'.$File.'"'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
header('Cache-Control: public'); 
header('Content-Description: File Transfer'); 
header('Content-Transfer-Encoding: binary'); 
header('Content-Length: '.$Len); 

这样做,下载将开始,但如果用户点击该页面将不会改变,也不重新加载。

如果要生成要下载的动态DOCX文件,我推荐使用OpenTBS。该库可以使用模板生成DOCX(以及XLSX,PPTX,ODT,ODS ...)。它有一个功能,可以让您直接下载结果,无需临时文件,或让您保存在服务器端。