Задача получения текста из .doc файла возникает нередко и способов решения масса - это и COM объекты под Windows, и сухие реализации на чистом php (хорошие и не очень), и разнообразные библиотеки для всех мыслимых и нет языков программирования. Однако хакерский подход, как известно, заключается в максимальной простоте, универсальности и обходе большинства проблем в лоб:). Поэтому воспользуемся готовым проверенным временем
Antiword - консольная утилита для получения plain текста из файлов Microsoft Word версий 2, 6, 7, 97, 2000, 2002 и 2003. Иными словами, с новым форматом docx Antiword не работает, и если есть необходимость интегрирации с ним, придется искать другое решение. Я писал парсер doc файлов для загрузки данных в БД, поэтому мою задачу утилита решает на ура.
Итак, скачать Antiword можно на официальном сайте - есть версии для Windows и Linux. Качаем архив, распаковываем его в C:\Antiword\ (я буду рассматривать Windows, Linux команды аналогичны), запускаем консоль. Тестим!
C:\Antiword\antiword.exe C:\myDocument.doc
Собственно все уже работает - неплохо для одной простой команды, верно? Здесь
C:\myDocument.doc
это документ, текст которого нас интересует. При таком вызове команды результат работы будет полностью выведен в консоль, причем не всегда в приятной кодировке. Чтобы настроить вывод текста в кодировке cp1251 (стандартная кодировка для кириллицы в Windows), необходимо модифицировать команду следующим образом:C:\Antiword\antiword.exe -m cp1251.txt C:\myDocument.doc
Теперь текст выводится в кодировке cp1251. Все равно крякозябры? Да у вас не настроена консоль, батенька! Исправляем установкой шрифта терминала Lucida Console и выполнением команды:
chcp 1251
Теперь все ок? Так-то. Хорошо, но как вывести plain текст в файл? О, да вы еще и о перенаправлении стандартного вывода в файл не слышали:)
C:\Antiword\antiword.exe -m cp1251.txt C:\myDocument.doc >> C:\plainText.txt
Теперь текст из вордовского файла
C:\myDocument.doc
магическим образом помещен в txt документ C:\plainText.txt
.В процессе конвертирования Antiword старается сохранить форматирование текста максимально близко к оригиналу. В частности, он вставляет переносы строк в соответствии со стандартной шириной страницы, изменить это поведение можно указанием параметра -w, который принимает количество символов в одной строке. Указав 0, мы отключаем режим переноса строк и все абзацы будут помещены в одну длинную строку:
C:\Antiword\antiword.exe -m cp1251.txt -w 0 C:\myDocument.doc >> C:\plainText.txt
В случае необходимости использования функционала Antiword в своей программе, просто вызывайте эту команду с подстановкой нужных параметров и считывайте результат из текстового файла или стандартного вывода. В случае php:
$fileContent = shell_exec("C:\Antiword\antiword.exe -m cp1251.txt -w 0 C:\myDocument.doc");
Таким образом, в переменную
$fileContent
будет загружен полный текст документа в виде строки. Для вашего языка программирования воспользуйтесь аналогичной функцией вызова системных команд.И не забывайте принцип KISS - Keep It Simple, Stupid:)