PHP导出word方法(一phpword)

25 篇文章 1 订阅

背景

上一篇:MHT导出word文档

上一篇,已经记录了使用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页面来的舒服呀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值