PHP导出word方法(一phpword)
短信预约 -IT技能 免费直播动态提醒
背景
上一篇,已经记录了使用MHT来生成并导出word文档的方法,这次,来记录一下使用php的扩展phpword来生成并导出word;
使用步骤
gitlab上composer phpword扩展
phpword样式使用文档
-
命令:composer require phpoffice/phpword
一、使用方法1(html文件生成word文档)
但是文档上示例使用并不完全,因为我要导出的word是个简历,有图片,有表格的,所以我想能不能跟MHT一样,先渲染一个html页面,然后导出,还真的有,哈哈哈哈
<?phpnamespace App\Services;use App\Models\Adresume;use PhpOffice\PhpWord\IOFactory;use PhpOffice\PhpWord\PhpWord;use PhpOffice\PhpWord\Shared\Html;use PhpOffice\PhpWord\TemplateProcessor;class WordService{ public function __construct(){ } public static function downResumeWord($medlive_id,$title='',$updated_at=''){ info('export'); list($oResume,$oIntension,$oWorkexp,$oEduexp,$oAttach) = Adresume::ViewResume($medlive_id); $oUser = Adresume::where('medlive_id',$medlive_id)->first(); $filename = $oUser->truename?$oUser->truename."的简历":"简历"; header('Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document'); header('Content-Disposition: attachment;filename="' . $filename . '.docx"'); header('Cache-Control: max-age=0'); $phpWord = new PhpWord(); $section = $phpWord->addSection(); $domain = config('app.url'); $html = view('pc.usercenter.resume_doc',compact('domain','oResume','oIntension','oWorkexp','oEduexp','oAttach','title','updated_at'))->render(); Html::addHtml($section, $html,false,false); $writer = IOFactory::createWriter($phpWord,'Word2007' ); $writer->save('php://output'); }}
这里是直接下载下来的,若是你需要保存到服务器的话,如下示例:
<?phpnamespace App\Services;use App\Models\Adresume;use PhpOffice\PhpWord\IOFactory;use PhpOffice\PhpWord\PhpWord;use PhpOffice\PhpWord\Shared\Html;use PhpOffice\PhpWord\TemplateProcessor;class WordService{ public function __construct(){ } public static function downResumeWord($medlive_id,$title='',$updated_at=''){ info('export'); list($oResume,$oIntension,$oWorkexp,$oEduexp,$oAttach) = Adresume::ViewResume($medlive_id); $oUser = Adresume::where('medlive_id',$medlive_id)->first(); $filename = $oUser->truename?$oUser->truename."的简历":"简历"; $phpWord = new PhpWord(); $section = $phpWord->addSection(); $domain = config('app.url'); $html = view('pc.usercenter.resume_doc',compact('domain','oResume','oIntension','oWorkexp','oEduexp','oAttach','title','updated_at'))->render(); Html::addHtml($section, $html,false,false); $writer = IOFactory::createWriter($phpWord,'Word2007' ); $writer->save($filename.'docx'); }}
二、使用方法2(使用word模板生成word文档)
不过,该方法并未尝试过,仅供参考哈,给大家找到了一篇细节描述的文章分享
前人栽树,后人乘凉1:word模板生成word文档
二、使用方法3(使用phpword属性,自己搭建样式)
<?phpnamespace App\Services;use App\Models\Adresume;use PhpOffice\PhpWord\IOFactory;use PhpOffice\PhpWord\PhpWord;use PhpOffice\PhpWord\Shared\Html;use PhpOffice\PhpWord\TemplateProcessor;//require_once 'bootstrap.php';//require './vender/autoload.php';class WordService{ public function __construct(){ } public static function downResumeWord($medlive_id,$title='',$updated_at=''){ info('export'); list($oResume,$oIntension,$oWorkexp,$oEduexp,$oAttach) = Adresume::ViewResume($medlive_id); $oUser = Adresume::where('medlive_id',$medlive_id)->first(); $filename = $oUser->truename?$oUser->truename."的简历":"简历"; $phpWord = new PhpWord(); $fontStyle2 = array('align'=>'center'); //整体样式 $section = $phpWord->addSection(); //整体页面 $phpWord->addTitleStyle(1, ['bold' => true, 'color' => '000', 'size' => 17, 'name' => '宋体'],$fontStyle2); //设置title样式 $time = date('Y-m-d',time()); $section->addText("应聘:$title 投递时间:$updated_at"); //添加文本 $styleTable = [ 'name' => '微软雅黑', 'borderSize' => 6, 'cellMargin' => 20, ]; //设置表格样式 $phpWord->addTableStyle('myTable', $styleTable); $table = $section->addTable('myTable'); //第一行 $table->addRow(500); $table->addCell(5000) ->addImage(public_path().$oResume->downthumb, ['gridSpan' => 4,'width'=>350, 'height'=>100, 'valign'=>'center', 'align'=>'center']); //第二行 $table->addRow(500); $table->addCell(5000) ->addText($oResume->truename,['size'=>24,'color'=>'1f6990'], ['gridSpan' => 4,'valign'=>'center', 'align'=>'center']); //第三行 $table->addRow(500); $table->addCell(5000) ->addText('>基本信息',['size'=>18,'color'=>'black','bold'=>true], ['gridSpan' => 4,'valign'=>'top', 'align'=>'left']); //第四行 $table->addRow(500); $table->addCell(5000) ->addImage(public_path().'/assets/images/ad/review_line.png', ['gridSpan' => 4,'width'=>540, 'valign'=>'top', 'align'=>'center']); $writer = IOFactory::createWriter($phpWord,'Word2007' ); $fileName = $filename.'.doc'; $writer->save( $fileName); //如果只是保存到服务器的话到这里就好了// $file = public_path().'/uploadfile/export/'.date('Ymd').'/' . $fileName;// return response()->download($file); //这里将文件下载下来 } }
导出结果如下:
看这,我就累啦,这才一点简历的头部,我就写了那么多代码了,心好累呀,还是直接渲染html页面来的舒服呀
来源地址:https://blog.csdn.net/snow_love_xia/article/details/125522397
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341