码迷,mamicode.com
首页 > Web开发 > 详细

Laravel生成Word文档 - phpword

时间:2018-01-27 23:16:51      阅读:1007      评论:0      收藏:0      [点我收藏+]

标签:科学   link   run   分页符   read   writer   导出   table   解决   

在项目实际开发或学习中,会遇到把数据导出生成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 文档载入的目录写的是相对路径,写绝对路径 
时会报错,这个我没有解决,如有方法请留言

参考文档地址:http://phpword.readthedocs.io/en/latest/intro.html

效果图如下:

技术分享图片

技术分享图片

技术分享图片

技术分享图片

Laravel生成Word文档 - phpword

标签:科学   link   run   分页符   read   writer   导出   table   解决   

原文地址:https://www.cnblogs.com/duanyingkui/p/8367411.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!