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代码显示,第三种方法强烈推荐
以上就是本文的所有内容,但愿对你们的学习有所帮助。