当前位置: 首页 > 后端技术 > PHP

PHP制作word简历

时间:2023-03-29 14:54:11 PHP

PHP操作word有一个很好用的轮子,phpword,可以在github上找到(PHPOffice/PHPWord)。上面有更详细的示例和代码,里面的源码包含一些常用的操作示例,包括设置页眉、页脚、页码、字体样式、表格、插入图片等常用操作。以下是如何使用转盘创建简历。模板替换制作简历很多招聘网站都有简历下载功能,请问如何用php实现呢?在PHPOffice/PHPWord中,有一种非常简单的方法可以生成一个word文档并在文档中插入一些文本。我在这里使用的方法非常棘手。这个wheel的文档里面有模板处理,我理解为模板替换,这是一个类似于laravel的blade模板的概念。接下来废话不多说,只说怎么操作,这里提一下,使用的是laravel框架。1.安装PHPOffice/PHPWordcomposer需要phpoffice/phpword2。创建控制器DocController和测试方法进行测试,并创建路由。phpartisanmake:controllerDocController3.创建一个word模板,我这里说明一下,滚轮替换word文档中${value}格式的字符串,这里我简单搭建一个模板如下图1:from图中可以看到有一些基本信息,可以从数据库中检索数据。而这次,直接使用了替换的方式。在工作经历、教育经历等多行表的模式下,这里只需要取一行作为模板。4.具体代码//loadtemplatedocx$templateProcessor=newTemplateProcessor('./sample.docx');//基本信息填写替换$templateProcessor->setValue('update_at',date('Y-m-dH:i:s'));$templateProcessor->setValue('number','123456');$templateProcessor->setValue('姓名','张三');$templateProcessor->setValue('性别','男性');$templateProcessor->setValue('出生','1996年10月');$templateProcessor->setValue('年龄','22');$templateProcessor->setValue('shortcut','unemployed/aaa');$templateProcessor->setValue('liveArea','福建省莆田市涵江区');$templateProcessor->setValue('住所','福建省莆田市涵江区');$templateProcessor->setValue('地址','');$templateProcessor->setValue('hopetodo','IT');$templateProcessor->setValue('hopeworkin','Internet');$templateProcessor->setValue('希望','7000+');$templateProcessor->setValue('worklocation','福建省莆田市');$templateProcessor->setValue('phone','123456789');$templateProcessor->setValue('邮件','456789@qq.com');$templateProcessor->setValue('qqnum','456789');$templateProcessor->setValue('selfjudge','哇哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈');//工作经验表替换$templateProcessor->cloneRow('experience_time',2);//表格通过克隆行形成两行$templateProcessor->setValue('experience_time#1','2010-09~2014-06');//每一行的参数都是value#X(X代表行号,从1开始)$templateProcessor->setValue('job#1','ABC公司CTO');$templateProcessor->setValue('experience_time#2','2014-09~present');$templateProcessor->setValue('job#2','JBC公司CTO');//教育经验$templateProcessor->cloneRow('time',2);$templateProcessor->setValue('time#1','2010-09~2014-06');$templateProcessor->setValue('school#1','ABC');$templateProcessor->setValue('major#1','计算机科学');$templateProcessor->设置价值('时间#2','2014-09?现在');$templateProcessor->setValue('school#2','JBC');$templateProcessor->setValue('major#2','计算机科学');//语言能力$templateProcessor->cloneRow('lang',2);$templateProcessor->setValue('lang#1','Chinese|Proficient');$templateProcessor->setValue('lang#2','English|Proficient');//技能$templateProcessor->cloneRow('skill',3);$templateProcessor->setValue('skill#1','JAVA|Proficient');$templateProcessor->setValue('技能#2','Python|Proficient');$templateProcessor->setValue('skill#3','PHP|Proficient');//保存文档$templateProcessor->saveAs('my.docx');您可以通过创建word模板来生成简历。以上内容没有提到如何替换图片。查看文档会发现这个包的模板替换并没有说怎么替换图片,因为好像根本没有提供这个方法,晕倒了。不过在github的issue中有人提出了这个问题,也有人给出了解决方案。下面说一下如何实现替换图片的功能。替换图片假设你的简历模板中有一个表格单元格可以插入一张图片,如下:我想用public/img下的current.jpg替换图片,但是源码中没有替换图片的功能图片转word,只能自己写了。1.修改composer.json自动加载TemplateDocx类:"autoload":{"classmap":["database/seeds","database/factories","app/Core/TemplateDocx.php"],"psr-4":{"App\\":"app/"}},运行如下代码:composerdump-autoload2。实现TemplateDocx类:我把这个类的内容直接放在我的gist上,连接TemplateDocx.php因为代码是放在gist上的,国内访问不了,所以直接贴代码,如下:_countRels=100;//图像和document.xml之间关系的起始id$this->_rels='';$this->_types='';}/***保存结果文档。**@throws\PhpOffice\PhpWord\Exception\Exception**@return字符串*/publicfunctionsave(){foreach($this->tempDocumentHeadersas$index=>$xml){$this->zipClass->addFromString($this->getHeaderName($index),$xml);$this->zipClass->addFromString($this->getMainPartName(),$this->tempDocumentMainPart);/******************重写原来的保存方法中添加的内容******************/if($this->_rels!=""){$this->zipClass->addFromString('word/_rels/document.xml.rels',$this->_rels);}if($this->_types!=""){$this->zipClass->addFromString('[Content_Types].xml',$this->_types);}/*********************我是分割线******************************/foreach($this->tempDocumentFootersas$index=>$xml){$this->zipClass->addFromString($this->getFooterName($index),$xml);}}//关闭zip文件if(false===$this->zipClass->close()){thrownewException('Couldnotclosezipfile.');}返回$this->tempDocumentFilename;}/***实现将图片替换进入word稳定的方法*@param$strKey*@param$img*/publicfunctionsetImg($strKey,$img){$strKey='${'.$strKey.'}';$relationTmpl='';$imgTmpl='';$toAdd=$toAddImg=$toAddType='';$aSearch=array('RID','IMG');$aSearchType=array('IMG','EXT');$countRels=$this->_countRels++;//我正在为jpg文件工作,如果你正在处理其他图像类型->在这里写条件$imgExt='jpg';$imgName='img'.$countrels。'.'.$imgExt;$this->zipClass->deleteName('word/media/'.$imgName);$this->zipClass->addFile($img['src'],'word/media/'.$imgName);$typeTmpl='';$rid='rId'。$反派;$countrels++;列表($w,$h)=getimagesize($img['src']);if(isset($img['swh']))//图像按比例变大{if($w<=$h){$ht=(int)$img['swh'];$ot=$w/$h;$wh=(int)$img['swh']*$ot;$wh=圆($wh);}如果($w>=$h){$wh=(int)$img['swh'];$ot=$h/$w;$ht=(int)$img['swh']*$ot;$ht=圆($ht);$w=$wh;$h=$ht;}if(isset($img['size'])){$w=$img['size'][0];$h=$img['尺寸'][1];}$toAddImg.=str_replace(array('RID','WID','HEI'),array($rid,$w,$h),$imgTmpl);if(isset($img['dataImg'])){$toAddImg.='>'.$this->limpiarString($img['dataImg']).'';}$aReplace=array($imgName,$imgExt);$toAddType.=str_replace($aSearchType,$aReplace,$typeTmpl);$aReplace=array($rid,$imgName);$toAdd.=str_replace($aSearch,$aReplace,$relationTmpl);$this->tempDocumentMainPart=str_replace(''.$strKey.'',$toAddImg,$this->tempDocumentMainPart);//打印$this->tempDocumentMainPart;如果($this->_rels==“”){$this->_rels=$this->zipClass->getFromName('word/_rels/document.xml.rels');$this->_types=$this->zipClass->getFromName('[Content_Types].xml');}$this->_types=str_replace('',$toAddType,$this->_types)。'';$this->_rels=str_replace('',$toAdd,$this->_rels)。'';}}3.使用方法:$templateProcessor=newTemplateDocx('./sample.docx');$imgPath='./img/againstthecurrent.jpg';$templateProcessor->setImg('img',array('src'=>$imgPath,//图片路径'size'=>array(150,150)//图片大小,单位px));$templateProcessor->setValue('name','Sun');$templateProcessor->cloneRow('key',2);//按行方式克隆表格,形成两行$templateProcessor->setValue('key#1','2010-09~2014-06');//每一行的参数都是值#X(X代表行号,从1开始)$templateProcessor->setValue('val#1','ABC公司CTO');$templateProcessor->setValue('key#2','2014-09~present');$templateProcessor->setValue('val#2','JBC公司CTO');//$templateProcessor->setValue('img','Sun');$templateProcessor->saveAs('my.docx');4、运行结果后,至此可以生成resume。如果这篇文章对你有帮助,记得点赞哦亲!如果您有任何问题,可以留言!!(* ̄︶ ̄)