zoukankan      html  css  js  c++  java
  • 服务端生成word并压缩打包下载

    所需工具

    • phpwrod 库
    • php_zip 扩展

    下载phpword库,放到类加载路径。

    安装php_zip扩展

    下载地址 

    linux下载targz包,windows下下载dll
     
    linux下
     1 wget http://pecl.php.net/get/zip-1.12.5.tgz
     2 cd zip-1.12.5
     3 phpize
     4 ./configure
     5 make
     6 cp zip.so /alidata/server/php-5.4.23/lib/php/extensions/no-debug-non-zts-20100525/
     7 cd /alidata/server/php-5.4.23/etc/
     8 cp php.ini php.ini.bak
     9 echo 'extension=zip.so' >> php.ini
    10 tail php.ini
    11 service httpd restart

    PHPword生成脚本

    首先要在word模板文件中定义好变量,定义的方式为

    1 ${变量名}
     1 protected function proccessWord($templeteFilename,$values,$defaultValues,$baseFloder,$outFilename = 'word'){
     2     $values = array_merge($defaultValues,$values);
     3     $template = new TemplateProcessor($templeteFilename);
     4     foreach ($values as $k=>$v)
     5     {
     6         if(!is_array($v)){
     7             $template->setValue($k, strval($v));
     8         }
     9     }
    10     if ( ! preg_match("|.+?.docx$|", $outFilename))
    11     {
    12         $outFilename .= '.docx$';
    13     }
    14     $outFille = $baseFloder.'/'.$outFilename;
    15     $template->saveAs($outFille);
    16     return $outFille;
    17 }

    PHP压缩打包并响应

     1 public function postDocs(){
     2   $query = Ownerdebt::whereNotNull('id')->with('owner.block')->where('status','active');
     3   if(Input::get('type') == 'all'){
     4   }else{
     5      $selected = Input::get('selected');
     6      $ids = array_unique(explode(",",$selected));
     7      $query = $query->whereIn('id',$ids);
     8   }
     9   $ownerdebts = $query->get();
    10 
    11   $user = User::with('property')->find(Auth::user()->id);
    12   $defaultValues = array(
    13      'name'     =>'姓名',
    14      'property' =>'某公司',
    15      'block'    =>'某小区',
    16      'room'     =>'某房',
    17      'start_time'=>'2015年X月X日',
    18      'end_time' =>'2015年X月X日',
    19      'money'    =>'1000',  
    20      'extra'    =>'400',             
    21      'total'    =>'1400',
    22      'last_time'=>'2015年X月X日',//    最后期限
    23      'create_date'=>'2015年X月X日',
    24   );
    25   $baseFloder = base_path().'/../uploads/docs/';
    26   $allDocs = [];
    27   $property = $user->property;
    28   if($property){
    29      foreach($ownerdebts as $ot){
    30         $values = $ot->toArray();
    31         $values['name']         =  $ot->owner->name;
    32         $values['property']     =  $property->name;
    33         $values['block']        =  $ot->owner->block->name;
    34         $values['room']         =  $values['owner']['room'];
    35         $values['start_time']   =  date('Y 年 m 月 d',strtotime($values['start_time']));
    36         $values['end_time']     =  date('Y 年 m 月 d',strtotime($values['end_time']));
    37         $values['total']        =  $values['money'] + $values['extra'];
    38         $values['last_time']    =  date('Y 年 m 月 d',strtotime('+30 day'));
    39         $values['create_date']  =  date('Y 年 m 月 d');
    40 
    41         //SiteHelpers::P($values);
    42         $fileName = $values['room'].'-'.date("Y-m-d").'.docx';
    43         $allDocs [] = $fileName;
    44         $this->proccessWord(
    45            app_path().'/template/lawyer.docx',
    46            $values,
    47            $defaultValues,
    48            $baseFloder,
    49            $fileName
    50         );
    51      }
    52      // 打包
    53      $zip_file = dirname(base_path())."/uploads/zip/lawyer-".date('Y-m-d-H-i-s').".zip";
    54      $zipHelpers = new ZipHelpers();
    55      //$zipTool = new ZipArchive();
    56      //if(file_exists($zip_file)) unlink($zip_file);
    57      //$open = $zipTool->open($zip_file,ZipArchive::CREATE);
    58      foreach($allDocs as $docs){
    59         $zipHelpers->add_data('docs/'.$docs, file_get_contents($baseFloder.'/'.$docs));
    60         //if($open) $zipTool->addFile($docs,$baseFloder.'/'.$docs);
    61      }
    62      //if($open) $zipTool->close();
    63 
    64      $flag = $zipHelpers->archive($zip_file);
    65      $zipHelpers->clear_data();
    66 
    67      if($flag) {
    68         header("Content-type: application/zip");
    69         header("Content-Disposition: attachment; filename="" .basename($zip_file) . """);
    70 //       header("Content-Length: " . filesize($zip_file)); // 这里不能响应长度,否则会造成压缩包损坏
    71         readfile($zip_file);
    72      }else{
    73 
    74      }
    75   }
    76   exit;
    77 }
  • 相关阅读:
    angular2学习
    随笔
    angular 中ng-repeat后ng-click失效
    一个hover效果
    获取屏幕高度
    延时加载 lazyload使用技巧
    关于MVC模板渲染的一点小事type="text/template"
    JsRender实用教程(tag else使用、循环嵌套访问父级数据)
    jQuery Validate 插件为表单提供了强大的验证功能
    日期时间选择器bootstrap-datetimepicker表单组件
  • 原文地址:https://www.cnblogs.com/lvyahui/p/4695798.html
Copyright © 2011-2022 走看看