最详细的php使用com读取word文件,并且解决读取过程中乱码问题,doc/docx都适用,适用于thinkphp-庆云php-

{site_name}

{site_name}

🌜 搜索

最详细的php使用com读取word文件,并且解决读取过程中乱码问题,doc/docx都适用,适用于thinkphp

▥ 𝄐 0

   一,确认php版本,最好是高于5.6

二,将以下两行代码放入php.ini中并且重启

 
  1. //这个是开启扩展
  2. extension=php_com_dotnet.dll
  3. //这个是COM扩展里自带的,只需将前面的;去掉就可以了
  4. com.allow_dcom = true

简单的六步读取法

<?php
//header("content-type:text/html;charset=utf-8");
//1、建立一个指向新COM组件的索引

$word = new COM("word.application") or die("Can't start Word!");

//2、显示目前正在使用的Word的版本号

echo "Loading Word, v. {$word->Version}";

//3、把它的可见性设置为0(假),如果要使它在最前端打开,使用1(真)

$word->Visible = 0;

//4、打开一个文档

$word->Documents->open(dirname(__FILE__)."/aa1.doc");

//5、读取文档内容

$test= $word->ActiveDocument->content->Text;

//6、输出文档内容

echo $test;

下边为更详细的方法

三,自己编写一个三方类库文件,phpcom.php,如下:

  1. <?php
  2. class PHPcom {
  3. /**
  4. * 返回word内容,和字数(字符数),版本
  5. * @param $url
  6. * @return array
  7. */
  8. public static function php_com($url)
  9. {
  10. $word = new COM("word.application") or die("Unable to instantiate Word");
  11. //打开路径为URL的word,doc或docx都可以
  12. $word->Documents->OPen($url);
  13. //读取内容
  14. $test= $word->ActiveDocument->content->Text;
  15. //统计字数
  16. $num = strlen($test);
  17. //解决读取过程中乱码问题
  18. $content= iconv('GB2312', 'UTF-8', $test);
  19. //查看版本
  20. $word_wersion = $word->Version;
  21. //是否要打开文件,0代表否,1代表是
  22. $word->Visible = 0;
  23. //关闭word句柄
  24. $word->Quit();
  25. //释放对象
  26. $word = null;
  27. return [
  28. 'num'=>$num/2,
  29. 'word_wersion'=>$word_wersion,
  30. 'content'=>$content
  31. ];
  32. }
  33. }
  34. ?>

四,在thinkphp的根目录下找到vendor文件夹,没有就自己创建一个

五,在vendor文件夹下创建phpcom文件夹,然后把phpcom.php文件放进去

ps:至此,准备工作就做好了,接下来我们就可以在常用函数文件(common.php)里写一个自定义函数了

六,在公共函数类common.php中写一个方便调用的方法

  1. function read_com_word($url=''){
  2. //加载类库文件
  3. vendor("phpcom.phpcom");
  4. //剪切url目录(这是我自己的目录问题)
  5. $url = strstr($url,"uploads");
  6. $url = 'http://localhost/'.$url;
  7. //然后静态调用php_com方法就可以了
  8. $result = PHPcom::php_com($url);
  9. return $result;
  10. }

七:注意,url有一个地方需要修改,就是你们传进来的url千万不能是绝对地址,不能是D:\WWW\这种,,一定要自己框架的路由地址,比如localhost/..,不然会出现错误,因为用绝对地址读取word内容,只能读取一次,然后word就会被锁定,然后就无法读取了,下面附上本人血的经验

八,现在php使用com读取word的流程就走完了,够详细吧?如果上面有什么不到位的地方,还请各路大神指点一下。