0

我被要求编写一个 php 脚本,该脚本应该读取/解析 docx 文件并执行一些操作,例如复制特定的段落/表格并用值填充一些变量(#myvar 或 $myvar)。你们有什么建议,直接使用 word/document.xml 文件或将整个文档转换为 HTML 文件,然后使用 DOM 解析它(我不喜欢这个解决方案:()?要解析的 docx 的结构是尚未定义,这是我的工作!它必须尽可能通用。

为了清楚地了解我在做什么,docx 文件是一个 CV 模型,我必须用 DB 中的数据填充它。PS:我不知道如何使用 Xquery 有效地解析/修改 XML 文件,因为我唯一的解决方案是在该 docx 中使用变量(带有 $ 或 #.. 的纯文本)感谢您的帮助 :)

4

2 回答 2

3

有 2 个主要的 PHP 库能够创建 Word 文档。以下是两者的功能描述,它们可能会帮助您解决问题:

  1. PHPWord (opensource) - 允许加载模板文档和替换值...看看这个库源代码中的例子,也许你可以定义一个简历模板并用它来解决问题;
  2. PHPDocX(基本功能免费,更高级功能付费)- 允许模板以及搜索和替换文档中的内容(可能仅在付费版本中)。
于 2013-04-25T23:01:19.957 回答
1

这是一个老问题,但我想我给出一些指示,因为我已经为此苦苦挣扎了一段时间,最终在github 上编写了我自己的包:wrklst/docxmustache

以下是我知道的一些解决方案:

免费解决方案:

部分免费和付费:

我与 opentbs 合作了很多,但我对它不满意,我目前正在尝试评估以编写更适合我特定需求的自己的解决方案。通常您需要: - 用于解压缩/重新压缩 docx 文件的 zip 类 - 用于替换值的模板引擎,我正在使用 mustache ( https://github.com/bobthecow/mustache.php ) - 如果您打算替换图像您还需要更高级的文件、参考和 xml 处理。Php 的 SimpleXMLElement 应该足以处理所有的 xml 操作。

当然,您始终可以将 docx 转换为更易于访问的格式,但这会极大地影响任何样式。如果那不是问题,我建议使用 libreoffice 将您的 docx 转换为 libreoffice 支持的任何格式。在基于 linux 的服务器上,您可以通过命令行轻松访问它,这里有一个使用 symfony 执行命令的示例:

$command = "soffice --headless --convert-to html ".$inputfile.' --outdir '.$outputfile.'/');
            $process = new \Symfony\Component\Process\Process($command);
            $process->start();
            while ($process->isRunning()) {}
            // executes after the command finishes
            if (!$process->isSuccessful()) {
                throw new \Symfony\Component\Process\Exception\ProcessFailedException($process);
            }

如果您想在上下文中查看此内容,请查看我的包 wrklst/docxmustache 。

祝你好运!

于 2017-04-28T08:37:22.987 回答