Laravel生成Word文档 - phpword

在项目实际开发或学习中,会遇到把数据导出生成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

效果图如下:

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

时间: 2024-10-12 14:42:20

Laravel生成Word文档 - phpword的相关文章

使用PHPWORD 生成word文档

昨日使用了PHPword生成WORD文档,折腾了半天,终于折腾出来了. 特此记录一下,分享给大家使用. 1.下载最新PHPWORD 类库 http://phpword.codeplex.com/ 2.解决中文乱码问题. a) 情况一 /Writer/Word2007/Base.php文件内容349行,添加 $objWriter->writeAttribute('w:eastAsia', $font); // 添加这行 Section.php中找到代码$givenText = utf8_encod

php使用phpword插件生成word文档

php使用phpword插件生成word文档php使用phpword插件生成word文档,有需要的朋友可以参考参考. <?php require_once '../libs/PHPWord/PHPWord.php'; require_once '../libs/PHPWord/PHPWord/IOFactory.php'; require_once '../../config.php'; // require_once '../common/conn.php'; // New Word Docu

用Aspose.Words for .NET动态生成word文档中的数据表格

1.概述 最近项目中有一个这样的需求:导出word 文档,要求这个文档的格式不是固定的,用户可以随便的调整,导出内容中的数据表格列是动态的,例如要求导出姓名和性别,你就要导出这两列的数据,而且这个文档不是导出来之后再调整而是导出来后已经是调整过了的.看到这里,您也许马上想到用模板导出!而且.NET中自带有这个组件:Microsoft.Office.Interop.Word,暂且可以满足需求吧.但这个组件也是有局限性的,例如客户端必须装 office组件,而且编码复杂度高.最麻烦的需求是后面那个-

C#简单实现动态数据生成Word文档并保存

今天正好有人问我,怎么生成一个报表式的Word文档. 就是文字的样式和位置相对固定不变,只是里面的内容从数据中读取. 我觉得类似这种的一般用第三方报表来做比较简便.但既然要求了Word,只好硬着头皮来. 网上的方法大多数都是从一个GridView或表中获得数据后向Word中添加一个表格. (图1) 我们使用Word模板来实现,方法如下: 1.首先需要向工程中的“引用”加入Word类库的引用(图2).我是Office 2003.其他版本可能略有不同.在COM里面 (图2) 2.用Word设计一个模

velocity模板技术生成word文档

本文介绍采用velocity技术在Java中生成word文档的方法. 1.新建一个word文档,编辑内容如下: 2.将上述word文档另存为htm格式的文件 3.新建一个Java Project项目velocityTest,加入Velocity所依赖的Jar包velocity-dep-1.5-beta2.jar. 4.在src目录下新建一个velocity.vm文件,将第二步生成的velocity.htm用文本编辑器打开,复制内容到velocity.vm中.内容如下: <html xmlns:v

ASP.NET生成WORD文档,服务器部署注意事项

网上转的,留查备用,我服务器装的office2007所以修改的是Microsoft Office word97 - 2003 文档这一个. ASP.NET生成WORD文档服务器部署注意事项 1.Asp.net 2.0在配置Microsoft Excel.Microsoft Word应用程序权限时 error: 80070005 和8000401a 的解决总   2007-11-01 11:30  检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-00000

POI加dom4j将数据库的数据按一定格式生成word文档

一:需求:将从数据库查处来的数据,生成word文档,并有固定的格式.(dom4j的jar包+poi的jar包) 二:解决:(1)先建立固定格式的word文档(2007版本以上),另存成为xml文件,作为模板.(修改xml节点,添加属性,用于标示要填固定数据的节点) (2)dom4j解析模板xml文件,将文件读入内存,并把数据库数据写入内存的xml模型中 (3)利用poi将内存中的含有数据库内容的xml模型转换成word内存模型,利用输出流输出word文档 三:DEMO [1]模板的word文档

C#生成word文档

最近两天研究了一下如何使用VS2008(C#语言)输出Word文档.以下是几点总结: 1.非常简单. 2.开发及运行环境要求.操作系统为:WindowsXP(安装.net framework2.0)/Vista/Win7:在操作系统必须安装Word2003完全安装版.这里必须要强调是Word2003完全安装版,因为软件开发及运行都需要一个com组件:Microsoft word 11.0 Object Library.如果不是Word2003完全安装版,可以下载这个com组件,并手动的安装这个c

freemarker+Jfreechart生成Word文档(含图片)

这几天再弄一个报表,要统计一些信息最终的部分展示结果如下: 基本工具freemarker,jfreechart 工程的部分结构如下 与生成Word有关的类主要有FreemarkerConfiguration和WordGenerator代码如下: import com.bqs.ares.common.utils.CommonUtils; import freemarker.template.Configuration; import java.io.File; import org.slf4j.L