最詳細的php使用com讀取word文件,並且解決讀取過程中亂碼問題,doc/docx都適用,適用於thinkphp,laravel應該也可以

一,首先要確認php版本,最好是高於5.6

二,將以下兩行代碼放入php.ini中並且重啓

//這個是開啓擴展
extension=php_com_dotnet.dll
//這個是COM擴展裏自帶的,只需將前面的;去掉就可以了
com.allow_dcom = true

三,自己編寫一個三方類庫文件,phpcom.php,如下:

<?php
	class PHPcom {
        /**
         * 返回word內容,和字數(字符數),版本
         * @param $url
         * @return array
         */
		public static function php_com($url)
        {
            $word = new COM("word.application") or die("Unable to instantiate Word");

            //打開路徑爲URL的word,doc或docx都可以
			$word->Documents->OPen($url);

			//讀取內容
			$test= $word->ActiveDocument->content->Text;

			//統計字數
			$num = strlen($test);

            //解決讀取過程中亂碼問題
			$content= iconv('GB2312', 'UTF-8', $test);

			//查看版本
			$word_wersion = $word->Version;

			//是否要打開文件,0代表否,1代表是
			 $word->Visible = 0;

			//關閉word句柄
			$word->Quit();

			//釋放對象
			$word = null;

			return [
			    'num'=>$num/2,
                'word_wersion'=>$word_wersion,
                'content'=>$content
            ];
        }
	}
?>

四,在thinkphp的根目錄下找到vendor文件夾,沒有就自己創建一個

五,在vendor文件夾下創建phpcom文件夾,然後把phpcom.php文件放進去

ps:至此,準備工作就做好了,接下來我們就可以在常用函數文件(common.php)裏寫一個自定義函數了

六,在公共函數類common.php中寫一個方便調用的方法

function read_com_word($url=''){
    //加載類庫文件
    vendor("phpcom.phpcom");
    //剪切url目錄(這是我自己的目錄問題)
    $url = strstr($url,"uploads");
    $url = 'http://localhost/'.$url;
    //然後靜態調用php_com方法就可以了
    $result = PHPcom::php_com($url);

    return $result;
}

七:注意,url有一個地方需要修改,就是你們傳進來的url千萬不能是絕對地址,不能是D:\WWW\這種,,一定要自己框架的路由地址,比如localhost/..,不然會出現錯誤,因爲用絕對地址讀取word內容,只能讀取一次,然後word就會被鎖定,然後就無法讀取了,下面附上本人血的經驗

八,現在php使用com讀取word的流程就走完了,夠詳細吧?如果上面有什麼不到位的地方,還請各路大神指點一下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章