当前位置:网站首页>PHP导出word方法(一phpword)
PHP导出word方法(一phpword)
2022-07-03 11:08:00 【ignativs amor】
背景
上一篇,已经记录了使用MHT来生成并导出word文档的方法,这次,来记录一下使用php的扩展phpword来生成并导出word;
使用步骤
gitlab上composer phpword扩展
phpword样式使用文档
命令:composer require phpoffice/phpword
一、使用方法1(html文件生成word文档)
但是文档上示例使用并不完全,因为我要导出的word是个简历,有图片,有表格的,所以我想能不能跟MHT一样,先渲染一个html页面,然后导出,还真的有,哈哈哈哈
<?php
namespace 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');
}
}
这里是直接下载下来的,若是你需要保存到服务器的话,如下示例:
<?php
namespace 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属性,自己搭建样式)
<?php
namespace 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页面来的舒服呀
边栏推荐
- STL Tutorial 9 deep copy and shallow copy of container elements
- mysql使用update联表更新的方法
- Xml的(DTD,xml解析,xml建模)
- Nestjs configuration service, configuring cookies and sessions
- MySQL searches and sorts out common methods according to time
- Numpy np. Max and np Maximum implements the relu function
- How should intermediate software designers prepare for the soft test
- Vulnhub's Tomato (tomato)
- vulnhub之Nagini
- AI模型看看视频,就学会了玩《我的世界》:砍树、造箱子、制作石镐样样不差...
猜你喜欢

Vulnhub's Tomato (tomato)

Understand go language context in one article

2022 northeast four provinces match VP record / supplementary questions

After watching the video, AI model learned to play my world: cutting trees, making boxes, making stone picks, everything is good

小鹏 P7 撞护栏安全气囊未弹出,官方回应称撞击力度未达到弹出要求

导师对帮助研究生顺利完成学业提出了20条劝告:第一,不要有度假休息的打算.....

Kubernetes 三打探针及探针方式

Mmc5603nj geomagnetic sensor (Compass example)

How to get started embedded future development direction of embedded

vulnhub之raven2
随机推荐
Xiaopeng P7 hit the guardrail and the airbag did not pop up. The official responded that the impact strength did not meet the ejection requirements
Based on MCU, how to realize OTA differential upgrade with zero code and no development?
vulnhub之pyexp
uniapp实现点击加载更多
Xml的(DTD,xml解析,xml建模)
Niuniu's team competition
Quantitative calculation research
Web security summary
Phpcms prompt message page Jump to showmessage
uniapp scroll view 解决高度自适应、弹框滚动穿透等问题。
Nestjs配置服务,配置Cookie和Session
STL Tutorial 9 deep copy and shallow copy of container elements
MySQL uses the method of updating linked tables with update
Qt OpenGL 旋转、平移、缩放
小鹏 P7 撞护栏安全气囊未弹出,官方回应称撞击力度未达到弹出要求
Momentum of vulnhub
(database authorization - redis) summary of unauthorized access vulnerabilities in redis
How should intermediate software designers prepare for the soft test
Vulnhub geminiinc
R语言ggplot2可视化:gganimate包创建动态折线图动画(gif)、使用transition_reveal函数在动画中沿给定维度逐步显示数据、在折线移动方向添加数据点