【问题标题】:Dynamic creation of a doc/docx document on the users desktop在用户桌面上动态创建 doc/docx 文档
【发布时间】:2012-03-12 06:19:46
【问题描述】:

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

据我所知,用于创建文档的选项如下所示。 (我认为它需要在服务器端完成,而不是使用 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,但没有一个真正回答这个问题。

【问题讨论】:

  • 在您的第一次和第二次尝试中,文件被保存在服务器上,而不是发送到客户端。如果您需要客户端保存文件,您应该输出生成的内容并设置正确的响应标头,就像在您的第三个示例中一样(尽管这不会完全生成“正确的”Word 文档)。

标签: php javascript desktop docx doc


【解决方案1】:

如果您想要一个图标,并且当单击该图标时,它会在不重新加载页面的情况下进行下载,那么您只需创建一个指向该图标的链接,该链接将使用适当的标题开始下载脚本。

例子:

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,...)。它有一个功能,可以让你直接将结果作为下载发送,没有临时文件,或者让你保存在服务器端。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-01
      • 1970-01-01
      • 2017-10-24
      相关资源
      最近更新 更多