我被要求编写一个php脚本,该脚本应该读取/解析docx文件,并执行一些操作,例如复制特定的段落/表,并用值填充一些变量(#myvar或$ myvar)。 您有什么建议,直接使用word / document.xml文件或将整个文档转换为HTML文件,然后使用DOM解析它(我不喜欢这个解决方案:()? 要解析的docx的结构尚未定义,这是我的工作!它必须尽可能通用。
为了清楚地知道我在做什么,docx文件是一个CV模型,我必须用DB中的数据填充。 P.S:我不知道如何使用Xquery有效地解析/修改XML文件,因为我唯一的解决方案是在docx中使用变量(带有$或#..的纯文本) 谢谢你的帮助:))
答案 0 :(得分:3)
有两个主要的PHP库可以创建Word文档。以下是两者的功能说明,可以帮助您解决问题:
答案 1 :(得分:0)
这是一个老问题,但我想我已经提出了一些建议,因为我一直在努力解决这个问题,并最终在github: wrklst/docxmustache编写了我自己的软件包。
以下是我所知道的一些解决方案:
免费解决方案:
部分免费和付费:
我使用opentbs相当多,但我对此并不满意,我目前正在考虑编写自己的解决方案,以满足我的特定需求。一般来说你需要: - 用于解压缩/重新压缩docx文件的zip文件 - 替换值的模板引擎,我使用小胡子(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);
}
如果您想在上下文中看到这一点,请查看我的package wrklst/docxmustache。
祝你好运!