Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用PHP解析/编辑docx文件_Php_Xml_Xpath_Xquery - Fatal编程技术网

用PHP解析/编辑docx文件

用PHP解析/编辑docx文件,php,xml,xpath,xquery,Php,Xml,Xpath,Xquery,我被要求编写一个php脚本,该脚本应该读取/解析一个docx文件,并执行一些操作,例如复制一个特定的段落/表格,并用值填充一些变量(#myvar或$myvar)。 你们推荐什么,直接使用word/document.xml文件,或者将整个文档转换成HTML文件,然后使用DOM解析它(我不喜欢这个解决方案:()? 要解析的docx的结构尚未定义,这是我的工作!它必须尽可能通用 为了清楚地了解我在做什么,docx文件是一个CV模型,我必须用数据库中的数据填充它。 附言:我不知道如何使用Xquery高效

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

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

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

  • (开源)-允许加载模板文档和替换值。。。看看这个,也许你可以定义一个CV模板,并用它来解决问题
  • (免费提供基本功能,付费购买更高级的功能)-允许模板、搜索和替换文档中的内容(但可能仅限于付费版本)

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

  • (开源)-允许加载模板文档和替换值。。。看看这个,也许你可以定义一个CV模板,并用它来解决问题
  • (免费提供基本功能,付费购买更高级的功能)-允许模板、搜索和替换文档中的内容(但可能仅限于付费版本)

  • 这是一个古老的问题,但我想我给出了一些建议,因为我已经为此奋斗了一段时间,最终在上个月写了我自己的包

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

    免费解决方案:

    • (如上所述,笨重且能力不强)
    • (工作正常,但非常麻烦,如果您计划允许用户提供模板,还将引入许多安全问题)
    部分免费和付费:

    • (对我来说,这似乎是一个更完整的解决方案,服务器许可证价格为199欧元,也不太贵)
    我曾与opentbs合作过很多次,但我对它并不满意,我目前正在尝试编写更适合我的特定需求的自己的解决方案。一般来说,您需要: -解压/重新解压docx文件的zip cals -一个用来替换值的模板引擎,我使用的是mustache() -如果您还打算替换图像,则需要更高级的文件、引用和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);
                }
    
    如果你想在上下文中看到这一点,请查看我的


    祝你好运

    这是一个古老的问题,但我想我给出了一些建议,因为我已经为此奋斗了一段时间,最终还是在写了自己的软件包

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

    免费解决方案:

    • (如上所述,笨重且能力不强)
    • (工作正常,但非常麻烦,如果您计划允许用户提供模板,还将引入许多安全问题)
    部分免费和付费:

    • (对我来说,这似乎是一个更完整的解决方案,服务器许可证价格为199欧元,也不太贵)
    我曾与opentbs合作过很多次,但我对它并不满意,我目前正在尝试编写更适合我的特定需求的自己的解决方案。一般来说,您需要: -解压/重新解压docx文件的zip cals -一个用来替换值的模板引擎,我使用的是mustache() -如果您还打算替换图像,则需要更高级的文件、引用和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);
                }
    
    如果你想在上下文中看到这一点,请查看我的


    祝你好运

    你看过PHPWord了吗?直接替换xml中的变量,然后提供修改过的docx供下载?但是我可以用xquery提取节点并用它做一些处理吗?复制、删除等。?我曾经尝试过使用与PHP捆绑在一起的简单DOM API,但我得到了一个损坏的docx文件,MS Word无法读取:(@Mark Baker:使用PHPWord,您从头创建了一个docx,我想处理现有的docx文件Maerlyn:是的,但不仅如此,我还想处理Word/document.xml节点(复制、粘贴、删除)感谢大家的回复除了xpath,PHP中不支持xquery。DOMDocument有替换节点、克隆节点和删除子节点。因此,dom操作所需的一切。但是,如果您修改了文件,我们将无法为您提供任何帮助。不要修改:)-如果您添加更多代码并提供一些数据-使用更多上下文可能会有更多帮助。1)我已经用php尝试了DOMDocument,问题是如果我修改word/document.xml的初始节点结构,结果文件会损坏并损坏