在Linux中使用PHP创建Word文档

时间:2008-09-24 01:52:26

标签: php linux ms-word document

PHP的可用解决方案是什么?在linux环境中创建word文档?

10 个答案:

答案 0 :(得分:33)

真正的Word文档

如果您需要生成“真正的”Word文档,则需要基于Windows的Web服务器和COM自动化。我强烈推荐Joel's article来讨论这个问题。

用于欺骗Word以打开原始HTML的HTTP标头

一个相当常见(但不可靠)的替代方案是:

header("Content-type: application/vnd.ms-word");
header("Content-Disposition: attachment; filename=document_name.doc");

echo "<html>";
echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=Windows-1252\">";
echo "<body>";
echo "<b>Fake word document</b>";
echo "</body>";
echo "</html>"

确保不使用外部样式表。一切都应该在同一个文件中。

请注意,会发送实际的Word文档。它只是欺骗浏览器提供下载和默认为.doc文件扩展名。较早版本的Word可能经常打开它而没有任何警告/安全消息,只需将原始HTML导入Word。发送带有误导性Content-Type标题的PHP并不构成真正的文件格式转换。

答案 1 :(得分:28)

PHPWord可以生成docx格式的Word文档。它还可以使用现有的.docx文件作为模板 - 模板变量可以以$ {varname}格式添加到文档中

它有一个LGPL许可证,代码附带的示例对我来说效果很好。

答案 2 :(得分:20)

OpenOffice模板+ OOo命令行界面。

  1. 使用占位符手动创建ODT模板,例如[%value-to-replace%]
  2. 在PHP中使用真实数据实例化模板时,解压缩模板ODT(它是压缩的XML),并针对XML运行占位符的文本替换和实际值。
  3. 将ODT拉回
  4. 运行转换ODT - &gt; DOC通过OpenOffice命令行界面。
  5. 可以使用工具和库来简化每个步骤。

    可能会有所帮助。

答案 3 :(得分:10)

到目前为止,使用PHP在Linux上创建DOC文件的最简单方法是使用Zend Framework组件 phpLiveDocx

从项目网站:

“phpLiveDocx允许开发人员通过将来自PHP的结构化数据与在文字处理器中创建的模板相结合来生成文档。生成的文档可以保存为PDF,DOCX,DOC或RTF文件。这个概念与邮件合并。“

答案 4 :(得分:7)

OpenTBS可以使用模板技术在PHP中创建DOCX动态文档。

不需要临时文件,没有命令行,全部都是PHP。

可以添加或删除图片。创建的文档可以作为HTML下载,保存在服务器上的文件或PHP中的二进制内容生成。

它还可以合并OpenDocument文件(ODT,ODS,ODF,...)

http://www.tinybutstrong.com/opentbs.php

答案 5 :(得分:6)

根据Ivan Krechetov的回答,这里有一个函数可以为docx和odt进行邮件合并(实际上只是简单的文本替换),而不需要额外的库。

function mailMerge($templateFile, $newFile, $row)
{
  if (!copy($templateFile, $newFile))  // make a duplicate so we dont overwrite the template
    return false; // could not duplicate template
  $zip = new ZipArchive();
  if ($zip->open($newFile, ZIPARCHIVE::CHECKCONS) !== TRUE)
    return false; // probably not a docx file
  $file = substr($templateFile, -4) == '.odt' ? 'content.xml' : 'word/document.xml';
  $data = $zip->getFromName($file);
  foreach ($row as $key => $value)
    $data = str_replace($key, $value, $data);
  $zip->deleteName($file);
  $zip->addFromString($file, $data);
  $zip->close();
  return true;
}

这将取代 [人名]和Mina 和[人姓]与Mooo:

$replacements = array('[Person Name]' => 'Mina', '[Person Last Name]' => 'Mooo');
$newFile = tempnam_sfx(sys_get_temp_dir(), '.dat');
$templateName = 'personinfo.docx';
if (mailMerge($templateName, $newFile, $replacements))
{
  header('Content-type: application/msword');
  header('Content-Disposition: attachment; filename=' . $templateName);
  header('Accept-Ranges: bytes');
  header('Content-Length: '. filesize($file));
  readfile($newFile);
  unlink($newFile);
}

请注意,如果要替换的字符串过于笼统,此函数可能会损坏文档。尝试使用[人名]等详细替换字符串。

答案 6 :(得分:3)

Apache项目有一个名为POI的库,可用于生成MS Office文件。它是一个Java库,但优点是它可以在Linux上运行而没有任何问题。这个库有它的局限性,但是它可以为你完成这项工作,而且它可能比试图运行Word更简单。

另一种选择是OpenOffice,但由于我从未使用过它,所以我无法推荐它。

答案 7 :(得分:3)

答案 8 :(得分:0)

有2个选项可用于创建高质量的单词文档。使用COM与word进行通信(这至少需要一个Windows php服务器)。使用openoffice及其API以word格式创建和保存文档。

答案 9 :(得分:0)

查看PHP COM文档(评论很有帮助)http://us3.php.net/com