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

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

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

一、 首先打開(kāi)pHp.ini的COM,操作如下

1.

extension=php_com_dotnet.dll

2.

com.allow_dcom = true

二、開(kāi)啟后,可以嘗試以下操作

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

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

2、顯示當(dāng)前使用的Word版本號(hào)

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

3、設(shè)置其可見(jiàn)性為0(),如果想在前端打開(kāi)就用1(true)

$word->Visible = 0;

4、打開(kāi)文檔

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

5、閱讀文檔內(nèi)容

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

6、輸出文檔內(nèi)容

echo $test;

更多pHp中讀寫(xiě)WORD文檔的代碼總結(jié)如下:

1.使用COM組件

Version}
”;? //?把它的可見(jiàn)性設(shè)置為0(假),如果要使它在最前端打開(kāi),使用1(真)? //?to?open?the?application?in?the?forefront,?use?1?(true)? //$word->Visible?=?0;? //打?一個(gè)文檔? $word->Documents->Open(”d:\myweb\muban.doc”);? //讀取文檔內(nèi)容? $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”);? //?關(guān)閉與COM組件之間的連接? $word->Quit();? ?>?

2.是更簡(jiǎn)潔的方法,可以跨平臺(tái)

以下是詳細(xì)代碼:

.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ū)的內(nèi)容
    ob_end_clean(); //清空緩沖區(qū)并關(guān)閉輸出緩沖
    $this->writeFile($path,$data); //將緩沖區(qū)內(nèi)容寫(xiě)入word
  }
  function writeFile($fn,$data){
    $fp=fopen($fn,"wb+");
    fwrite($fp,$data);
    fclose($fp);
  }
}

.php

start();
//以下內(nèi)容會(huì)保存在WORD文件中,可以使用HTML標(biāo)簽
?>
 

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

作者:axgle

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

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

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

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

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


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

3.通過(guò)Web ApI讀取和顯示word文檔

可以使用ApI??,可以看到寫(xiě)應(yīng)用的ApI

申請(qǐng)一個(gè)就可以用了,可以看看...免費(fèi)版有限制

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

保存本地html文件,打開(kāi)后直接使用

詞相似

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



測(cè)試百會(huì)格格遠(yuǎn)程ApI


上傳文件:

4.pHp 導(dǎo)出Word文檔的原理和例子

原理

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

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

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

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

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

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

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

實(shí)現(xiàn)

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

:要轉(zhuǎn)換的HTML代碼

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

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

返回值為mht的文件內(nèi)容,可以保存為后綴為doc的文件

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

/**
?* 根據(jù)HTML代碼獲取word文檔內(nèi)容
?* 創(chuàng)建一個(gè)本質(zhì)為mht的文檔,該函數(shù)會(huì)分析文件內(nèi)容并從遠(yuǎn)程下載頁(yè)面中的圖片資源
?* 該函數(shù)依賴于類MhtFileMaker
?* 該函數(shù)會(huì)分析img標(biāo)簽,提取src的屬性值。但是,src的屬性值必須被引號(hào)包圍,否則不能提取
?* 
?* @param string $content HTML內(nèi)容
?* @param string $absolutepath 網(wǎng)頁(yè)的絕對(duì)路徑。如果HTML內(nèi)容里的圖片路徑為相對(duì)路徑,那么就需要填寫(xiě)這個(gè)參數(shù),來(lái)讓該函數(shù)自動(dòng)填補(bǔ)成絕對(duì)路徑。這個(gè)參數(shù)最后需要以/結(jié)束
?* @param bool $isEraseLink 是否去掉HTML內(nèi)容中的鏈接
* 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();
??? //這個(gè)算法要求src后的屬性值必須使用引號(hào)括起來(lái)
??? 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);

其中$變量應(yīng)該是HTML源代碼,下面的鏈接應(yīng)該是可以在HTML代碼中填寫(xiě)圖片相對(duì)路徑的URL地址

注意在使用這個(gè)函數(shù)之前,需要先包含這個(gè)類,這個(gè)類可以幫助我們生成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;
??? }
}
?>

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

以上就是本文的全部?jī)?nèi)容,希望大家喜歡。

新聞標(biāo)題:用pHpWord.php.ini等函數(shù)讀取WORD的話
文章來(lái)源:http://www.bm7419.com/news23/297773.html

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

廣告

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

營(yíng)銷型網(wǎng)站建設(shè)