PHP生成word原理php
具體實現:css
利用windows下面的 com組件html
原理:com做爲PHP的一個擴展類,安裝過office的服務器會自動調用word.application的com,能夠自動生成文檔,PHP官方文檔手冊:http://www.php.net/manual/en/class.com.php算法
使用官方實例:windows
<?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文件之中服務器
這個方法又能夠分爲兩種方法app
生成mht格式(和HTML很類似)寫入wordless
這個函數的主要功能其實就是分析HTML代碼中的全部圖片地址,而且依次下載下來。獲取到了圖片的內容之後,調用MhtFileMaker類,將圖片添加到mht文件中。具體的添加細節,封裝在MhtFileMaker類中了。編輯器
使用方法:遠程調用
其中,$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)); header("Content-Type: application/doc"); header("Content-Disposition: attachment; filename=" . $fileName . ".doc"); echo $fileContent;
注意,在使用這個函數以前,您須要先包含類MhtFileMaker,這個類能夠幫助咱們生成Mht文檔。
點評:這種方法的缺點是不支持批量生成下載,由於一個頁面只能有一個header,(不管遠程使用仍是本地生成聲明header頁面只能輸出一個header),即便你循環生成,結果仍是隻有一個word生成(固然你能夠修改上面的方式來實現)
2.純HTML格式寫入word
原理:
利用ob_start把html頁面先存儲起來(解決一下頁面多個header問題,能夠批量生成),而後在寫入doc文檔內容利用
代碼:
<?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="http://www.w3.org/TR/REC-html40">'; } 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); } } ? $html = ' <table width=600 cellpadding="6" cellspacing="1" bgcolor="#336699"> <tr bgcolor="White"> <td>PHP10086</td> <td><a href="http://www.php10086.com" target="_blank" >http://www.php10086.com</a></td> </tr> <tr bgcolor="red"> <td>PHP10086</td> <td><a href="http://www.php10086.com" target="_blank" >http://www.php10086.com</a></td> </tr> <tr bgcolor="White"> <td colspan=2 > PHP10086<br> 最靠譜的PHP技術博客分享網站 <img src="http://www.php10086.com/wp-content/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淮北的我的網站--PHP10086.com'.$i.".doc"; echo $html; $word->save($wordname); ob_flush();//每次執行前刷新緩存 flush(); }
我的點評:這種方法效果最好,緣由有兩個:
第一代碼比較簡潔,很容易理解,第二種支持批量生成word(這個很重要)
第三支持完整的html代碼
生成了三個word文檔:而且內容支持完整的html代碼顯示,第三種方法強烈推薦
以上就是本文的所有內容,但願對你們的學習有所幫助。