当前位置:网站首页>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页面来的舒服呀
边栏推荐
- 金额计算用 BigDecimal 就万无一失了?看看这五个坑吧~~
- Sheet1$. Output [excel source output] Error in column [xxx]. The returned column status is: "the text is truncated, or one or more characters have no matches in the target code page.".
- Software testing weekly (issue 78): the more confident you are about the future, the more patient you are about the present.
- Visual Studio 2022下载及配置OpenCV4.5.5
- Dynamically monitor disk i/o with ZABBIX
- . \vmware-vdiskmanager. exe -k “c:\\xxxxx.vmdk”
- Download address and installation tutorial of vs2015
- STL tutorial 8-map
- Web安全总结
- 小鹏 P7 撞护栏安全气囊未弹出,官方回应称撞击力度未达到弹出要求
猜你喜欢
随机推荐
小鹏 P7 撞护栏安全气囊未弹出,官方回应称撞击力度未达到弹出要求
typeScript
Hongmeng fourth training
vulnhub之pyexp
Notes on 32-96 questions of sword finger offer
导师对帮助研究生顺利完成学业提出了20条劝告:第一,不要有度假休息的打算.....
Quantitative calculation research
Vulnhub's Tomato (tomato)
Slam mapping and autonomous navigation simulation based on turnlebot3
R语言使用原生包(基础导入包、graphics)中的hist函数可视化直方图(histogram plot)
STL tutorial 10 container commonalities and usage scenarios
Nestjs配置服务,配置Cookie和Session
MCDF实验1
vulnhub之cereal
previous permutation lintcode51
Keepalived中Master和Backup角色选举策略
Some common terms
Understand go language context in one article
Niuniu's team competition
剑指offer专项32-96题做题笔记