X

MS Word 2007 и PHP

Задача, вытащить весь текст содержащийся в документе (docx, MS Office 2007), в переменную на PHP.

Информация:

1. Документы от 2007 офиса, представляют собой набор xml файлов в zip-архиве, который можно открыть архиватором.
2. Кроме файлов, там содержаться, также и сопутствующие файлы, типа картинок.
3. XML файл в котором содержиться документ, называется document.xml, находится в папке /word

Реализация:

1. Подключаем библиотеку для работы с zip-архивами php_zip.dll, для этого в файле php.ini нужно убрать символ комментария (;) в начале строки:

extension=php_zip.dll

2. Теперь можно использовать такую функцию

function get_plain_text($sfilename) {  
  $c=false;  
  $zip = new ZipArchive(); // создаем объект для работы с зипом  
  if ($zip->open($sfilename) !== true) echo 'Не могу открыть zip-архив';  
  else {  
    $dirname="docx/unzip".strftime("%Y%M%D%H%M%S");  
    $zip->extractTo($dirname);//распаковываем  в временную папку , которую после удалим  
    $filename = $dirname."/word/document.xml"; //путь к документу  
    $handle = fopen($filename, "r");  
    $c=strip_tags(fread($handle, filesize($filename)));//считываем все из файла и убираем  XML-теги  
    fclose($handle);  
    $zip->close();  
    full_del_dir ($dirname);//функция, которая удаляет не пустой каталог, её нужно писать самостоятельно  
  }  
  return $c;   
}

Теперь можно использовать

    if ($text=get_plain_text('./mydoc.docx')) echo $text;

Всё просто 🙂

Категории: PHP Бездна
Тэги: office