当前位置:网站首页>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页面来的舒服呀
边栏推荐
猜你喜欢
Excel快速跨表复制粘贴
解决msvcp120d.dll和msvcr120d.dll缺失
After watching the video, AI model learned to play my world: cutting trees, making boxes, making stone picks, everything is good
Machine learning 3.2 decision tree model learning notes (to be supplemented)
STL教程10-容器共性和使用场景
ftp登录时,报错“530 Login incorrect.Login failed”
银泰百货点燃城市“夜经济”
Hongmeng fourth training
Momentum of vulnhub
GCC compilation process and dynamic link library and static link library
随机推荐
OPenGL 基本知识(根据自己理解整理)
Uniapp implementation Click to load more
安裝electron失敗的解决辦法
typeScript
R language uses grid of gridextra package The array function combines multiple visual images of the lattice package horizontally, and the ncol parameter defines the number of columns of the combined g
量化计算调研
Excel quick cross table copy and paste
Go language to realize static server
Keepalived中Master和Backup角色选举策略
The R language uses the hist function in the native package (basic import package, graphics) to visualize the histogram plot
Capturing and sorting out external Fiddler -- Conversation bar and filter [2]
简单工厂和工厂方法模式
《剑指offer 04》二维数组查找
Dynamic programming (interval DP)
vulnhub之cereal
Solution à la défaillance de l'installation d'Electron
vulnhub之presidential
R language ggplot2 visualization: gganimate package creates dynamic line graph animation (GIF) and uses transition_ The reveal function displays data step by step along a given dimension in the animat
Introduction to the implementation principle of rxjs observable filter operator
libvirt 中体验容器