1 min read

php:html代码导出到DOC小记

客户想网站富文本编辑器里的内容(表格和文字)导出到DOC文件。

网上方法若干,用了其中一种,直接生成OFFICE能够认出的文件。内容还是原来HTML。原来的头尾去掉。

直接放代码(UTF-8编码):

<?php
////////////////////////////////////////////////////////////////
//word类,转自网络
//原类地址:http://blog.sina.com.cn/s/blog_552073080100ihjw.html
////////////////////////////////////////////////////////////////
class Word{
	function start(){
		ob_start();	//打开输出控制缓冲
		echo '<html xmlns:o="urn:schemas-microsoft-com:office:office"';
		echo 'xmlns:w="urn:schemas-microsoft-com:office:word"';
		echo 'xmlns="http://www.w3.org/TR/REC-html40">';
            //我后加的代码
		echo '<head>';
            //解决UTF-8乱码
		echo '<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> ';  
            //设置打开视图为页面,不设置的话,OFFICE会以网页视图打开,
		echo '<xml><w:WordDocument><w:View>Print</w:View></xml> ';						
		echo '</head>';
	}
	function save($path){
		echo "</html>";
		$data=ob_get_contents();	//返回输出缓冲区的内容
		ob_end_clean();				//清空缓冲区并关闭输出缓冲
		$this->writeFile($path,$data);	//将缓冲区内容写入word
	}
	function writeFile($fn,$data){
		$fp=fopen($fn,"wb+");
		fwrite($fp,$data);
		fclose($fp);
	}
}
//下面的不是转载的了

////////////////
//从数据库读取数据,具体步骤略过,返回数组 $archives_list
/////////////////


//////////////////////////
//开始输出数据
$word=new Word();  
$word->start(); 
//开始生成DOC文件

//下面的STYLE。是OFFICE默认的表格属性,黑框实线
//生成的表格都用这个默认样式
//下面的STYLE多了个空格。故意写的,不然高亮插件有问题
?>
    <st yle>
    table{border-collapse:collapse;border:none;mso-border-alt:solid windowtext .5pt;mso-yfti-tbllook:1184;mso-padding-alt:0cm 5.4pt 0cm 5.4pt}
     tr{mso-yfti-irow:0;mso-yfti-firstrow:yes}
     td{width:142.0pt;border:solid windowtext 1.0pt;mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt}
    </style>

<?php
///////////////////
//开始循环输出HTML内容
//////////////////

	//循环输出
	foreach ($archives_list as $k=>$b)
	{
?>
<table>
      <tr>
         <td>文章标题</td>
         <td>作者</td>
	 <td>发布时间</td>
         <td>内容</td>
      </tr>
      <tr>
         <td><?php echo $archives_list['title'];?></td>
         <td><?php echo $archives_list['author'];?></td>
         <td><?php echo $archives_list['time'];?></td>
        <td><p><?php echo $archives_list['content'];?></p></td>
      </tr>
</table>


<?php
//这里是OFFICE的换页内容,循环输出一篇文章就下一页
//最后一个循环不到下一页
if ( count($msg_arr)-1 != $k)
		{
?>

<p><span lang=EN-US>&nbsp;&nbsp; </span></p>

<span lang=EN-US style='font-size:12.0pt;font-family:宋体;mso-bidi-font-family:
宋体;mso-ansi-language:EN-US;mso-fareast-language:ZH-CN;mso-bidi-language:AR-SA'><br
clear=all style='mso-special-character:line-break;page-break-before:always'>
</span>

<p><span lang=EN-US><o:p>&nbsp;</o:p></span></p>



<?php
		}
//////////////////
//循环结束
//////////////////
	}



//以上内容会保存在WORD文件中  
$word->save('demo.doc');//保存word并且结束.  
//以下内容正常输出在页面文件中  
header("Content-type:text/html;charset=utf-8");  
echo 'demo.doc生成成功,<a href="demo.doc">点击下载</a><br>'; 

比网上的多了UTF-8编码,改正了生成的文件空白的错误 添加了默认视图模式 添加了默认表格样式 添加了下一页代码

…传闻还有个图片也导入的代码(多文件,WORD引用外部图片),暂时用不到就没折腾了。。