所需工具

  • 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;
}

服务端生成word并压缩打包下载的更多相关文章

  1. Highcharts结合PhantomJS在服务端生成高质量的图表图片

    项目背景 最近忙着给部门开发一套交互式的报表系统,来替换原有的静态报表系统. 老系统是基于dotnetCHARTING开发的,dotnetCHARTING的优势是图表类型丰富,接口调用简单,使用时只需 ...

  2. 从服务端生成Excel电子表格(Node.js+SpreadJS)

    Node.js是一个基于Chrome V8引擎的JavaScript运行环境,通常用于创建网络应用程序.它可以同时处理多个连接,并且不像其他大多数模型那样依赖线程. 对于 Web 开发者来说,从数据库 ...

  3. 从服务端生成Excel电子表格(GcExcel + SpreadJS)

    在服务端生成Excel电子表格,除了使用 Node.js + SpreadJS 外,葡萄城官方推荐使用 SpreadJS + GcExcel.该方案不仅能够解决批量绑定数据源并导出Excel.批量修改 ...

  4. C#开发BIMFACE系列46 服务端API之离线数据包下载及结构详解

    BIMFACE二次开发系列目录     [已更新最新开发文章,点击查看详细] 在前一篇博客<C#开发BIMFACE系列45 服务端API之创建离线数据包>中通过调用接口成功的创建一个离线数 ...

  5. 根据服务端生成的WSDL文件创建客户端支持代码的三种方式

    第一种:使用wsimport是JDK自带的工具,来生成 生成java客户端代码常使用的命令参数说明: 参数 说明 -p 定义客户端生成类的包名称 -s 指定客户端执行类的源文件存放目录 -d 指定客户 ...

  6. PHP5.5在windows 安装使用 memcached 服务端的方法以及 php_memcache.dll 下载

    PHP5.5 在windows下安装 memcached 的方法 下载服务端资源 http://download.csdn.net/detail/zsjangel/7104727 下载完成后,解压(我 ...

  7. PHP实现zip压缩打包下载

    先来看PHP实现文件及文件夹的zip压缩 这里使用PHP扩展的ZipArchive类,在使用之前要将php.ini文件中的zlib.output_compression设置为On 代码如下: publ ...

  8. 分布式监控系统开发【day37】:服务端生成配置数据(四)

    一.目录结构 二.引子与代码 1.客户端获取服务列表接口 1.解决了什么问题 客户端要给我获取服务列表的的时候,他肯定要告诉他是谁?他怎么告诉我,客户端必须有一个id号 Saltsack你装一个客户端 ...

  9. Netbackup8.0以上版本,服务端生成证书,客户端获取、更新证书方式(整理中)

    创建重发令牌 如果非主控主机已在主服务器上注册但其基于主机ID的证书不再有效,则可以重新颁发基于主机ID的证书.例如,证书在过期,被撤销或丢失时无效. 重发令牌是一种可用于重新颁发证书的令牌.它是一种 ...

随机推荐

  1. 一步一步学android控件(之十六)—— CheckBox

    根据使用场景不同,有时候使用系统默认的CheckBox样式就可以了,但是有时候就需要自定义CheckBox的样式.今天主要学习如何自定义CheckBox样式.在CheckBox状态改变时有时需要做一些 ...

  2. 【C语言】编写一个函数实现n^k,使用递归实现

    #include <stdio.h> int fuc(int x,int n) { if(n!=1) return x*fuc(x,n-1); return 1; } int main() ...

  3. Delphi调用C++写的dll示例

    最近做一个读市民卡的项目,读卡器公司提供的读市民卡dll是用C++写的. 下面记录一些自己的心得,供需要的朋友参考. 声明dll函数要加上stdcall关键字,否则可能会报地址非法的错误. 代码: u ...

  4. uva340 数字匹配检索问题

    这道题目大意是:给定一个secret code,然后输入guess code,让你编程给出提示,提示的格式是(i,j),其中i表示strong match的个数,j表示weak match的个数.所谓 ...

  5. mybatis完美的实战教程

    文件夹(? )[-] (读者注:事实上这个应该叫做非常基础的入门一下下,假设你看过Hibernate了那这个就非常的简单) 文章来源:http://blog.csdn.net/techbirds_ba ...

  6. phpmailer使用gmail SMTP的方法

    终于能够通过phpmailer使用gmail账号发送邮件了phpmailer(现在的版本是1.73)是一个很好用的工具,可以很方便的使用php语言发送邮件,支持smtp及验证,我们一直都用它. 但是, ...

  7. oracle数据库入门

    oracle  数据库入门. 1.数据 2.数据存储的地方:变量 数组 容器 (内存中),文件,数据库(文件) 3.数据库系统:sqlserver 2000   2005  2008  mysql 5 ...

  8. 百度编辑器umeditor使用总结

    百度编辑器是一个功能很全.很强大. 百度单张图片上传只能存储在项目下面,而不能独立自定义存储位置,因此重写上传代码 百度文章中的图片是通过base64实现的,直接存储在数据库中 tomcat通过虚拟路 ...

  9. 获取当前时间日期并格式化--JS

    工作当中,总是遇到很多觉得不错的JS脚本.现在觉得还是找个地方记录下来,以后可以随时查看. /** *获取当前时间日期并格式化 */ function getNowDate(){ var mydate ...

  10. Unity3D 之UGUI 图片

    这里来降价下Unity3Dl的图片 先创建一个图片 图片的属性 Preserve Aspect -->保持图片的原始宽高比例 Set native Size -->图片原始尺寸 Image ...