如何使用php获取word页数文档的页数

PHP把网页保存为word文件的三种方法
字体:[ ] 类型:转载 时间:
最近工作遇到关于生成word的问题,现在总结一下生成word的三种方法的相关资料,需要的朋友可以参考下
一、PHP生成word的两种思路或原理
1.利用windows下面的 com组件2.利用PHP将内容写入doc文件之中具体实现方法如下。
二、利用windows下面的com组件
原理:com作为PHP的一个扩展类,安装过office的服务器会自动调用word.application的com,可以自动生成文档,PHP官方文档手册:http://www.php.net/manual/.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 =?&个人建议:com实例后的方法都需要查找官方文档才知道什么意思,编辑器没有代码提示,非常不方便,另外这个效率也不是很高,不推荐使用
三、利用PHP将内容写入doc文件之中这个方法又可以分为两种方法
1.生成mht格式(和HTML很相似)写入word2.纯HTML格式写入word
1)、生成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[] = $imgP&&&&&&&&&&&&&&&&if( substr($imgPath,0,7) == 'http://')&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&//绝对链接,不加前缀&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&else&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&$imgPath = $absolutePath.$imgP&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&$images[] = $imgP&&&&&&&&&&&&}&&&&&&&&}&&&&}&&&&$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();}
这个函数的主要功能其实就是分析HTML代码中的所有图片地址,并且依次下载下来。获取到了图片的内容以后,调用MhtFileMaker类,将图片添加到mht文件中。具体的添加细节,封装在MhtFileMaker类中了。
使用方法1:远程调用 代码如下:$url= http://www.***.$content = file_get_contents($url);$fileContent = getWordDocument($content,"/Music/etc/");$fp = fopen("test.doc", 'w');fwrite($fp, $fileContent);fclose($fp);其中,$content变量应该是HTML源代码,后面的链接应该是能填补HTML代码中图片相对路径的URL地址
其中,$content变量应该是HTML源代码,后面的链接应该是能填补HTML代码中图片相对路径的URL地址
使用方法2:本地生成调用 代码如下:header("Cache-Control: no-cache, must-revalidate"); header("Pragma: no-cache"); $wordStr = 'PHP教程网站--jb51.net'; $fileContent = getWordDocument($wordStr); $fileName = iconv("utf-8", "GBK", ‘PHP教程' . '_'. $intro . '_' . rand(100, 999));&& header("Content-Type: application/doc"); header("Content-Disposition: filename=" . $fileName . ".doc"); echo $fileC
注意,在使用这个函数之前,您需要先包含类MhtFileMaker,这个类可以帮助我们生成Mht文档。
代码如下:&?php/***********************************************************************Class:&&&&&&& Mht File MakerVersion:&&&&& 1.2 betaDate:&&&&&&&& 02/11/2007Author:&&&&&& Wudi &wudicgi@yahoo.de&Description:& The class can make .mht file.***********************************************************************/class MhtFileMaker{&&&&var $config = array();&&&&var $headers = array();&&&&var $headers_exists = array();&&&&var $files = array();&&&&var $&&&&var $dir_&&&&var $page_&&&&function MhtFile($config = array()){&&&&}&&&&function SetHeader($header){&&&&&&&&$this-&headers[] = $&&&&&&&&$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 = $&&&&&&&&}&&&&}&&&&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' . $&&&&&&&&$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' . $&&&&&&&&&&&&&&&&&&&&$this-&AddFile("$dir/$filename", $filepath, NULL);&&&&&&&&&&&&&&&&}&&&&&&&&&&&&}&&&&&&&&}&&&&&&&&closedir($handle_dir);&&&&}&&&&function AddFile($filename, $filepath = NULL, $encoding = NULL){&&&&&&&&if ($filepath == NULL) {&&&&&&&&&&&&$filepath = $&&&&&&&&}&&&&&&&&$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) {&&&&&&&&&&&&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/\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 $&&&&}&&&&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';&&&&&&&&&&&&case 'html': $mimetype = 'text/html';&&&&&&&&&&&&case 'txt': $mimetype = 'text/plain';&&&&&&&&&&&&case 'cgi': $mimetype = 'text/plain';&&&&&&&&&&&&case 'php': $mimetype = 'text/plain';&&&&&&&&&&&&case 'css': $mimetype = 'text/css';&&&&&&&&&&&&case 'jpg': $mimetype = 'image/jpeg';&&&&&&&&&&&&case 'jpeg': $mimetype = 'image/jpeg';&&&&&&&&&&&&case 'jpe': $mimetype = 'image/jpeg';&&&&&&&&&&&&case 'gif': $mimetype = 'image/gif';&&&&&&&&&&&&case 'png': $mimetype = 'image/png';&&&&&&&&&&&&default: $mimetype = 'application/octet-stream';&&&&&&&&}&&&&&&&&return $&&&&}}?&
点评:这种方法的缺点是不支持批量生成下载,因为一个页面只能有一个header,(无论远程使用还是本地生成声明header页面只能输出一个header),即使你循环生成,结果还是只有一个word生成(当然你可以修改上面的方式来实现)
2.纯HTML格式写入word
利用ob_start把html页面先存储起来(解决一下页面多个header问题,可以批量生成),然后在写入doc文档内容利用
代码: 代码如下:&?phpclass 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.jb51.net" target="_blank" &http://www.jb51.net&/a&&/td& &/tr& &tr bgcolor="red"& &&&td&PHP10086&/td& &&&td&&a href="http://www.jb51.net" target="_blank" &http://www.jb51.net&/a&&/td& &/tr& &tr bgcolor="White"& &&&td colspan=2 & &&PHP10086&br& &&最靠谱的PHP技术分享网站 &&&img src="http://www.jb51.net/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教程网站--jb51.net'.$i.".doc"; &&&&echo $ &&&&$word-&save($wordname); &&&&ob_flush();//每次执行前刷新缓存 &&&&flush(); }个人点评:这种方法效果最好,原因有三个:
第一代码比较简洁,很容易理解第二是支持批量生成word(这个很重要)第三是支持完整的html代码
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具在PHP中读取和写入WORD文档的代码
阅读:1625次&&&时间: 00:00:00&&
复制代码 代码如下:&?
// 建立一个指向新COM组件的索引
$word = new COM(”word.application”) or die(”Can't start Word!”);
// 显示目前正在使用的Word的版本号
//echo “Loading Word, v. {$word-&Version}&br&”;
// 把它的可见性设置为0(假),如果要使它在最前端打开,使用1(真)
// to open the application in the forefront, use 1 (true)
//$word-&Visible = 0;
//打?一个文档
$word-&Documents-&OPen(”d:\myweb\muban.doc”);
//读取文档内容
$test= $word-&ActiveDocument-&content-&T
echo “&br&”;
//将文档中需要换的变量更换一下
$test=str_replace(”&{变量}&”,”这是变量”,$test);
$word-&Documents-&Add();
// 在新文档中添加文字
$word-&Selection-&TypeText(”$test”);
//把文档保存在目录中
$word-&Documents[1]-&SaveAs(”d:/myweb/comtest.doc”);
// 关闭与COM组件之间的连接
$word-&Quit();
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
Copyright &
All Rights Reserved推荐这篇日记的豆列
······PHP(209)
总结下本人在日常工作中使用php操作word的一些实战。
&方法一:利用。也即利用word提供的本地api,所有只适用于windows系统上。
利用com连接word,经常无法预期运行成功,目前也不知道是什么原因,暂时靠运气吧。
方法二:利用catdoc。catdoc是linux上的工具,需要自行安装配置。
更多catdoc的功能,请查阅catdoc文档。
由于catdoc是linux的工具,所以上面的这段代码只能运行在linux服务器上,而已必须安装了catdoc。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1607039次
积分:20946
积分:20946
排名:第270名
原创:567篇
转载:680篇
评论:137条
文章:17篇
阅读:3454
文章:23篇
阅读:1532
(10)(8)(21)(12)(31)(12)(9)(9)(13)(23)(7)(25)(10)(17)(13)(9)(8)(9)(3)(5)(11)(17)(23)(37)(30)(14)(60)(19)(25)(40)(35)(51)(41)(66)(34)(35)(50)(50)(22)(23)(23)(32)(28)(35)(19)(23)(39)(30)(12)(22)(1)(18)(8)(3)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(2)(1)(2)(3)(2)(1)(1)(1)(1)(1)关于php获取word文档页数的问题 - 开源中国社区
当前访客身份:游客 [
当前位置:
你好,想跟你请教个问题:您好,刚才拜读过您写的文章,最近要做一个功能,要用php写一个方法,能够读取word文档的页数,一点儿思路没有,看到您写的文章后,特来请教,希望能指教一下方法或者思路,谢谢!!
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &小A
共有4个答案
<span class="a_vote_num" id="a_vote_num_
& $word = new COM(&word.application&) or die(&Unable to instantiate Word&);
& $word-&Documents-&Open( &D:\word2.doc& );
& $num_pages = $word-&ActiveDocument-&ComputeStatistics( $wdStatisticPages ); &
& echo $num_
--- 共有 3 条评论 ---
我知道是什么意思了,但是我发现调用这个open函数非常慢不知道怎么回事。
(3年前)&nbsp&
$wdStatisticPages 请问这个变量是什么?
(3年前)&nbsp&
$wdStatisticPages
(3年前)&nbsp&
<span class="a_vote_num" id="a_vote_num_
使用com组建,一定要满足3条件。有时候你用php手册上的例子都不成功,说明不满足条件。
在使用COM类之前,确保下面3个条件:
1.启用组件:regsvr32 组件dll
2. 允许调用COM:php.ini中com.allow_dcom =true
3. 账户有权限访问组件
问题主要是条件3,你要设置 组件管理器 word的访问属性
<span class="a_vote_num" id="a_vote_num_
引用来自“hsxshr”的答案& $word = new COM(&word.application&) or die(&Unable to instantiate Word&);
& $word-&Documents-&Open( &D:\word2.doc& );
& $num_pages = $word-&ActiveDocument-&ComputeStatistics( $wdStatisticPages ); &
& echo $num_ 有没有其它的办法,有没有办法获取纸张大小的方法?
<span class="a_vote_num" id="a_vote_num_
PHP实现获取Word文件的页数,可以通过PageOffice插件打开文档 通过VBA实现获取打开的当前文本的总页数 。
更多开发者职位上
有什么技术问题吗?
类似的话题

我要回帖

更多关于 php 获取word文档页数 的文章

 

随机推荐