用pHpWord.php.ini等函數(shù)讀取WORD的話

2023-11-30    分類: 網(wǎng)站建設

如果使用FILE、OpEN等函數(shù)直接讀取WORD,經(jīng)常會出現(xiàn)亂碼。最初,我不得不使用COM。這是我在新 WORD 中讀取和存儲的簡單文件

一、 首先打開pHp.ini的COM,操作如下

1.

extension=php_com_dotnet.dll

2.

com.allow_dcom = true

二、開啟后,可以嘗試以下操作

1、為新的 COM 組件創(chuàng)建索引

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

2、顯示當前使用的Word版本號

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

3、設置其可見性為0(),如果想在前端打開就用1(true)

$word->Visible = 0;

4、打開文檔

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

5、閱讀文檔內容

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

6、輸出文檔內容

echo $test;

更多pHp中讀寫WORD文檔的代碼總結如下:

1.使用COM組件

Version}
”;? //?把它的可見性設置為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->Text;? echo?$test;? echo?“
”;? //將文檔中需要換的變量更換一下? $test=str_replace(”<{變量}>”,”這是變量”,$test);? echo?$test;? $word->Documents->Add();? //?在新文檔中添加文字? $word->Selection->TypeText(”$test”);? //把文檔保存在目錄中? $word->Documents[1]->SaveAs(”d:/myweb/comtest.doc”);? //?關閉與COM組件之間的連接? $word->Quit();? ?>?

2.是更簡潔的方法,可以跨平臺

以下是詳細代碼:

.word.php

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">';
  }
  function save($path){
    echo "";
    $data=ob_get_contents(); //返回輸出緩沖區(qū)的內容
    ob_end_clean(); //清空緩沖區(qū)并關閉輸出緩沖
    $this->writeFile($path,$data); //將緩沖區(qū)內容寫入word
  }
  function writeFile($fn,$data){
    $fp=fopen($fn,"wb+");
    fwrite($fp,$data);
    fclose($fp);
  }
}

.php

start();
//以下內容會保存在WORD文件中,可以使用HTML標簽
?>
 

直接用php創(chuàng)建word文檔

作者:axgle

如果你打開data.doc,看到了這里的介紹,則說明word文檔創(chuàng)建成功了。

不論是在什么操作系統(tǒng)下,使用本方法都可以直接用pHp生成word文檔。絕對不是吹牛! 就算是沒有安裝word,也能夠生成word文件。 當然了,生成的word文件可以用word,wps或者其他軟件打開。

使用方法:
首先用$word->start()表示要生成word文件了。 然后你可以輸出任何的HTML代碼,不論是從文件讀過來再寫到這里, 還是直接在這里輸出HTML,都沒有關系。

等你輸出完畢后,用$word->save($path)方法,其中$path是你想 生成的word文件的名稱(可以給出完整的路徑).當你使用了$word->save() 方法后,這后面的任何輸出都和word文件沒有關系了,也就是說word的生成 工作就完成了。之后就和你平常使用php的方式一樣拉。隨便你輸出什么東西, 都直接在瀏覽器里輸出,而不會寫到word里面去。

這是本人想到的一個很有意思的方法,它的實現(xiàn)方法出人意料的簡單,并且避免 了對windows環(huán)境的依賴。
哈哈,很有意思吧?享受它吧!


save("data.doc");//保存word并且結束. //以下內容正常輸出在頁面文件中 header("Content-type:text/html;charset=utf-8"); echo 'data.doc生成成功,請到目錄下查看
'; ?>

3.通過Web ApI讀取和顯示word文檔

可以使用ApI??,可以看到寫應用的ApI

申請一個就可以用了,可以看看...免費版有限制

比如,如果你支持它,你可以參考我。我申請了,所以你可以使用它...

保存本地html文件,打開后直接使用

詞相似

w3c//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">



測試百會格格遠程ApI


上傳文件:

4.pHp 導出Word文檔的原理和例子

原理

一般導出doc文檔有兩種方式,一種是使用com作為php的擴展庫安裝在服務器上,然后創(chuàng)建一個com并調用其方法。安裝好的服務器可以調用一個名為word的com。生成word文檔,但是我不推薦這種方式php導出word格式數(shù)據(jù)的實現(xiàn)代碼,因為執(zhí)行效率比較低(我測試過,在word客戶端執(zhí)行代碼的時候服務端居然會打開一個)。理想的com應該沒有接口,在后臺進行數(shù)據(jù)轉換。這個效果會好一些,但是這些擴展一般是需要收費的。

第二種方法是使用pHp將我們的doc文檔的內容直接寫入一個后綴為doc的文件中。使用該方法不需要依賴第三方擴展,執(zhí)行效率高。

word本身的功能還是很強大的,可以打開html格式的文件,并且可以保留格式,即使后綴是doc也能正常識別和打開。這為我們提供了便利。但有一個問題。 html格式文件中的圖片只有一個地址,真實圖片保存在別處。也就是說,如果將 HTML 格式寫入 doc,則 doc 將不包含圖片。那么我們如何創(chuàng)建一個包含圖片的doc文檔呢?我們可以使用非常接近html的mht格式。

mht 格式與 html 非常相似,只是在 mht 格式中,來自外部鏈接的文件,例如圖片和 CSS 會被編碼和存儲。因此,單個 mht 文件可以保存一個網(wǎng)頁中的所有資源。當然,相比html,它的尺寸會更大。

mht格式可以用word識別嗎?我把一個網(wǎng)頁保存為mht,然后修改后綴為doc,然后用word打開,OK,word也能識別mht文件,顯示圖片。

好的,既然doc可以識別mht,接下來就是考慮如何將圖片放入mht。由于html代碼中圖片的地址寫在img標簽的src屬性中,所以只要提取html代碼中的src屬性值,就可以得到圖片地址。當然有可能你得到的是相對路徑,沒關系,加上URL前綴,改成絕對路徑即可。有了圖片地址,我們就可以通過函數(shù)獲取圖片文件的具體內容,然后調用函數(shù)將文件內容編碼成代碼,最后插入到mht文件的合適位置。

最后,我們有兩種方法可以將文件發(fā)送到客戶端。一種是先在服務器端生成一個doc文檔,然后記錄doc文檔的地址,最后通過(":xx.doc");就可以讓客戶端下載這個doc了。另一種是直接發(fā)送html請求,修改html協(xié)議部分,將其-type設置為/doc,set-to,后跟文件名,發(fā)送html協(xié)議后,直接將文件內容發(fā)送到 ,你也可以讓客戶端下載這個doc文件。

實現(xiàn)

通過以上原理的介紹,相信大家應該對實現(xiàn)過程有了初步的了解。下面我將給出一個導出功能。該函數(shù)可以將 HTML 代碼導出為帶有 3 個參數(shù)的 mht 文檔。 2 為可選參數(shù)

:要轉換的HTML代碼

:如果HTML代碼中的圖片地址都是相對路徑,那么這個參數(shù)就是HTML代碼中缺失的絕對路徑。

:是否去除HTML代碼中的超鏈接

返回值為mht的文件內容,可以保存為后綴為doc的文件

這個函數(shù)的主要作用其實就是分析HTML代碼中的所有圖片地址,依次下載。獲取到圖片內容后,調用類將圖片添加到mht文件中。具體的添加細節(jié)封裝在類中。

/**
?* 根據(jù)HTML代碼獲取word文檔內容
?* 創(chuàng)建一個本質為mht的文檔,該函數(shù)會分析文件內容并從遠程下載頁面中的圖片資源
?* 該函數(shù)依賴于類MhtFileMaker
?* 該函數(shù)會分析img標簽,提取src的屬性值。但是,src的屬性值必須被引號包圍,否則不能提取
?* 
?* @param string $content HTML內容
?* @param string $absolutepath 網(wǎng)頁的絕對路徑。如果HTML內容里的圖片路徑為相對路徑,那么就需要填寫這個參數(shù),來讓該函數(shù)自動填補成絕對路徑。這個參數(shù)最后需要以/結束
?* @param bool $isEraseLink 是否去掉HTML內容中的鏈接
* by www.365jz.com
?*/
function getWordDocument( $content , $absolutepath = "" , $isEraseLink = true )
{
??? $mht = new MhtFileMaker();
??? if ($isEraseLink)
??????? $content = preg_replace('/(\s*.*?\s*)<\/a>/i' , '$1' , $content);?? //去掉鏈接
       $images = array();
??? $files = array();
??? $matches = array();
??? //這個算法要求src后的屬性值必須使用引號括起來
??? if ( preg_match_all('//i',$content ,$matches ) )
??? {
??????? $arrpath = $matches[1];
??????? for ( $i=0;$iAddContents("tmp.html",$mht->GetMimeType("tmp.html"),$content);
??? for ( $i=0;$iAddContents($files[$i],$mht->GetMimeType($image),$imgcontent);
??????? }
??????? else
??????? {
??????????? echo "file:".$image." not exist!
"; ??????? } ??? } ??? return $mht->GetFile(); }

使用方法:

$fileContent = getWordDocument($content,"https://www.365jz.com/Music/etc/");
$fp = fopen("test.doc", 'w');
fwrite($fp, $fileContent);
fclose($fp);

其中$變量應該是HTML源代碼,下面的鏈接應該是可以在HTML代碼中填寫圖片相對路徑的URL地址

注意在使用這個函數(shù)之前,需要先包含這個類,這個類可以幫助我們生成Mht文檔。


Description:? The class can make .mht file.
***********************************************************************/
class MhtFileMaker{
??? var $config = array();
??? var $headers = array();
??? var $headers_exists = array();
??? var $files = array();
??? var $boundary;
??? var $dir_base;
??? var $page_first;
??? function MhtFile($config = array()){
??? }
??? function SetHeader($header){
??????? $this->headers[] = $header;
??????? $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 = $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' . $filepath;
??????? $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' . $filepath;
??????????????????? $this->AddFile("$dir/$filename", $filepath, NULL);
??????????????? }
??????????? }
??????? }
??????? closedir($handle_dir);
??? }
??? function AddFile($filename, $filepath = NULL, $encoding = NULL){
??????? if ($filepath == NULL) {
??????????? $filepath = $filename;
??????? }
??????? $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.');
??????? } //www.365jz.com
??????? $contents = implode("\r\n", $this->headers);
??????? $contents .= "\r\n";
??????? $contents .= "MIME-Version: 1.0\r\n";
??????? $contents .= "Content-Type: multipart/related;\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 $contents;
??? }
??? 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'; break;
??????????? case 'html': $mimetype = 'text/html'; break;
??????????? case 'txt': $mimetype = 'text/plain'; break;
??????????? case 'cgi': $mimetype = 'text/plain'; break;
??????????? case 'php': $mimetype = 'text/plain'; break;
??????????? case 'css': $mimetype = 'text/css'; break;
??????????? case 'jpg': $mimetype = 'image/jpeg'; break;
??????????? case 'jpeg': $mimetype = 'image/jpeg'; break;
??????????? case 'jpe': $mimetype = 'image/jpeg'; break;
??????????? case 'gif': $mimetype = 'image/gif'; break;
??????????? case 'png': $mimetype = 'image/png'; break;
??????????? default: $mimetype = 'application/octet-stream'; break;
??????? }
??????? return $mimetype;
??? }
}
?>

上面討論了如何通過mht文件從pHp中導出doc格式。這種方法可以解決一個難題,就是在導出的doc文件中包含圖片。當然,如果你想包含更多的內容,比如CSS樣式表php導出word格式數(shù)據(jù)的實現(xiàn)代碼,你只需要使用正則表達式來分析HTML代碼中的link標簽并提取css即可。然后讀取樣式文件的地址并進行編碼,最后添加到 mht 文件中。

以上就是本文的全部內容,希望大家喜歡。

新聞標題:用pHpWord.php.ini等函數(shù)讀取WORD的話
文章來源:http://www.muchs.cn/news23/297773.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、搜索引擎優(yōu)化、用戶體驗響應式網(wǎng)站、移動網(wǎng)站建設全網(wǎng)營銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設