Пакетная обработка документов RTF в OpenOffice с помощью bash и OOBasic

Итак передо мной лежат 90 документов в формате RTF и их нужно после обработки, парсинга внести в базу данных. В случае с обычными DOC файлами всё просто, их прекрасно открывает и отображает antiword. Но мой unrtf отказался выводить кирилицу и переконвертирования не помогали. Пришлось научить OpenOffice конвертировать передаваемые ему документы в формат HTML, который затем легко можно распарсить. Итак, необходимо добавить макрос с параметром: меню Сервис → Макросы → Управление макросами → OpenOffice.org Бейсик, там найти Мои макросы → StandardModule1 и перейти на редактирование кода этого модуля. В код модуля нужно добавить функцию

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 документы

Комментариев 0
Нужна авторизация с помощью
Об авторе
Илья Илья

меня можно найти тут

Антиплагиат СОГУ - качественная проверка на плагиат.
Совсем недорого заказать суши для всех клиентов.