使用PHPword中文乱码并且下载的方法

  如果你的编码格式是utf-8的话就用这个

   1.找到 Section.php 的 addText 函数

1 $givenText = utf8_encode($text);

 改成

1 $givenText = iconv('gbk', 'utf-8', $text);

 

  2.找到template.php这个文件,找到这个,把$replace = utf8_encode($replace);注释,换成 $replace =iconv('gbk', 'utf-8', $replace);

1 public function setValue($search, $replace) {
2         if(substr($search, 0, 2) !== '${' && substr($search, -1) !== '}') {
3             $search = '${'.$search.'}';
4         }
5         
6         if(!is_array($replace)) {
7            // $replace = utf8_encode($replace);
8            $replace =iconv('gbk', 'utf-8', $replace);
9         }

 

  3.找到PHPWord\Section\Table\Cell.php中的addText()方法,把这行$text = utf8_encode($text);注释掉就可以了

 

4.输出的时候如果有汉字,就用这个输出

1   $document->setValue('weekday', iconv("utf-8","gbk",$list['company_name']));

5.保存的时候也一样

1 $document->save( iconv("utf-8","gbk",'C:/3D定制云_'.$list['company_name'].'.docx'));

 6.下载word文档到本地

 1  header("Content-type:text/html;charset=utf-8");
 2         $filename='upload/download/3D定制云_'.$bloc['company_name'].'.docx';
 3         $file_path = iconv("utf-8","gbk",$filename);
 4         $fil_name=$filename;
 5         if (!file_exists($file_path)){
 6             echo  "没有该文件";
 7             return;
 8         }else{
 9             ob_clean();
10             ob_start();
11             $fp = fopen($file_path,"r");
12             $file_size = filesize($file_path);
13             Header("Content-type:application/octet-stream");
14             Header("Accept-Ranges:bytes");
15             Header("Accept-Length:".$file_size);
16             Header("Content-Disposition:attchment; filename=".$fil_name);
17             $buffer=1024;
18             $file_count=0;
19             while (!feof($fp) && $file_count<$file_size ){
20                 $file_con=fread($fp,$buffer);
21                 $file_count +=$buffer;
22                 echo $file_con;
23             }
24             fclose($fp);
25             ob_end_flush();
26         }

 

全部程序

 1 vendor('phpoffice/PHPWord/PHPWord');
 2         $PHPWord = new \PHPWord();
 3         $dir='upload/';
 4         $word='test.docx';
 5         $document = new \PHPWord_Template($dir.$word);
 6         $document->setValue('Value1', $bloc['username']);
 7         $document->setValue('Value2', $bloc['original_password']);
 8         $document->setValue('weekday', iconv("utf-8","gbk",$bloc['company_name']));
 9         $document->save( iconv("utf-8","gbk",'upload/download/3D定制云_'.$bloc['company_name'].'.docx'));
10 
11         header("Content-type:text/html;charset=utf-8");
12         $filename='upload/download/3D定制云_'.$bloc['company_name'].'.docx';
13         $file_path = iconv("utf-8","gbk",$filename);
14         $fil_name=$filename;
15         if (!file_exists($file_path)){
16             echo  "没有该文件";
17             return;
18         }else{
19             ob_clean();
20             ob_start();
21             $fp = fopen($file_path,"r");
22             $file_size = filesize($file_path);
23             Header("Content-type:application/octet-stream");
24             Header("Accept-Ranges:bytes");
25             Header("Accept-Length:".$file_size);
26             Header("Content-Disposition:attchment; filename=".$fil_name);
27             $buffer=1024;
28             $file_count=0;
29             while (!feof($fp) && $file_count<$file_size ){
30                 $file_con=fread($fp,$buffer);
31                 $file_count +=$buffer;
32                 echo $file_con;
33             }
34             fclose($fp);
35             ob_end_flush();
36         }

 

posted @ 2017-10-21 13:50  原来是个帅小伙  阅读(2980)  评论(3编辑  收藏  举报