服务端生成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的证书.例如,证书在过期,被撤销或丢失时无效. 重发令牌是一种可用于重新颁发证书的令牌.它是一种 ...
随机推荐
- NPIV介绍
我们知道在存储区域网络(SAN:storage area network),主机(Host)能够访问后端存储(比如CLARiiON,VNX)必备的一个前提是主机必须配备HBA卡(Host Bus Ad ...
- powershell创建并加载配置文件
$pshome :powershell的主目录 $profile :显示 Windows PowerShell 配置文件的路径 test-path $profile :确定是否已经在系统上创建了 Wi ...
- C++中的类访问控制
C++中 public,protected, private 访问标号小结 第一:private, public, protected 访问标号的访问范围. private:只能由1.该类中的函数.2 ...
- Xenomai 的模式切换浅析
在Xenomai的用户空间下,有两种模式:primary mode (主模式) 和 secondary mode(次模式). 在主模式下调用Linux系统调用后程序就会进入次模式,反之,在次模式下调用 ...
- 实战RPM包制作
在开发中经常会用到一些rpm包,但是一直没有自己手动制作过.今天在制作的时候意外地还解决了自己以前一直困惑的问题,就是怎么制作rpm debuginfo包,类似CentOS官网那样的debuginfo ...
- 【C++】第 1 章:C++基础知识
C++历史简介 1.Java和C#语言都是从C++继承而来的.简而言之,要成为专业的编程人员就意味着要深刻理解C++.它是现代编程的基础. C:现代编程时代的开始 1.C语言的发展经历了20世纪60年 ...
- 使用viewpager实现广告条轮询的效果
先上效果图: viewpager是google在v4-support包中提供的,使用时与listview类似,度需要提供一个adapter, 只不过viewpager提供的是PagerAdapter ...
- C# #define
https://msdn.microsoft.com/library/yt3yck0x.aspx 使用 #define 定义符号.当您将符号用作传递给 #if 指令的表达式时,此表达式的计算结果为 t ...
- 玩转Android之二维码生成与识别
二维码,我们也称作QRCode,QR表示quick response即快速响应,在很多App中我们都能见到二维码的身影,最常见的莫过于微信了.那么今天我们就来看看怎么样在我们自己的App中集成二维码的 ...
- Android 开发第二天
开发入门HelloWorld 首先打开开发工具 第一步 第二步 效果图 以后可以点击一直下去 第三步骤介绍一下里面项目的作用 SRC是用来保存源代码的东西MainAcrivity.java主视图res ...