PHPWord 实现合并多个word文件

PHPWord

本来想着当调包侠呢,结果翻了一遍文档,没有这种操作支持,阿这

GPT

不出意外的一顿胡扯,给‍气的要中风啦

思路

word 也就是docx结尾的文件本质上就是xml字符串,
两个word文件合并其实就是把两个字符串拼接起来,你真是小天才呢‍

具体步骤

原地址 【能打开的直接抄就完啦】

打不开的也别急,我给你搬运一份奥

首先要拓展一下官方的类,为啥涅?里面的属性咱拿不到

class OpenTemplateProcessor extends \PhpOffice\PhpWord\TemplateProcessor {
    public function __construct($instance) {
        return parent::__construct($instance);
    }
    public function __get($key) {
        return $this->$key;
    }
    public function __set($key, $val) {
        return $this->$key = $val;
    }
}

然后就可以愉快的拼接xml字符串啦,有一些xml的固定格式需要注意

$mainTemplateProcessor = new \common\helpers\OpenTemplateProcessor($filename);

$innerTemplateProcessor = new \common\helpers\OpenTemplateProcessor($filename);
            
// 拓展类就是为了拿到他的xml
$innerXml = $innerTemplateProcessor->tempDocumentMainPart;
$innerXml = preg_replace('/^[\s\S]*(.*)<\/w:body>.*/ ', '$1 ', $innerXml);

// remove tag containing header, footer, images
$innerXml = preg_replace('/.*<\/w:sectPr>/ ', ' ', $innerXml);

// 把取出来的内容放进 结束符之前
$mainXml = $mainTemplateProcessor->tempDocumentMainPart;
$mainXml = preg_replace('/<\/w:body>/', '' . $innerXml . '  ', $mainXml);
$mainTemplateProcessor->tempDocumentMainPart = $mainXml;
$mainTemplateProcessor->saveAs($folder . "1.docx");

你可能感兴趣的:(word)