Итак передо мной лежат 90 документов в формате RTF и их нужно после обработки, парсинга внести в базу данных. В случае с обычными DOC файлами всё просто, их прекрасно открывает и отображает antiword. Но мой unrtf отказался выводить кирилицу и переконвертирования не помогали. Пришлось научить OpenOffice конвертировать передаваемые ему документы в формат HTML, который затем легко можно распарсить. Итак, необходимо добавить макрос с параметром: меню Сервис → Макросы → Управление макросами → OpenOffice.org Бейсик, там найти Мои макросы → Standard → Module1 и перейти на редактирование кода этого модуля. В код модуля нужно добавить функцию
Sub document_to_html( fname )
' формируем имя файла в соотвествии с форматом OOo
url = ConvertToURL( fname )
dim args(0) as new com.sun.star.beans.PropertyValue
args(0).Name = "Hidden"
args(0).Value = True
document = StarDesktop.loadComponentFromURL(url , "_blank", 0, args)
' формируем новое имя, старое -4 символа + .html
fname = Left( fname, Len( fname ) - 4 ) + ".html"
url = ConvertToURL( fname )
dim args1(2) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value = url
args1(1).Name = "FilterName"
' формат документа для сохранения
args1(1).Value = "HTML (StarWriter)"
' разрешаем перезапись
args1(2).Name = "Overwrite"
args1(2).Value = true
' сохраняем открытый документ
document.storeAsURL(url, args1())
' закрываем документ
document.close( True )
End Sub
В принципе скрипт можно сохранить и без OOo в файле .openoffice.org2/user/basic/Standard/Module1.xba но придётся его сначала отэскейпить и ведь без OOo он всё равно бесполезен
Затем переходим в консоли в директорию с обрабатываемыми файлами и пишем скрипт на bash
for f in *rtf; do
/usr/bin/oowriter -invisible "macro:///Standard.Module1.document_to_html(`pwd`/$f)";
done
Вот в принципе и всё, bash скрипты перебирая документы запускает OOo с приказом запуска OOo Basiс макроса и передает макрому аргумент - полное имя файла
Макрос создаёт "невидимый" (Hidden:true) документ загружает в него переданный файл через специально сформированную ссылку, затем экспортирует документ в формат HTML. Не самый валидный HTML скажу вам, но парсить гораздо легче чем RTF
Следует обратить внимание на параметры запуска OOo:
- invisible - невидимый режим (удобно для пакетной обработки)
- macro:///Standard.Module1.document_to_html - запуск макроса в соотвествии с путём его нахождения
- (`pwd`/$f) - параметр для макроса, полное имя файла
В результате выполнения скрипта, в директории где находились документы, появятся ещё и HTML документы