2013-11-12 4 views
0

Я могу извлечь текстовое содержимое файла Docx, я хочу сделать то же самое для файла Doc. Я попытался использовать тот же код, но ничего не мог прочитать. Думаю, причина в том, что «форматы Doc не являются архивами на молнии». Вот код:Есть ли способ читать файлы Doc на PHP, подобные Docx?

function readDocx ($filePath) 
    { 


     // Create new ZIP archive 

     $zip = new ZipArchive; 
     $dataFile = 'word/document.xml'; 
     // Open received archive file 
     if (true === $zip->open($filePath)) { 
      // If done, search for the data file in the archive 
      if (($index = $zip->locateName($dataFile)) !== false) { 
       // If found, read it to the string 
       $data = $zip->getFromIndex($index); 
       // Close archive file 
       $zip->close(); 

       // Load XML from a string 
       // Skip errors and warnings 

       $xml = DOMDocument::loadXML($data, LIBXML_NOENT | LIBXML_XINCLUDE | LIBXML_NOERROR | LIBXML_NOWARNING); 

       $contents = explode('\n',strip_tags($xml->saveXML())); 
       $text = ''; 
       foreach($contents as $i=>$content) { 
        $text .= $contents[$i]; 
       } 
       return $text; 
      } 
      $zip->close(); 
     } 
     return ""; 
    } 

Пожалуйста, дайте мне знать, если есть способ извлечения текстового содержимого из файла Doc.

+0

Нет, это не так просто, потому что это не является XML-документ, но «Слово Binary Document» есть читатели, там для PHP, который прочитал их, но это та же сложность, как чтение PDF. Таким образом, вам придется использовать предварительно созданную библиотеку. См. Это сообщение: http://stackoverflow.com/questions/7358637/reading-doc-file-in-php – TiMESPLiNTER

+0

Это всегда приятно, прежде чем публиковать вопрос. Скорее всего, вы не сталкиваетесь с такой проблемой ... – Havelock

+0

Спасибо, TiMESPLiNTER проверит некоторые библиотеки. Спасибо, Хавелок, я сделал Google об этом и не смог найти точное решение. Вот почему я задал вопрос. Иногда даже подобные вопросы не получают этой видимости и, что самое главное, когда вы спешите что-то прибить, вы делаете такие ошибки. –

ответ

4

Ну, наконец, я получил ответ, поэтому подумал, что должен поделиться им здесь. Я просто не использовал COM-объектов:

$DocumentPath="C:/xampp/htdocs/abcd.doc"; 

$word = new COM("word.application") or die("Unable to instantiate application object"); 

$wordDocument = new COM("word.document") or die("Unable to instantiate document object"); 

$word->Visible = 0; 

$wordDocument = $word->Documents->Open($DocumentPath); 

$HTMLPath = substr_replace($DocumentPath, 'html', -3, 3); 

$wordDocument->SaveAs($HTMLPath, 3); 

$wordDocument = null; 

$word->Quit(); 

$word = null; 

readfile($HTMLPath); 

unlink($HTMLPath); 
+1

Как жаль, что это работает только в Windows, потому что в версии PHP Ubuntu нет COM-класса. : ((( –

+0

@ 尤川豪 Вы нашли что-нибудь для Ubuntu? –

+0

Еще нет ...: (((((((( –

Смежные вопросы