当前位置:网站首页>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页面来的舒服呀
边栏推荐
- Visual Studio 2022下载及配置OpenCV4.5.5
- Keepalived中Master和Backup角色选举策略
- vulnhub之narak
- PHP Basics
- DNS multi-point deployment IP anycast+bgp actual combat analysis
- 基于turtlebot3实现SLAM建图及自主导航仿真
- 【学习笔记】dp 状态与转移
- P3250 [hnoi2016] Network + [necpc2022] f.tree path tree section + segment tree maintenance heap
- R语言使用gridExtra包的grid.arrange函数将ggplot2包的多个可视化图像横向组合起来,ncol参数自定义组合图列数、nrow参数自定义组合图行数
- DS90UB949
猜你喜欢

Solve msvcp120d DLL and msvcr120d DLL missing

Numpy np. Max and np Maximum implements the relu function

Quantitative calculation research

Based on MCU, how to realize OTA differential upgrade with zero code and no development?

Excel快速跨表复制粘贴

Excel表格转到Word中,表格不超边缘纸张范围

STL Tutorial 9 deep copy and shallow copy of container elements

Raven2 of vulnhub

(database authorization - redis) summary of unauthorized access vulnerabilities in redis

vulnhub之pyexp
随机推荐
MCDF Experiment 1
previous permutation lintcode51
uniapp scroll view 解决高度自适应、弹框滚动穿透等问题。
typeScript
银泰百货点燃城市“夜经济”
vulnhub之momentum
Cacti monitors redis implementation process
Visual studio 2022 downloading and configuring opencv4.5.5
vulnhub之GeminiInc
R language uses grid of gridextra package The array function combines multiple visual images of the ggplot2 package horizontally, and the ncol parameter defines the number of columns of the combined g
MySQL uses the method of updating linked tables with update
小鹏 P7 撞护栏安全气囊未弹出,官方回应称撞击力度未达到弹出要求
Raven2 of vulnhub
DNS多点部署IP Anycast+BGP实战分析
php 获取文件夹下面的文件列表和文件夹列表
STL教程9-容器元素深拷贝和浅拷贝问题
Dynamic programming (interval DP)
Vulnhub's Tomato (tomato)
Capturing and sorting out external Fiddler -- Conversation bar and filter [2]
rxjs Observable filter Operator 的实现原理介绍