zoukankan      html  css  js  c++  java
  • Laravel生成Word文档

    在项目实际开发或学习中,会遇到把数据导出生成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 PhpOfficePhpWordPhpWord();
      2         //设置默认样式
      3         $phpWord->setDefaultFontName('仿宋');//字体
      4         $phpWord->setDefaultFontSize(16);//字号
      5 
      6         //添加页面
      7         $section = $phpWord->createSection();
      8 
      9         //添加目录
     10         $styleTOC  = ['tabLeader' => PhpOfficePhpWordStyleTOC::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' => PhpOfficePhpWordStyleFont::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 = PhpOfficePhpWordIOFactory::createWriter($phpWord, 'Word2007');
    101         $writer->save('./word/hello.docx');
    102 
    103         //将文档保存为ODT文件... 
    104         $writer = PhpOfficePhpWordIOFactory::createWriter($phpWord, 'ODText');
    105         $writer->save('./word/hello.odt');
    106 
    107         //将文档保存为HTML文件... 
    108         $writer = PhpOfficePhpWordIOFactory::createWriter($phpWord, 'HTML');
    109         $writer->save('./word/hello.html');

    注意: Word转HTML时,Word 文档载入的目录写的是相对路径,写绝对路径 
    时会报错,这个我没有解决,如有方法请留言

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

    效果图如下:

    这里写图片描述

    这里写图片描述

    这里写图片描述

    这里写图片描述

  • 相关阅读:
    hash
    DatabaseLibrary -数据库操作
    UnicodeEncodeError: 'ascii' codec can't encode characters in position 18-22: ordinal not in range(128)
    robotframework_酷我音乐_That Girl
    robotframework_百度登陆
    12306_车票预定_修改日期
    基础知识:索引和分片
    基础知识:字符串
    基础知识: 常用数据类型分类 及 数值
    c++拷贝构造函数
  • 原文地址:https://www.cnblogs.com/duanyingkui/p/8367411.html
Copyright © 2011-2022 走看看