本来想着当调包侠呢,结果翻了一遍文档,没有这种操作支持,阿这
不出意外的一顿胡扯,给气的要中风啦
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");