首页 > 开发 > PHP > 正文

PHP生成word文档的三种实现方式

2024-05-04 22:51:13
字体:
来源:转载
供稿:网友

最近工作遇到关于生成word的问题

现在总结一下生成word的三种方法。

btw:好像只要是标题带PHP的貌似点击量都不是很高(哥哥我标题还是带上PHP了),不知道为什么,估计博客园上net技术大牛比较多吧,如果把java,.net,php比作程序员的女友,那么java是Oracle门下的大家闺秀,.net微软旗下的名门望族,PHP则是草根门下的山村野姑,这让我等PHP草民闷骚男情何以堪情何以堪。。牢骚发完了,正式写吧

PHP生成word原理

利用windows下面的 com组件 利用PHP将内容写入doc文件之中

具体实现:

利用windows下面的 com组件

原理:com作为PHP的一个扩展类,安装过office的服务器会自动调用word.application的com,可以自动生成文档,PHP官方文档手册:http://www.php.net/manual/en/class.com.php

使用官方实例:

<?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('/<a/s*.*?/s*>(/s*.*?/s*)<//a>/i' , '$1' , $content); //去掉链接  $images = array(); $files = array(); $matches = array(); //这个算法要求src后的属性值必须使用引号括起来 if ( preg_match_all('/<img[./n]*?src/s*?=/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) == 'http://')    {     //绝对链接,不加前缀    }    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();}            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表