所需工具
- phpwrod 库
- php_zip 扩展
下载phpword库,放到类加载路径。
安装php_zip扩展
下载地址
linux下载targz包,windows下下载dll
linux下
wget http://pecl.php.net/get/zip-1.12.5.tgz
cd zip-1.12.
phpize
./configure
make
cp zip.so /alidata/server/php-5.4./lib/php/extensions/no-debug-non-zts-/
cd /alidata/server/php-5.4./etc/
cp php.ini php.ini.bak
echo 'extension=zip.so' >> php.ini
tail php.ini
service httpd restart
PHPword生成脚本
首先要在word模板文件中定义好变量,定义的方式为
${变量名}
protected function proccessWord($templeteFilename,$values,$defaultValues,$baseFloder,$outFilename = 'word'){
$values = array_merge($defaultValues,$values);
$template = new TemplateProcessor($templeteFilename);
foreach ($values as $k=>$v)
{
if(!is_array($v)){
$template->setValue($k, strval($v));
}
}
if ( ! preg_match("|.+?\.docx$|", $outFilename))
{
$outFilename .= '.docx$';
}
$outFille = $baseFloder.'/'.$outFilename;
$template->saveAs($outFille);
return $outFille;
}
PHP压缩打包并响应
public function postDocs(){
$query = Ownerdebt::whereNotNull('id')->with('owner.block')->where('status','active');
if(Input::get('type') == 'all'){
}else{
$selected = Input::get('selected');
$ids = array_unique(explode(",",$selected));
$query = $query->whereIn('id',$ids);
}
$ownerdebts = $query->get(); $user = User::with('property')->find(Auth::user()->id);
$defaultValues = array(
'name' =>'姓名',
'property' =>'某公司',
'block' =>'某小区',
'room' =>'某房',
'start_time'=>'2015年X月X日',
'end_time' =>'2015年X月X日',
'money' =>'1000',
'extra' =>'400',
'total' =>'1400',
'last_time'=>'2015年X月X日',// 最后期限
'create_date'=>'2015年X月X日',
);
$baseFloder = base_path().'/../uploads/docs/';
$allDocs = [];
$property = $user->property;
if($property){
foreach($ownerdebts as $ot){
$values = $ot->toArray();
$values['name'] = $ot->owner->name;
$values['property'] = $property->name;
$values['block'] = $ot->owner->block->name;
$values['room'] = $values['owner']['room'];
$values['start_time'] = date('Y 年 m 月 d',strtotime($values['start_time']));
$values['end_time'] = date('Y 年 m 月 d',strtotime($values['end_time']));
$values['total'] = $values['money'] + $values['extra'];
$values['last_time'] = date('Y 年 m 月 d',strtotime('+30 day'));
$values['create_date'] = date('Y 年 m 月 d'); //SiteHelpers::P($values);
$fileName = $values['room'].'-'.date("Y-m-d").'.docx';
$allDocs [] = $fileName;
$this->proccessWord(
app_path().'/template/lawyer.docx',
$values,
$defaultValues,
$baseFloder,
$fileName
);
}
// 打包
$zip_file = dirname(base_path())."/uploads/zip/lawyer-".date('Y-m-d-H-i-s').".zip";
$zipHelpers = new ZipHelpers();
//$zipTool = new ZipArchive();
//if(file_exists($zip_file)) unlink($zip_file);
//$open = $zipTool->open($zip_file,ZipArchive::CREATE);
foreach($allDocs as $docs){
$zipHelpers->add_data('docs/'.$docs, file_get_contents($baseFloder.'/'.$docs));
//if($open) $zipTool->addFile($docs,$baseFloder.'/'.$docs);
}
//if($open) $zipTool->close(); $flag = $zipHelpers->archive($zip_file);
$zipHelpers->clear_data(); if($flag) {
header("Content-type: application/zip");
header("Content-Disposition: attachment; filename=\"" .basename($zip_file) . "\"");
// header("Content-Length: " . filesize($zip_file)); // 这里不能响应长度,否则会造成压缩包损坏
readfile($zip_file);
}else{ }
}
exit;
}