<delect id="sj01t"></delect>
  1. <em id="sj01t"><label id="sj01t"></label></em>
  2. <div id="sj01t"></div>
    1. <em id="sj01t"></em>

            <div id="sj01t"></div>
            php語言

            PHP生成Word文檔的方法

            時間:2025-02-24 03:03:00 php語言 我要投稿
            • 相關推薦

            PHP生成Word文檔的方法

              首先,請確保在你的Windows系統中已經安裝并配置好了一個典型的WAMP環境。由于Interop純粹是一個Windows的特性,我們將在Windows平臺下搭建Apache和PHP,下面,小編為大家搜索整理了PHP生成Word文檔的方法,希望能給大家帶來幫助!更多精彩內容請及時關注我們應屆畢業生考試網!

              PHP生成word原理

              利用windows下面的 com組件

              利用PHP將內容寫入doc文件之中

              具體實現:

              利用windows下面的 com組件

              原理:com作為PHP的一個擴展類,安裝過office的服務器會自動調用word.application的com,可以自動生成文檔,PHP官方文檔手冊:http://www.php.net/manual/en/class.com.php

              使用官方實例:

              // starting word

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

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

              //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;

              ?>

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

              利用PHP將內容寫入doc文件之中

              這個方法又可以分為兩種方法

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

              純HTML格式寫入word

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

              /**

              * 根據HTML代碼獲取word文檔內容

              * 創建一個本質為mht的文檔,該函數會分析文件內容并從遠程下載頁面中的圖片資源

              * 該函數依賴于類MhtFileMaker

              * 該函數會分析img標簽,提取src的屬性值。但是,src的屬性值必須被引號包圍,否則不能提取

              *

              * @param string $content HTML內容

              * @param string $absolutePath 網頁的絕對路徑。如果HTML內容里的圖片路徑為相對路徑,那么就需要填寫這個參數,來讓該函數自動填補成絕對路徑。這個參數最后需要以/結束

              * @param bool $isEraseLink 是否去掉HTML內容中的鏈接

              */

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

              {

              $mht = new MhtFileMaker();

              if ($isEraseLink)

              $content = preg_replace('/

              $images = array();

              $files = array();

              $matches = array();

              //這個算法要求src后的屬性值必須使用引號括起來

              if ( preg_match_all('/

              {

              $arrPath = $matches[1];

              for ( $i=0;$i

              {

              $path = $arrPath[$i];

              $imgPath = trim( $path );

              if ( $imgPath != "" )

              {

              $files[] = $imgPath;

              if( substr($imgPath,0,7) == 'http://')

              {

              //絕對鏈接,不加前綴

              }

              else

              {

              $imgPath = $absolutePath.$imgPath;

              }

              $images[] = $imgPath;

              }

              }

              }

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

              for ( $i=0;$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!

              ";

              }

              }

              return $mht->GetFile();

              }

              這個函數的主要功能其實就是分析HTML代碼中的所有圖片地址,并且依次下載下來。獲取到了圖片的內容以后,調用MhtFileMaker類,將圖片添加到mht文件中。具體的添加細節,封裝在MhtFileMaker類中了。

              使用方法:遠程調用

              url= http://www.***.com;

              $content = file_get_contents($url);

              $fileContent = getWordDocument($content,"http://www.jb51.net/Music/etc/");

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

              fwrite($fp, $fileContent);

              fclose($fp);

              其中,$content變量應該是HTML源代碼,后面的鏈接應該是能填補HTML代碼中圖片相對路徑的URL地址

              本地生成調用:

              header("Cache-Control: no-cache, must-revalidate");

              header("Pragma: no-cache");

              $wordStr = 'http://www.jb51.net/';

              $fileContent = getWordDocument($wordStr);

              $fileName = iconv("utf-8", "GBK", ‘jb51' . '_'. $intro . '_' . rand(100, 999));


            更多PHP相關文章推薦:

            1.phpStorm 2017特色

            2.php如何禁用eval函數

            3.10個技巧優化PHP程序Laravel 5框架

            4.如何選擇PHP版本

            5.編譯chm格式PHP手冊的方法

            6.PHPMYADMIN簡明安裝教程

            7.數據庫設計和訪問數據庫的' PHP 代碼中出現的五個常見問題

            8.php內核分析之全局變量

            9.php實現讀取手機客戶端瀏覽器的類

            10.自學PHP方法

              header("Content-Type: application/doc");

              header("Content-Disposition: attachment; filename=" . $fileName . ".doc");

              echo $fileContent;

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

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

              Class: Mht File Maker

              Version: 1.2 beta

              Date: 02/11/2007

              Author: Wudi

              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 = 'http://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 = 'http://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) {


            更多PHP相關文章推薦:

            1.phpStorm 2017特色

            2.php如何禁用eval函數

            3.10個技巧優化PHP程序Laravel 5框架

            4.如何選擇PHP版本

            5.編譯chm格式PHP手冊的方法

            6.PHPMYADMIN簡明安裝教程

            7.數據庫設計和訪問數據庫的 PHP 代碼中出現的五個常見問題

            8.php內核分析之全局變量

            9.php實現讀取手機客戶端瀏覽器的類

            10.自學PHP方法

              return FALSE;

              } else {

              return TRUE;

              }

              }

              function GetFile(){

              $this->CheckHeaders();

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

              exit ('No file was added.');

              }

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

              $contents .= "\r\n";

              $contents .= "MIME-Version: 1.0\r\n";

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

              $contents .= "\tboundary=\"{$this->boundary}\";\r\n";

              $contents .= "\ttype=\"" . $this->files[0]['mimetype'] . "\"\r\n";

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

              $contents .= "\r\n";

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

              $contents .= "\r\n";

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

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

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

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

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

              $contents .= "\r\n";

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

              $contents .= "\r\n";

              }

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

              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;

              }

              }

              ?>

              點評:這種方法的'缺點是不支持批量生成下載,因為一個頁面只能有一個header,(無論遠程使用還是本地生成聲明header頁面只能輸出一個header),即使你循環生成,結果還是只有一個word生成(當然你可以修改上面的方式來實現)

              2.純HTML格式寫入word

              原理:

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

              代碼:

              class word

              {

              function start()

              {

              ob_start();

              echo '

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

              xmlns="http://www.w3.org/TR/REC-html40">';

              }

              function save($path)

              {

              echo "";

              $data = ob_get_contents();

              ob_end_clean();

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

              }

              function wirtefile ($fn,$data)

              {

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

              fwrite($fp,$data);

              fclose($fp);

              }

              }

              //批量生成

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

              $word = new word();

              $word->start();

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

              $wordname = 'PHP淮北的個人網站--PHP10086.com'.$i.".doc";

              echo $html;

              $word->save($wordname);

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

              flush();

              }

              個人點評:這種方法效果最好,原因有兩個:

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

              第三支持完整的html代碼

              生成了三個word文檔:并且內容支持完整的html代碼顯示,第三種方法強烈推薦


            更多PHP相關文章推薦:

            1.phpStorm 2017特色

            2.php如何禁用eval函數

            3.10個技巧優化PHP程序Laravel 5框架

            4.如何選擇PHP版本

            5.編譯chm格式PHP手冊的方法

            6.PHPMYADMIN簡明安裝教程

            7.數據庫設計和訪問數據庫的 PHP 代碼中出現的五個常見問題

            8.php內核分析之全局變量

            9.php實現讀取手機客戶端瀏覽器的'類

            10.自學PHP方法

            【PHP生成Word文檔的方法】相關文章:

            如何在word文檔生成目錄07-26

            word文檔分欄的方法08-12

            php生成word最簡單的例子04-05

            word生成epub的方法05-06

            PHP生成Excel報表的方法05-24

            PHP生成樹的方法介紹08-09

            php生成WML頁面方法08-05

            word文檔加密方法分享02-15

            快速打開Word文檔的方法03-28

            <delect id="sj01t"></delect>
            1. <em id="sj01t"><label id="sj01t"></label></em>
            2. <div id="sj01t"></div>
              1. <em id="sj01t"></em>

                      <div id="sj01t"></div>
                      黄色视频在线观看