<output id="r87xx"></output>
    1. 
      
      <mark id="r87xx"><thead id="r87xx"><input id="r87xx"></input></thead></mark>
        •   

               當(dāng)前位置:首頁>軟件介紹>PHP生成word的三種方式 查詢:
               
          PHP生成word的三種方式

          PHP生成word原理

          1. 利用windows下面的 com組件

          2. 利用PHP將內(nèi)容寫入doc文件之中

          具體實(shí)現(xiàn):

          ·         利用windows下面的 com組件

          原理:com作為PHP的一個(gè)擴(kuò)展類,安裝過office的服務(wù)器會(huì)自動(dòng)調(diào)用word.application的com,可以自動(dòng)生成文檔,PHP官方文檔手冊(cè),word學(xué)習(xí)推薦WORD文檔學(xué)習(xí)網(wǎng)。

          使用官方實(shí)例:

          1

          2

          3

          4

          5

          6

          7

          8

          9

          10

          11

          12

          13

          14

          15

          16

          17

          18

          19

          20

          21

          <?php

          //   starting word

          $word = new COM("word.application") or die("Unable to instantiate   Word");

          echo "Loaded Word, version   {$word->Version} ";

           

          //bring it   to front

          $word->Visible   = 1;

           

          //open an   empty document

          $word->Documents->Add();

           

          //do some   weird stuff

          $word->Selection->TypeText("This   is a test...");

          $word->Documents[1]->SaveAs("Useless   test.doc");

           

          //closing   word

          $word->Quit();

           

          //free the   object

          $word = null;

          ?>

          個(gè)人建議:com實(shí)例后的方法都需要查找官方文檔才知道什么意思,編輯器沒有代碼提示,非常不方便,另外這個(gè)效率也不是很高,不推薦使用

          利用PHP將內(nèi)容寫入doc文件之中

          這個(gè)方法又可以分為兩種方法

          ·         生成mht格式(和HTML很相似)寫入word

          ·         HTML格式寫入word

          1.   生成mht格式(和HTML很相似)寫入word

          1

          2

          3

          4

          5

          6

          7

          8

          9

          10

          11

          12

          13

          14

          15

          16

          17

          18

          19

          20

          21

          22

          23

          24

          25

          26

          27

          28

          29

          30

          31

          32

          33

          34

          35

          36

          37

          38

          39

          40

          41

          42

          43

          44

          45

          46

          47

          48

          49

          50

          51

          52

          53

          54

          55

          56

          57

          58

          59

          60

          61

          /**

           * 根據(jù)HTML代碼獲取word文檔內(nèi)容

           * 創(chuàng)建一個(gè)本質(zhì)為mht的文檔,該函數(shù)會(huì)分析文件內(nèi)容并從遠(yuǎn)程下載頁面中的圖片資源

           * 該函數(shù)依賴于類MhtFileMaker

           * 該函數(shù)會(huì)分析img標(biāo)簽,提取src的屬性值。但是,src的屬性值必須被引號(hào)包圍,否則不能提取

           *

           *   @param string $content HTML內(nèi)容

           *   @param string $absolutePath 網(wǎng)頁的絕對(duì)路徑。如果HTML內(nèi)容里的圖片路徑為相對(duì)路徑,那么就需要填寫這個(gè)參數(shù),來讓該函數(shù)自動(dòng)填補(bǔ)成絕對(duì)路徑。這個(gè)參數(shù)最后需要以/結(jié)束

           *   @param bool $isEraseLink 是否去掉HTML內(nèi)容中的鏈接

           */

          function getWordDocument( $content , $absolutePath = "" , $isEraseLink = true )

          {

              $mht = new MhtFileMaker();

              if ($isEraseLink)

                  $content =   preg_replace('/<as*.*?s*>(s*.*?s*)</a>/i' , '$1' , $content);   //去掉鏈接

           

              $images = array();

              $files = array();

              $matches = array();

              //這個(gè)算法要求src后的屬性值必須使用引號(hào)括起來

              if ( preg_match_all('/<img[. ]*?srcs*?=s*?["'](.*?)["'](.*?)/>/i',$content ,$matches ) )

              {

                  $arrPath = $matches[1];

                  for ( $i=0;$i<count($arrPath);$i++)

                  {

                      $path = $arrPath[$i];

                      $imgPath = trim( $path );

                      if ( $imgPath != "" )

                      {

                          $files[]   = $imgPath;

                          if(   substr($imgPath,0,7) == '

          ')

                          {

                              //絕對(duì)鏈接,不加前綴

                          }

                          else

                          {

                              $imgPath = $absolutePath.$imgPath;

                          }

                          $images[]   = $imgPath;

                      }

                  }

              }

              $mht->AddContents("tmp.html",$mht->GetMimeType("tmp.html"),$content);

               

              for ( $i=0;$i<count($images);$i++)

              {

                  $image = $images[$i];

                  if ( @fopen($image , 'r') )

                  {

                      $imgcontent = @file_get_contents( $image );

                      if ( $content )

                          $mht->AddContents($files[$i],$mht->GetMimeType($image),$imgcontent);

                  }

                  else

                  {

                      echo "file:".$image." not   exist!<br />";

                  }

              }

               

              return $mht->GetFile();

          }

          這個(gè)函數(shù)的主要功能其實(shí)就是分析HTML代碼中的所有圖片地址,并且依次下載下來。獲取到了圖片的內(nèi)容以后,調(diào)用MhtFileMaker類,將圖片添加到mht文件中。具體的添加細(xì)節(jié),封裝在MhtFileMaker類中了。

          ·         使用方法:遠(yuǎn)程調(diào)用

          1

          2

          3

          4

          5

          6

          7

          8

          url=   **com;

           

          $content = file_get_contents($url);

           

          $fileContent = getWordDocument($content,"   Music/etc/");

          $fp = fopen("test.doc", 'w');

          fwrite($fp,   $fileContent);

          fclose($fp);

          其中,$content變量應(yīng)該是HTML源代碼,后面的鏈接應(yīng)該是能填補(bǔ)HTML代碼中圖片相對(duì)路徑的URL地址

          ·         本地生成調(diào)用:

          header("Cache-Control: no-cache, must-revalidate"); 
          header("Pragma: no-cache"); 
          $wordStr = 'PHP淮北的個(gè)人網(wǎng)站--'; 
          $fileContent = getWordDocument($wordStr); 
          $fileName = iconv("utf-8", "GBK", ‘PHP淮北’ . '_'. $intro . '_' . rand(100, 999));   
          header("Content-Type: application/doc"); 
          header("Content-Disposition: attachment; filename=" . $fileName . ".doc"); 
          echo $fileContent;


          注意,在使用這個(gè)函數(shù)之前,您需要先包含類MhtFileMaker,這個(gè)類可以幫助我們生成Mht文檔。

           

          1

          2

          3

          4

          5

          6

          7

          8

          9

          10

          11

          12

          13

          14

          15

          16

          17

          18

          19

          20

          21

          22

          23

          24

          25

          26

          27

          28

          29

          30

          31

          32

          33

          34

          35

          36

          37

          38

          39

          40

          41

          42

          43

          44

          45

          46

          47

          48

          49

          50

          51

          52

          53

          54

          55

          56

          57

          58

          59

          60

          61

          62

          63

          64

          65

          66

          67

          68

          69

          70

          71

          72

          73

          74

          75

          76

          77

          78

          79

          80

          81

          82

          83

          84

          85

          86

          87

          88

          89

          90

          91

          92

          93

          94

          95

          96

          97

          98

          99

          100

          101

          102

          103

          104

          105

          106

          107

          108

          109

          110

          111

          112

          113

          114

          115

          116

          117

          118

          119

          120

          121

          122

          123

          124

          125

          126

          127

          128

          129

          130

          131

          132

          133

          134

          135

          136

          137

          138

          139

          140

          141

          142

          143

          144

          145

          146

          147

          148

          149

          150

          151

          152

          153

          154

          155

          156

          157

          158

          159

          160

          161

          162

          163

          164

          165

          166

          167

          168

          169

          170

          171

          172

          173

          174

          175

          176

          177

          178

          179

          180

          <?php

          /***********************************************************************

          Class:          Mht File Maker

          Version:        1.2 beta

          Date:           02/11/2007

          Author:         Wudi <[email protected]>

          Description:    The class can make .mht file.

          ***********************************************************************/

           

          class MhtFileMaker{

              var $config = array();

              var $headers = array();

              var $headers_exists = array();

              var $files = array();

              var $boundary;

              var $dir_base;

              var $page_first;

           

              function MhtFile($config = array()){

           

              }

           

              function SetHeader($header){

                  $this->headers[]   = $header;

                  $key = strtolower(substr($header, 0,   strpos($header, ':')));

                  $this->headers_exists[$key]   = TRUE;

              }

           

              function SetFrom($from){

                  $this->SetHeader("From:   $from");

              }

           

              function SetSubject($subject){

                  $this->SetHeader("Subject:   $subject");

              }

           

              function SetDate($date = NULL, $istimestamp = FALSE){

                  if ($date == NULL) {

                      $date = time();

                  }

                  if ($istimestamp == TRUE) {

                      $date = date('D, d M Y H:i:s O', $date);

                  }

                  $this->SetHeader("Date:   $date");

              }

           

              function SetBoundary($boundary = NULL){

                  if ($boundary == NULL) {

                      $this->boundary   = '--' . strtoupper(md5(mt_rand())) .   '_MULTIPART_MIXED';

                  }   else {

                      $this->boundary   = $boundary;

                  }

              }

           

              function SetBaseDir($dir){

                  $this->dir_base   = str_replace("", "/", realpath($dir));

              }

           

              function SetFirstPage($filename){

                  $this->page_first   = str_replace("", "/",   realpath("{$this->dir_base}/$filename"));

              }

           

              function AutoAddFiles(){

                  if (!isset($this->page_first)) {

                      exit ('Not set the first page.');

                  }

                  $filepath = str_replace($this->dir_base, '',   $this->page_first);

                  $filepath = 'mhtfile' .   $filepath;

                  $this->AddFile($this->page_first,   $filepath, NULL);

                  $this->AddDir($this->dir_base);

              }

           

              function AddDir($dir){

                  $handle_dir = opendir($dir);

                  while ($filename = readdir($handle_dir)) {

                      if (($filename!='.') &&   ($filename!='..') &&   ("$dir/$filename"!=$this->page_first)) {

                          if (is_dir("$dir/$filename")) {

                              $this->AddDir("$dir/$filename");

                          }   elseif (is_file("$dir/$filename")) {

                              $filepath = str_replace($this->dir_base, '',   "$dir/$filename");

                              $filepath = 'mhtfile' .   $filepath;

                              $this->AddFile("$dir/$filename",   $filepath, NULL);

                          }

                      }

                  }

                  closedir($handle_dir);

              }

           

              function AddFile($filename, $filepath = NULL, $encoding = NULL){

                  if ($filepath == NULL) {

                      $filepath = $filename;

                  }

                  $mimetype = $this->GetMimeType($filename);

                  $filecont = file_get_contents($filename);

                  $this->AddContents($filepath,   $mimetype, $filecont, $encoding);

              }

           

              function AddContents($filepath, $mimetype,   $filecont, $encoding =   NULL){

                  if ($encoding == NULL) {

                      $filecont = chunk_split(base64_encode($filecont),   76);

                      $encoding = 'base64';

                  }

                  $this->files[]   = array('filepath' =>   $filepath,

                                         'mimetype' => $mimetype,

                                         'filecont' => $filecont,

                                         'encoding' => $encoding);

              }

           

              function CheckHeaders(){

                  if (!array_key_exists('date', $this->headers_exists))   {

                      $this->SetDate(NULL,   TRUE);

                  }

                  if ($this->boundary == NULL) {

                      $this->SetBoundary();

                  }

              }

           

              function CheckFiles(){

                  if (count($this->files) == 0) {

                      return FALSE;

                  }   else {

                      return TRUE;

                  }

              }

           

              function GetFile(){

                  $this->CheckHeaders();

                  if (!$this->CheckFiles()) {

                      exit ('No file was added.');

                  }

                  $contents = implode(" ", $this->headers);

                  $contents .= " ";

                  $contents .= "MIME-Version: 1.0 ";

                  $contents .= "Content-Type:   multipart/related; ";

                  $contents .=   " boundary="{$this->boundary}"; ";

                  $contents .= " type="" . $this->files[0]['mimetype'] .   "" ";

                  $contents .= "X-MimeOLE: Produced By Mht File   Maker v1.0 beta ";

                  $contents .= " ";

                  $contents .= "This is a multi-part message in   MIME format. ";

                  $contents .= " ";

                  foreach ($this->files as $file) {

                      $contents .=   "--{$this->boundary} ";

                      $contents .= "Content-Type:   $file[mimetype] ";

                      $contents .= "Content-Transfer-Encoding:   $file[encoding] ";

                      $contents .= "Content-Location: $file[filepath] ";

                      $contents .= " ";

                      $contents .= $file['filecont'];

                      $contents .= " ";

                  }

                  $contents .=   "--{$this->boundary}-- ";

                  return $contents;

              }

           

              function MakeFile($filename){

                  $contents = $this->GetFile();

                  $fp = fopen($filename, 'w');

                  fwrite($fp,   $contents);

                  fclose($fp);

              }

           

              function GetMimeType($filename){

                  $pathinfo = pathinfo($filename);

                  switch ($pathinfo['extension']) {

                      case 'htm': $mimetype = 'text/html'; break;

                      case 'html': $mimetype = 'text/html'; break;

                      case 'txt': $mimetype = 'text/plain'; break;

                      case 'cgi': $mimetype = 'text/plain'; break;

                      case 'php': $mimetype = 'text/plain'; break;

                      case 'css': $mimetype = 'text/css'; break;

                      case 'jpg': $mimetype = 'image/jpeg'; break;

                      case 'jpeg': $mimetype = 'image/jpeg'; break;

                      case 'jpe': $mimetype = 'image/jpeg'; break;

                      case 'gif': $mimetype = 'image/gif'; break;

                      case 'png': $mimetype = 'image/png'; break;

                      default:   $mimetype = 'application/octet-stream'; break;

                  }

                  return $mimetype;

              }

          }

          ?>

          點(diǎn)評(píng):這種方法的缺點(diǎn)是不支持批量生成下載,因?yàn)橐粋€(gè)頁面只能有一個(gè)header,(無論遠(yuǎn)程使用還是本地生成聲明header頁面只能輸出一個(gè)header),即使你循環(huán)生成,結(jié)果還是只有一個(gè)word生成(當(dāng)然你可以修改上面的方式來實(shí)現(xiàn))

          2.純HTML格式寫入word

          原理:

          利用ob_start把html頁面先存儲(chǔ)起來(解決一下頁面多個(gè)header問題,可以批量生成),然后在寫入doc文檔內(nèi)容利用

          代碼:

          1

          2

          3

          4

          5

          6

          7

          8

          9

          10

          11

          12

          13

          14

          15

          16

          17

          18

          19

          20

          21

          22

          23

          24

          25

          26

          27

          <?php

          class word

          {

          function start()

          {

          ob_start();

          echo '<html   xmlns:o="urn:schemas-microsoft-com:office:office"

          xmlns:w="urn:schemas-microsoft-com:office:word"

          xmlns="   ">';

          }

          function save($path)

          {

           

          echo "</html>";

          $data = ob_get_contents();

          ob_end_clean();

           

          $this->wirtefile   ($path,$data);

          }

           

          function wirtefile ($fn,$data)

          {

          $fp=fopen($fn,"wb");

          fwrite($fp,$data);

          fclose($fp);

          }

          }

          1

          2

          3

          4

          5

          6

          7

          8

          9

          10

          11

          12

          13

          14

          15

          16

          17

          18

          19

          20

          21

          22

          23

          24

          25

          26

          27

          28

          29

          30

          31

          $html = '

          <table   width=600 cellpadding="6" cellspacing="1" bgcolor="#336699">

          <tr   bgcolor="White">

            <td>PHP10086</td>  

            <td><a   href="m" target="_blank" > m</a></td>

          </tr>  

          <tr   bgcolor="red">

            <td>PHP10086</td>  

            <td><a   href=" " target="_blank" ></a></td>

          </tr>  

          <tr   bgcolor="White">

            <td   colspan=2 >

            PHP10086<br>  

            <img   src="/themes/WPortal-Blue/images/logo.gif">

            </td>  

          </tr>  

          </table>  

          ';

           

          //批量生成

          for($i=1;$i<=3;$i++){  

              $word = new word();

              $word->start();  

              //$html   = "aaa".$i;

              $wordname = 'PHP淮北的個(gè)人網(wǎng)站--PHP10086   '.$i.".doc";

              echo $html;

              $word->save($wordname);  

              ob_flush();//每次執(zhí)行前刷新緩存

              flush();  

          }

          個(gè)人點(diǎn)評(píng):這種方法效果最好,原因有兩個(gè):

          第一代碼比較簡潔,很容易理解,第二種支持批量生成word(這個(gè)很重要)

          第三支持完整的html代碼

          看一下效果:

                  word.png

          生成了三個(gè)word文檔:并且內(nèi)容支持完整的html代碼顯示,第三種方法強(qiáng)烈推薦



          MySQL快速入門MySQL數(shù)據(jù)庫連接
          MySQL基本用法MySQL日期數(shù)據(jù)類型使用總結(jié)
          MySQL的使用方法MySQL數(shù)據(jù)庫導(dǎo)出和導(dǎo)入的方法
          MySQL字符集及MySQL編碼轉(zhuǎn)換一些MySQL的常見問題
          怎樣在MySQL中直接儲(chǔ)存圖片安裝 MySQL與MySQL GUI Tools
          MySQL實(shí)用命令MySQL配置文件示例
          MySQL集群解決方案MySQL使用手冊(cè)
          十分鐘MySQL入門教程關(guān)于MySql的SQL語言-MySQL入門教程
          信息發(fā)布:廣州名易軟件有限公司 http://www.jetlc.com
          • 勁爆價(jià):
            不限功能
            不限用戶
            1998元/年

          • 微信客服

            <output id="r87xx"></output>
          1. 
            
            <mark id="r87xx"><thead id="r87xx"><input id="r87xx"></input></thead></mark>
              • 亚洲婷婷日日综合婷婷噜噜噜 | 国产在线精品婷婷 | 音彰先锋成人无码视频 | 色老板在线永久免费网站 | 国产精品午夜在线观看 | 欧美黄色一区二区三区 | 大香蕉青青 | 亚洲看片 | av影音先锋一区 AV在线无码观看 av在线一区二区 | 日本色播网址 |