chenhao
首页
栏目
标签
关于
友链
废话少说,放码过来
php利用phpword将指定内容导出为Word(doc、docx)
thinkphp
php
程序人生
发布日期: 2021-09-01 10:48:04
喜欢量: 74 个
阅读次数:
809
开发过程中,需要将指定文章或者表格导出到word,进行电子稿保存,这里写了一个简单的demo。
#### 环境配置 + 基础环境 + 系统环境:Windows10 x64 + PHP集成环境:[phpstudy](https://www.xp.cn "phpstudy") + PHP依赖管理工具:[Composer](https://getcomposer.org/Composer-Setup.exe "Composer") + 手册:[Thinkphp](https://www.kancloud.cn/manual/thinkphp5_1/353946 "Thinkphp手册") #### 安装ThinkPHP6.0和Phpword扩展 (1)安装ThinkPHP6.0 ``` composer create-project topthink/think phpword ``` (2)安装phpword插件 ``` composer require phpoffice/phpword ``` #### 内容导出word (1)内容导出生成word文档 ```php <?php namespace app\admin\service; use Ch\Tool; use PhpOffice\PhpWord\IOFactory; use PhpOffice\PhpWord\PhpWord; class WordService { public static function exportToword($text, $title = null, $save = false) { $phpWord = new PhpWord(); //实例化 //调整页面样式 $sectionStyle = array('orientation' => null, 'marginLeft' => 300, 'marginRight' => 300, 'marginTop' => 300, 'marginBottom' => 400); $section = $phpWord->addSection($sectionStyle); //添加页眉 /* $header=$section->addHeader(); $k=$header->addTextRun(); //页眉添加一张图片 $k->addImage(app()->getRootPath().'public'.DS."static/images/jrk.jpg",array( 'width' => '100%', 'height' => 60, 'marginTop' => -1, 'marginLeft' => 1, 'wrappingStyle' => 'behind', )); */ //添加页脚 $footer = $section->addFooter(); $f = $footer->addTextRun(); $f->addImage(app()->getRootPath() . 'public' . DS . "static/images/jrk.jpg", array( 'width' => 105, 'height' => 65, 'marginTop' => -1, 'marginLeft' => 1, 'wrappingStyle' => 'behind', )); $footer->addPreserveText('Page {PAGE} of {NUMPAGES}.', array('align' => 'center')); //添加标题 if (!empty($title)) { $section->addText( $title, array('name' => '黑体', 'size' => 15), array('align' => 'center') ); } //添加换行符 $section->addTextBreak(2); //添加文本 if (is_array($text)) { foreach ($text as $v) { $section->addText( $v, array('name' => 'Arial', 'size' => 13), array('lineHeight' => 1.5, 'indent' => 1) ); } } else { $section->addText( $text, array('name' => 'Arial', 'size' => 13), array('lineHeight' => 1.5, 'indent' => 1) ); } $fname = Tool::uniqidDateCode(); if ($save) { /*保存文档到本地*/ $objwrite = IOFactory::createWriter($phpWord); $t = date("Ymd", time()); //保存的路径和中文名称适应 $dir = iconv("UTF-8", "GBK", app()->getRootPath() . 'public' . DS . 'words' . DS . $t); if (!file_exists($dir)) { @mkdir($dir, 0777, true); } $pa = $t . "/" . $fname . ".docx"; $objwrite->save(app()->getRootPath() . 'public' . DS . 'phpoffices/words' . DS . $pa); return ['code' => 1, 'url' => '/phpoffices/words/' . $pa, 'domain' => request()->domain(true)]; } else { //不保存到服务器,直接输出浏览器下载 $name = $fname . ".docx"; //文件名称 $phpWord->save($name, "Word2007", true); } exit; } } ``` (2)内容生成 html 文件 ```php /** * @param $text * @param bool $save * @return array * @throws \PhpOffice\PhpWord\Exception\Exception */ public static function makeHtml($text, $save = false) { $phpWord = new PhpWord(); //实例化 $section = $phpWord->addSection(); $fontStyleName = 'oneUserDefinedStyle'; $phpWord->addFontStyle( $fontStyleName, array('name' => 'Tahoma', 'size' => 13, 'color' => '1B2232', 'bold' => true) ); if (is_array($text)) { foreach ($text as $v) { $section->addText( $v, $fontStyleName ); } } else { $section->addText( $text, $fontStyleName ); } $fname = Tool::uniqidDateCode(); if ($save) { $objwrite = IOFactory::createWriter($phpWord, 'HTML'); $t = date("Ymd", time()); //保存的路径和中文名称适应 $dir = iconv("UTF-8", "GBK", app()->getRootPath() . 'public' . DS . 'phpoffices/htmls' . DS . $t); if (!file_exists($dir)) { @mkdir($dir, 0777, true); } $pa = $t . "/" . $fname . ".html"; $objwrite->save(app()->getRootPath() . 'public' . DS . 'phpoffices/htmls' . DS . $pa); return ['code' => 1, 'url' => '/phpoffices/htmls/' . $pa, 'domain' => request()->domain(true)]; } else { $name = $fname . ".html"; //文件名称 $phpWord->save($name, "HTML", true); } exit; } ```
文章作者:
chenhao
文章链接:
http://chenhaoblog.com/show/NQ==
版权声明:
本博客所有文章除特別声明外,转载请注明来源
chenhaoBlog
!
分享: