进入正题:本流程是基于window环境下。
一、安装composer:Download Compser
点击Composer-Setup.exe之后按照流程安装就行,安装路径自己定义。
可能会出现安装报错,绝大部分原因是因为没有开启openssl配置。
我们打开 php 目录下的 php.ini,将 extensinotallow=php_openssl.dll 前面的分号去掉就可以了。
二、安装完成后,在cmd命令窗口或者powershell中输入composer -V
指令查看composer安装是否成功。
然后最重要的就是将Packagist改为国内镜像了,因为这个composer软件是国外的,所以可能有些功能会被限制不能使用,在cmd命令窗口或者powershell中输入
composer config -g repo.packagist composer https://packagist.phpcomposer.com
三、项目中composer的使用:
我们需要先在项目的目录下创建一个 composer.json 文件,文件描述了项目的依赖关系。
json文件中写入:
{
"require": {
"monolog/monolog": "1.2.*"
}
}
然后开启cmd命令控制中心或者powershell,将路径改为我们计算机中存储项目的路径,运行composer install
,这下子我们项目中需要的依赖包就安装完了。
四、引入第三方库phpoffice/phpword。
这个库可以直接手写编辑word文件输出的样式,也可以导入word模板,然后替换里面需要变更的变量。(但是word模板的格式必须是docx后缀的,至于为什么doc的不行,看过源码后我觉得是可以的,可能是自己偷懒不想去找doc的方法,但是生成的word文件是可以为doc或者docx格式的)。
同样的在计算机中存储项目的路径下运行cmd命令控制中心或者powershell。输入composer require phpoffice/phpword
,然后这个三方库就已经自动安装成功了,接下来就是去写代码了。
五、引入word模板并生成word文件。
我们需要将word模板中需要替换的变量改为${name}
的形式,${}
中的名字随便改。只是用来做变量替换的媒介。
require_once . "/vendor/autoload.php";//这是composer自动生成的autoload.php文件,是需要手动导入的。
$phpWord = new PhpOffice\PhpWord\PhpWord();
$tmp = $phpWord -> loadTemplate("/xxx.docx");//这里指加载的word模板文件的路径,文件最好放在项目的包下面
$tmp -> setValue('name', 'JerryKit');//其中前者name就是${}中的名字,后者为你想要替换的值
$arr = array('a', 'b', 'c');//列如你想表格行随着你的值不断自增
$rows = count($arr);//计算数组的长度
$tmp -> cloneRow('name',$rows);//以name作为表格行的第一个元素,进行克隆行
for ($i=0; $i < $rows; $i++) {
$tmp -> setValue("name#" . ($i + 1), $arr[i]);//按照顺序自动生成行,#不能少
}
//有俩种方式生成word文件
$tmpfile = $tmp->saveAs('/xxxxxxx.docx');//这边指生成到指定路径,并且取名为xxxxxxx。不需要执行下面的输出到控制台的代码。
$tmpfile = $tmp->save();//暂存服务器,不指定路径。
ob_start();
$fp = fopen($tmpfile,"r");
$file_size = filesize($tmpfile);
$downFileName = "xxxxxxx.docx";
header("Cache-Comtrol: public");
header("Content-type: application/octet-stream");
header("Accept-Ranges: bytes");
header("Content-Disposition: attachment; filename={$downFileName}.docx");
header("Pragma:no-cache");
header("Expires:0");
$buffer = 1024;
$file_count = 0;
while(!feof($fp) && $file_count < $file_size){
$file_con = fread($fp,$buffer);
$file_count += $buffer;
echo $file_con;
}//将生成的word文件以二进制流输出到前端和控制台中
ob_end_flush();
fclose($fp);
unlink($tmpfile);
exit();