**
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('<', '>', '&'), $v['title'])."(".$v['laiyuan']." ".$time.")",$titleStyle,$noParagraphStyleFirst);
if (!empty($v['remark'])) $section->addText(str_replace(array('<', '>', '&'), array('<', '>', '&'),$v['remark']),$contentStyle,$paragraphStyleFirst);
if (!empty($v['url'])){
$textrun = $section->addTextRun($paragraphStyleFirst);
$textrun->addLink($v['url'],str_replace('&', '&',$v['url']),$linkStyle);
}
这样就可以了,亲测可以完美下载,然后有需要注意的地方就是替换那块,要把特殊符号替换一下,否则打开的时候会报Xml parsing error 位置:部分:/word.document.xml,
行:*,列:****,其实错误都一样,就是导出内容有特殊符号,记得替换一下就ok了!!
5
最后导出即可。
希望对大家有帮助~~