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>(.*)<\/w:body>.*/ ', '$1 ', $innerXml);// remove tag containing header, footer, images
$innerXml = preg_replace('/<w:sectPr>.*<\/w:sectPr>/ ', ' ', $innerXml);// 把取出来的内容放进</w:body> 结束符之前
$mainXml = $mainTemplateProcessor->tempDocumentMainPart;
$mainXml = preg_replace('/<\/w:body>/', '<w:p><w:r><w:br w:type = "page" /><w:lastRenderedPageBreak/></w:r></w:p>' . $innerXml . ' </w:body> ', $mainXml);
$mainTemplateProcessor->tempDocumentMainPart = $mainXml;
$mainTemplateProcessor->saveAs($folder . "1.docx");