php解决word合并问题

目前碰见一个问题 需要把多个word进行合并,但是呢在合并过程中发现换行的问题出现,因为合并是基于word的xml来的
所以分析xml的问题

思路如下:
将多个xml读取到一个数组里面截取body部分,然后替换中间多余的段落行为空,组合成一个大的body,然后追加到第一个word里面

组件用的是tbszip 网上自己下载

合并10个word代码如下:

public function gettests()
    {
        include_once(APPPATH.'/libraries/tips/tbszip.php');

        $zip = new clsTbsZip();
        $path=APPPATH.'data/words/';
        $filelist=scandir($path);



         foreach($filelist as $ks=>$vs) {
            if ($vs=='.' || $vs=='..' || $vs=='.DS_Store' || $vs=='0.docx') {
                continue;
            }
            $zip->Open($path.$vs);
            $content1 = $zip->FileRead('word/document.xml');
            $zip->Close();

           
            $p = strpos($content1, '<w:body');
            if ($p===false) exit("失败");
            $p = strpos($content1, '>', $p);
            $content1 = substr($content1, $p+1);
            $p = strpos($content1, '</w:body>');
            if ($p===false) exit("失败");
            $content1 = substr($content1, 0, $p);
            $strs='<w:p><w:pPr><w:rPr><w:sz w:val="21"/><w:szCs w:val="21"/></w:rPr></w:pPr></w:p><w:p/><w:p/><w:p/><w:p/><w:p/><w:p/><w:p/><w:p/><w:p><w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/></w:rPr></w:pPr></w:p><w:p/><w:p/><w:p/><w:p/><w:p/><w:p><w:r><mc:AlternateContent>';
            $oldstrs='<w:p><w:pPr><w:rPr><w:sz w:val="21"/><w:szCs w:val="21"/></w:rPr></w:pPr></w:p><w:p/><w:p/><w:p/><w:p/><w:p/><w:p/><w:p/><w:p/><w:p><w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/></w:rPr></w:pPr></w:p><w:p/><w:p/><w:p/><w:p><w:r><mc:AlternateContent>';
            $content1=str_replace($strs,$oldstrs,$content1);
            $contents[]=$content1;
            
        }


       
           

            $zip->Open($path."/0.docx");
            $content2 = $zip->FileRead('word/document.xml');
           
       
            $p = strpos($content2, '</w:body>');
            if ($p===false) exit("失败");
            $content2 = substr_replace($content2, implode('',$contents), $p, 0);
            $zip->FileReplace('word/document.xml', $content2, TBSZIP_STRING);
            
            $zip->Flush(TBSZIP_FILE, APPPATH.'data/merges/merges.docx');

        
    }
posted @ 2021-12-13 15:42  尘梦  阅读(662)  评论(0编辑  收藏  举报