服务端生成word并压缩打包下载
所需工具
- phpwrod 库
- php_zip 扩展
下载phpword库,放到类加载路径。
安装php_zip扩展
下载地址
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并压缩打包下载的更多相关文章
- Highcharts结合PhantomJS在服务端生成高质量的图表图片
项目背景 最近忙着给部门开发一套交互式的报表系统,来替换原有的静态报表系统. 老系统是基于dotnetCHARTING开发的,dotnetCHARTING的优势是图表类型丰富,接口调用简单,使用时只需 ...
- 从服务端生成Excel电子表格(Node.js+SpreadJS)
Node.js是一个基于Chrome V8引擎的JavaScript运行环境,通常用于创建网络应用程序.它可以同时处理多个连接,并且不像其他大多数模型那样依赖线程. 对于 Web 开发者来说,从数据库 ...
- 从服务端生成Excel电子表格(GcExcel + SpreadJS)
在服务端生成Excel电子表格,除了使用 Node.js + SpreadJS 外,葡萄城官方推荐使用 SpreadJS + GcExcel.该方案不仅能够解决批量绑定数据源并导出Excel.批量修改 ...
- C#开发BIMFACE系列46 服务端API之离线数据包下载及结构详解
BIMFACE二次开发系列目录 [已更新最新开发文章,点击查看详细] 在前一篇博客<C#开发BIMFACE系列45 服务端API之创建离线数据包>中通过调用接口成功的创建一个离线数 ...
- 根据服务端生成的WSDL文件创建客户端支持代码的三种方式
第一种:使用wsimport是JDK自带的工具,来生成 生成java客户端代码常使用的命令参数说明: 参数 说明 -p 定义客户端生成类的包名称 -s 指定客户端执行类的源文件存放目录 -d 指定客户 ...
- PHP5.5在windows 安装使用 memcached 服务端的方法以及 php_memcache.dll 下载
PHP5.5 在windows下安装 memcached 的方法 下载服务端资源 http://download.csdn.net/detail/zsjangel/7104727 下载完成后,解压(我 ...
- PHP实现zip压缩打包下载
先来看PHP实现文件及文件夹的zip压缩 这里使用PHP扩展的ZipArchive类,在使用之前要将php.ini文件中的zlib.output_compression设置为On 代码如下: publ ...
- 分布式监控系统开发【day37】:服务端生成配置数据(四)
一.目录结构 二.引子与代码 1.客户端获取服务列表接口 1.解决了什么问题 客户端要给我获取服务列表的的时候,他肯定要告诉他是谁?他怎么告诉我,客户端必须有一个id号 Saltsack你装一个客户端 ...
- Netbackup8.0以上版本,服务端生成证书,客户端获取、更新证书方式(整理中)
创建重发令牌 如果非主控主机已在主服务器上注册但其基于主机ID的证书不再有效,则可以重新颁发基于主机ID的证书.例如,证书在过期,被撤销或丢失时无效. 重发令牌是一种可用于重新颁发证书的令牌.它是一种 ...
随机推荐
- HTML几类标签的应用总结
打开DREAMWEAVER,新建HTML,如下图: body的属性: bgcolor 页面背景色 background 背景壁纸.图片 text 文字颜色 topmargin 上边距 leftm ...
- C++ CheckListBox
实现过程 CCheckListBox listbox1; listbox1.AddString("葡萄"); listbox1.AddString(" ...
- 新型信用卡MasterPass
Xsolla与masterpass合作.提供新型支付方式 "电子支付的未来在这里. "在万事达卡宣布发行一种全新的被称为MasterPass的支付解决方式的两年后.从2014年底開 ...
- 20个Linux系统监视工具
需要监视Linux服务器的性能?试试这些内置的命令和一些附加的工具吧.大多数Linux发行版都集成了一些监视工具.这些工具可以获取有关系统活动的信息的详细指标.通过这些工具,你可以发现产生系统性能问题 ...
- [转] Android进阶——安卓接入微信,获取OpenID
PS: sendAuthRequest拿到code,通过code拿到access_token和openId,access_token可以拿到用户的信息 http://blog.csdn.net/hao ...
- javascript进击(九)参考手册
完整的 Number 对象参考手册 如需可用于 Number 对象的所有属性和方法的完整参考,请访问我们的 Number 对象参考手册. 该参考手册包含每个属性和方法的描述和实例. 完整的 Strin ...
- Mysql 数据库 操作语句
mysql 格式语句规范 如何登陆你的数据库? 举例! 如果你的是 编译安装的花 那就得去编译安装后的那个目录中去,我的是安装到/usr/local/mysql 下登陆数据库:cd /usr/loca ...
- create---创建表
create table table_name (列名 数据类型 是否非空 约束信息, 列名 数据类型 是否非空 约束信息, 列名 数据类型 是否非空 约束信息, ........); 例: crea ...
- 构建本地yum源之rpmbuild
组内准备搭建内部yum源,在这之前需要规范软件的安装目录,并把现有的应用打包. 目前接触两种rpm打包工具,rpmbuild和fpm. - rpmbuild rpmbuild关键是spec文件编写. ...
- Cygwin下安装vim后,vim中退格键无法正常使用
问题描述: 在Cygwin中安装完vim后 进入vim,发现上下左右键和退格键都无法正常使用 问题分析: 首先考虑到的就是缺少vim的配置文件,首先查看/etc路径下是否有vim的配置文件 admin ...