在 Linux 中使用 PHP 创建 Word 文档[关闭]

2024-10-09 09:10:00
admin
原创
209
摘要:问题描述:在 Linux 环境中使用 PHP 创建 Word 文档有哪些可用的解决方案?解决方案 1:PHPWord可以生成 docx 格式的 Word 文档。它还可以使用现有的 .docx 文件作为模板 - 可以以 ${varname} 格式将模板变量添加到文档中它具有 LGPL 许可证,并且代码附带的示例...

问题描述:

在 Linux 环境中使用 PHP 创建 Word 文档有哪些可用的解决方案?


解决方案 1:

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

它具有 LGPL 许可证,并且代码附带的示例对我来说非常好用。

解决方案 2:

真实的 Word 文档

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

伪造HTTP 标头,诱骗 Word 打开原始 HTML

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

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。PHP 发送该误导性Content-Type标头并不构成真正的文件格式转换。

解决方案 3:

OpenOffice 模板 + OOo 命令行界面。

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

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

  3. 将 ODT 压缩回来

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

有工具和库可用于简化每个步骤。

或许有帮助。

解决方案 4:

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

来自项目网站:

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

解决方案 5:

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

不需要临时文件,不需要命令行,全部使用 PHP。

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

它还可以合并开放文档文件(ODT、ODS、ODF……)

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

解决方案 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);
}

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

解决方案 7:

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

另一个选择是 OpenOffice,但我无法推荐它,因为我从未使用过它。

解决方案 8:

<?php
function fWriteFile($sFileName,$sFileContent="No Data",$ROOT)
    {
        $word = new COM("word.application") or die("Unable to instantiate Word");
        //bring it to front
        $word->Visible = 1;
        //open an empty document
        $word->Documents->Add();
        //do some weird stuff
        $word->Selection->TypeText($sFileContent);
        $word->Documents[1]->SaveAs($ROOT."/".$sFileName.".doc");
        //closing word
        $word->Quit();
        //free the object
        $word = null;
        return $sFileName;
    }
?>



<?php
$PATH_ROOT=dirname(__FILE__);
$Return ="<table>";
$Return .="<tr><td>Row[0]</td></tr>";
 $Return .="<tr><td>Row[1]</td></tr>";
$sReturn .="</table>";
fWriteFile("test",$Return,$PATH_ROOT);
?> 

解决方案 9:

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

解决方案 10:

查看 PHP COM 文档(注释很有帮助)https://www.php.net/com

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用