PHPword 导出word设置不同样式

**

PHPword 导出word设置不同样式

**
1.先看需求样子:
在这里插入图片描述
2.先用composer下载phpword到你的项目中,如果不会可以到网上搜,教程很多;
3.
在这里插入图片描述
引入,然后设置下全局字体字号,当然也可以不设置;然后把每个地方的单独样式设置好,留着备用;
4在这里插入图片描述
循环输出要导出的内容,重点在“<w:br />”,这是一个换行符,一开始我直接用“/<br//>”,不好用,内容总是被覆盖,就以为addtext这个方法不能像这样并列使用,后来发现原来是导出到word时候,word不识别“/<br //>”这个换行符。

补充:使用“<w:br />”这个标签只是实现了样子上的分段实际设置的时候你会发现其实整个word还是一个段落,所以在这里补充下真正意义上的分段:

			$textrun->addText($i.". ".$v['title']."(".$v['laiyuan']." ".$time.")",$titleStyle);
            $textrun->addText("</w:t></w:r></w:p><w:p wsp:rsidR='004C3B63' wsp:rsidRDefault='004C3B63' wsp:rsidP='00302FB9'><w:pPr><w:keepNext w:val='0'/><w:keepLines w:val='0'/><w:pageBreakBefore w:val='0'/><w:widowControl/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val='0'/><w:autoSpaceDE/><w:autoSpaceDN/><w:bidi w:val='0'/><w:adjustRightInd/><w:snapToGrid/><w:spacing w:line='360' w:lineRule='auto'/><w:ind w:firstLine='560' w:firstLineChars='200'/><w:textAlignment w:val='auto'/><w:rPr><w:rFonts w:ascii='宋体' w:h-ansi='宋体'/><wx:font wx:val='宋体'/><w:sz w:val='24'/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii='宋体' w:h-ansi='宋体' w:hint='fareast'/><wx:font wx:val='宋体'/><w:sz w:val='24'/></w:rPr><w:t>");
            $textrun->addText($v['remark'],$contentStyle);
            $textrun->addText("</w:t></w:r></w:p><w:p wsp:rsidR='004C3B63' wsp:rsidRDefault='004C3B63' wsp:rsidP='00302FB9'><w:pPr><w:keepNext w:val='0'/><w:keepLines w:val='0'/><w:pageBreakBefore w:val='0'/><w:widowControl/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val='0'/><w:autoSpaceDE/><w:autoSpaceDN/><w:bidi w:val='0'/><w:adjustRightInd/><w:snapToGrid/><w:spacing w:line='360' w:lineRule='auto'/><w:ind w:firstLine='560' w:firstLineChars='200'/><w:textAlignment w:val='auto'/><w:rPr><w:rFonts w:ascii='宋体' w:h-ansi='宋体'/><wx:font wx:val='宋体'/><w:sz w:val='24'/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii='宋体' w:h-ansi='宋体' w:hint='fareast'/><wx:font wx:val='宋体'/><w:sz w:val='24'/></w:rPr><w:t>");
            $textrun->addLink($v['url'],$v['url'],$linkStyle);
            $textrun->addText("</w:t></w:r></w:p><w:p wsp:rsidR='004C3B63' wsp:rsidRDefault='004C3B63' wsp:rsidP='00302FB9'><w:pPr><w:keepNext w:val='0'/><w:keepLines w:val='0'/><w:pageBreakBefore w:val='0'/><w:widowControl/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val='0'/><w:autoSpaceDE/><w:autoSpaceDN/><w:bidi w:val='0'/><w:adjustRightInd/><w:snapToGrid/><w:spacing w:line='360' w:lineRule='auto'/><w:ind w:firstLine='0' w:firstLineChars='0'/><w:textAlignment w:val='auto'/><w:rPr><w:rFonts w:ascii='宋体' w:h-ansi='宋体'/><wx:font wx:val='宋体'/><w:sz w:val='24'/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii='宋体' w:h-ansi='宋体' w:hint='fareast'/><wx:font wx:val='宋体'/><w:sz w:val='24'/></w:rPr><w:t>");
就是这样手动写入xml格式的代码,如果你想再增加什么样式,就在已有的word上编辑好后转成xml格式的文件然后在用编辑器打开找到相应的代码放入就可以了
虽然这可能不是一个好方法,但是真的好用。。。emmmmm

再次补充:
果然经过试验,上面那个手动写入xml代码的方法不是一个好方法,所以又改进了一下

$section = $objPHPWord->addSection();
        //标题样式
        $titleStyle = [
            'size' => 14,
            'color' => '#000000',
            'bold' => true,
        ];
        //正文样式
        $contentStyle = [
            'size' => 12,
            'color' => '#000000',
        ];
        //链接样式
        $linkStyle = [
            'size' => 12,
            'color' => '#0000ff',
        ];
        //首行缩进段落
        $paragraphStyleFirst = 'pfirstStyle';
        $objPHPWord->addParagraphStyle($paragraphStyleFirst, array('indentation' => array('firstLine' => 460), 'lineHeight' => 1.0, 'spacing' => 120));
        //不缩进段落
        $noParagraphStyleFirst = 'pNofirstStyle';
        $objPHPWord->addParagraphStyle($noParagraphStyleFirst, array('lineHeight' => 1.0, 'spacing' => 120));
        foreach ($data as $k => $v){
            $i = $k + 1;
            $time = date('Y年m月d日',$v['fromtime']);
            if (!empty($v['title'])) $section->addText($i.". ".str_replace(array('<', '>', '&'), array('&lt;', '&gt;', '&amp;'), $v['title'])."(".$v['laiyuan']." ".$time.")",$titleStyle,$noParagraphStyleFirst);
            if (!empty($v['remark'])) $section->addText(str_replace(array('<', '>', '&'), array('&lt;', '&gt;', '&amp;'),$v['remark']),$contentStyle,$paragraphStyleFirst);
            if (!empty($v['url'])){
                $textrun = $section->addTextRun($paragraphStyleFirst);
                $textrun->addLink($v['url'],str_replace('&', '&amp;',$v['url']),$linkStyle);
            }

这样就可以了,亲测可以完美下载,然后有需要注意的地方就是替换那块,要把特殊符号替换一下,否则打开的时候会报Xml parsing error 位置:部分:/word.document.xml,
行:
*,列:****,其实错误都一样,就是导出内容有特殊符号,记得替换一下就ok了!!

5
在这里插入图片描述
最后导出即可。

希望对大家有帮助~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值