当前位置:  开发笔记 > 编程语言 > 正文

在Linux中使用PHP创建Word文档

如何解决《在Linux中使用PHP创建Word文档》经验,为你挑选了6个好方法。

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



1> Sergey Korni..:

真正的Word文档

如果您需要生成"真正的"Word文档,则需要基于Windows的Web服务器和COM自动化.我强烈推荐Joel关于这个主题的文章.

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

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

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

echo "";
echo "";
echo "";
echo "Fake word document";
echo "";
echo ""

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

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


如果您需要生成"真正的"Word文档,则需要基于Windows的Web服务器.我强烈推荐Joel关于这个主题的文章:http://www.joelonsoftware.com/items/2008/02/19.html

2> Highly Irreg..:

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

它有一个LGPL许可证,代码附带的示例很适合我.


这就是答案:)同一个地方有用于生成Excel和PowerPoint文档的库.
同意 - 这是正确的答案.
我在GitHub中找到了[PHPWord](https://github.com/PHPOffice/PHPWord)和[PHPOffice](https://github.com/PHPOffice)的更新链接。

3> Ivan Krechet..:

OpenOffice模板+ OOo命令行界面.

    手动创建带有占位符的ODT模板,例如[%value-to-replace%]

    在PHP中使用真实数据实例化模板时,解压缩模板ODT(它是压缩的XML),并针对XML运行占位符的文本替换和实际值.

    拉回ODT

    通过OpenOffice命令行界面运行转换ODT - > DOC.

有一些工具和库可用于简化每个步骤.

可能有帮助.



4> 小智..:

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

从项目网站:

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


似乎需要注册第三方服务以进行API访问,从而解决繁重的问题.

5> Skrol29..:

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

PHP中没有临时文件,没有命令行.

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

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

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



6> Matiaan..:

继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);
}

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

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有