服务端生成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的证书.例如,证书在过期,被撤销或丢失时无效. 重发令牌是一种可用于重新颁发证书的令牌.它是一种 ...
随机推荐
- careercup-递归和动态规划 9.5
9.5 编写一个方法,确定某字符串的所有排列组合. 类似leetcode:Permutations 解法: 跟许多递归问题一样,简单构造法非常管用.假设有个字符串S,以字符序列a1a2a...an表示 ...
- 选择 GCD 还是 NSTimer ?
我们常常会延迟某件任务的执行,或者让某件任务周期性的执行.然后也会在某些时候需要取消掉之前延迟执行的任务. 延迟操作的方案一般有三种: 1.NSObject的方法: 2.使用NSTimer的方法: 3 ...
- (原创)如何在spannableString中使用自定义字体
最近在做车联网的产品,主打的是语音交互和导航功能,UI给的导航界面可真是够酷炫的.但麻烦的事情也来了,里面的一句话居然用到了三种字体.界面如图所示: 从图中可以看出 500m左前方行驶 居然使用了三种 ...
- Android5.0之Toobar的使用
总体上来说,Toolbar的使用可以分为两个方面,一方面是将ToolBar当作ActionBar来用,另一方面就是将Toolbar当成一个单独的控件来用,不过到目前为止我见到的大部分情况都是把Tool ...
- Java基础知识强化之IO流笔记48:IO流练习之 复制单级文件夹案例
1. 复制单级文件夹 数据源:e:\\demo 目的地:e:\\test 分析: A:封装目录 B:获取该目录下的所有文本的File数组 C:遍历该File数组,得到每一个File对象 ...
- iOS多线程开发--NSThread NSOperation GCD
多线程 当用户播放音频.下载资源.进行图像处理时往往希望做这些事情的时候其他操作不会被中 断或者希望这些操作过程中更加顺畅.在单线程中一个线程只能做一件事情,一件事情处理不完另一件事就不能开始,这样势 ...
- JavaScript入门(7)
一.什么是函数 函数:把完成特定功能的代码放到一个函数里,直接调用这个函数,就省去重复输入大量代码的麻烦 函数的作用:写一次代码,然后反复地重用这个代码 Eg: 求多组数的和,不使用函数 { var ...
- 20160408javaweb之JDBC ---PreparedStatement
PreparedStatement 1.Sql注入:由于jdbc程序在执行的过程中sql语句在拼装时使用了由页面传入参数,如果用户恶意传入一些sql中的特殊关键字,会导致sql语句意义发生变化,这种攻 ...
- 20160314 Request 和Response
一.Response 1.Resonse的继承结构: ServletResponse--HttpServletResponse 2.Response代表响应,于是响应消息中的 状态码.响应头.实体内容 ...
- 【转】【SQLServer】SQL事务用法begin tran,commit tran和rollback tran的用法
Sql Server 2005/2008中提供了begin tran,commit tran和rollback tran来使用事务.begin tran表示开始事务, commit tran表示提交事 ...