在项目实际开发或学习中,会遇到把数据导出生成word文档的需求。这里就用优雅、流行的laravel框架,来简单的教大家实现。
phpword,它可以很方便的实现word文档的生成,同时可以在word中添加表格、目录、图片、超链接、页眉、页脚等功能强大。
安装phpWord
要求
强制性:
PHP 5.3.3+
XML解析器扩展
Zend \ Escaper组件
Zend \ Stdlib组件
Zend \ Validator组件
可选的:
-邮编扩展
- GD扩展
- XMLWriter扩展
- XSL扩展
- dompdf库
PHPWord通过Composer安装。你只需要在你的包中添加对PHPWord的依赖。
{
“require” : {
“phpoffice / phpword” : “v0.14。*??”
}
}
添加后执行
composer install
另外,还可以通过命令行安装,如
composer require phpoffice/phpword
示例代码
1 $phpWord = new\PhpOffice\PhpWord\PhpWord();2 //设置默认样式
3 $phpWord->setDefaultFontName(‘仿宋‘);//字体
4 $phpWord->setDefaultFontSize(16);//字号5
6 //添加页面
7 $section = $phpWord->createSection();8
9 //添加目录
10 $styleTOC = [‘tabLeader‘ => \PhpOffice\PhpWord\Style\TOC::TABLEADER_DOT];11 $styleFont = [‘spaceAfter‘ => 60, ‘name‘ => ‘Tahoma‘, ‘size‘ => 12];12 $section->addTOC($styleFont, $styleTOC);13
14 //默认样式
15 $section->addText(‘Hello PHP!‘);16 $section->addTextBreak();//换行符17
18 //指定的样式
19 $section->addText(20 ‘Hello world!‘,
21 [22 ‘name‘ => ‘宋体‘,
23 ‘size‘ => 16,
24 ‘bold‘ => true,
25 ]26 );27 $section->addTextBreak(5);//多个换行符28
29 //自定义样式
30 $myStyle = ‘myStyle‘;31 $phpWord->addFontStyle(32 $myStyle,
33 [34 ‘name‘ => ‘Verdana‘,
35 ‘size‘ => 12,
36 ‘color‘ => ‘1BFF32‘,
37 ‘bold‘ => true,
38 ‘spaceAfter‘ => 20,
39 ]40 );41 $section->addText(‘Hello Laravel!‘, $myStyle);42 $section->addText(‘Hello Vue.js!‘, $myStyle);43 $section->addPageBreak();//分页符44
45 //添加文本资源
46 $textrun = $section->createTextRun();47 $textrun->addText(‘加粗‘, [‘bold‘ => true]);48 $section->addTextBreak();//换行符
49 $textrun->addText(‘倾斜‘, [‘italic‘ => true]);50 $section->addTextBreak();//换行符
51 $textrun->addText(‘字体颜色‘, [‘color‘ => ‘AACC00‘]);52
53 //超链接
54 $linkStyle = [‘color‘ => ‘0000FF‘, ‘underline‘ => \PhpOffice\PhpWord\Style\Font::UNDERLINE_SINGLE];55 $phpWord->addLinkStyle(‘myLinkStyle‘, $linkStyle);56 $section->addLink(‘http://www.baidu.com‘, ‘百度一下‘, ‘myLinkStyle‘);57 $section->addLink(‘http://www.baidu.com‘, null, ‘myLinkStyle‘);58
59 //添加图片
60 $imageStyle = [‘width‘ => 480, ‘height‘ => 640, ‘align‘ => ‘center‘];61 $section->addImage(‘./img/t1.jpg‘, $imageStyle);62 $section->addImage(‘./img/t2.jpg‘,$imageStyle);63
64 //添加标题
65 $phpWord->addTitleStyle(1, [‘bold‘ => true, ‘color‘ => ‘1BFF32‘, ‘size‘ => 38, ‘name‘ => ‘Verdana‘]);66 $section->addTitle(‘标题1‘, 1);67 $section->addTitle(‘标题2‘, 1);68 $section->addTitle(‘标题3‘, 1);69
70 //添加表格
71 $styleTable =[72 ‘borderColor‘ => ‘006699‘,
73 ‘borderSize‘ => 6,
74 ‘cellMargin‘ => 50,
75 ];76 $styleFirstRow = [‘bgColor‘ => ‘66BBFF‘];//第一行样式
77 $phpWord->addTableStyle(‘myTable‘, $styleTable, $styleFirstRow);78
79 $table = $section->addTable(‘myTable‘);80 $table->addRow(400);//行高400
81 $table->addCell(2000)->addText(‘学号‘);82 $table->addCell(2000)->addText(‘姓名‘);83 $table->addCell(2000)->addText(‘专业‘);84 $table->addRow(400);//行高400
85 $table->addCell(2000)->addText(‘2015123‘);86 $table->addCell(2000)->addText(‘小明‘);87 $table->addCell(2000)->addText(‘计算机科学与技术‘);88 $table->addRow(400);//行高400
89 $table->addCell(2000)->addText(‘2016789‘);90 $table->addCell(2000)->addText(‘小傻‘);91 $table->addCell(2000)->addText(‘教育学技术‘);92
93 //页眉与页脚
94 $header = $section->createHeader();95 $footer = $section->createFooter();96 $header->addPreserveText(‘页眉‘);97 $footer->addPreserveText(‘页脚 - 页数 {PAGE} - {NUMPAGES}.‘);98
99 //生成的文档为Word2007
100 $writer = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, ‘Word2007‘);101 $writer->save(‘./word/hello.docx‘);102
103 //将文档保存为ODT文件...
104 $writer = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, ‘ODText‘);105 $writer->save(‘./word/hello.odt‘);106
107 //将文档保存为HTML文件...
108 $writer = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, ‘HTML‘);109 $writer->save(‘./word/hello.html‘);
注意: Word转HTML时,Word 文档载入的目录写的是相对路径,写绝对路径
时会报错,这个我没有解决,如有方法请留言
效果图如下: