Линукс, Vim, LaTeX, полезные скрипты, визуализация данных, численные расчёты, немного ФП

20080609

antiodt: просмотр документов OpenOffice в виде простого текста

Для тех, кто не любит запускать офисные приложения для того лишь, чтобы просто прочесть файл в формате ворда, есть antiword, есть wvunrtf, и pdftotext для RTF и PDF соответственно). Вот только для открытого и всеми любимого ODT (OpenDocument, формат OpenOffice) — такой радости нет. o3read их не берёт.

В общем, запускать мне OpenOffice лениво, в AbiWord тоже не так уж шустр, так что написал себе скрипт-однострочник (antiodt):
#!/bin/sh
unzip -p "$1" content.xml | \
xmlstarlet sel -N text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" \
  -T -t -m '//text:p' -v . -n | less
Поскольку документ ODT это zip-архив, а внутри весь текст в виде XML лежит в content.xml, то отсавалось только выбрать содержимое текстовых элементов (забив на всё форматирование, кроме разбиения на абзацы). При этом для разбора XML используется утилита xmlstarlet. Все имеющиеся в наличие у меня ODT документы теперь в мгновение ока можно прочитать так:
$ antiodt документ.odt
Идею почерпнул здесь. Кто велосипед уже изобретал — не жалуйтесь.

Дополнение 2009-09-23: Если необходимо перевести документ из ODT в plain text с частичным сохранением форматирования, то можно ещё использовать скрипт odt2txt.py. Скрипт посложней, он преобразует ODT в текст с разметкой Markdown.

P.S. View OpenOffice files as plain text (эта заметка по-английски)

9 коммент.:

  1. :) интересный метод, во FreeBSD правда выглядит чуть иначе вместо xmlstarlet надо написать просто xml, ну и поставить сам пакет textproc/xmlstarlet.
    Очень понравилось, буду пиарить.

    ОтветитьУдалить
  2. sudo apt-get install xmlstarlet

    А вообще -- очень круто.
    У меня даже небольшая идейка появилась: создать эдакий odt-quickviewer (графический), чтоб не ждать, пока OO стартанет, а быстренько заглянуть внутрь.

    ОтветитьУдалить
  3. 2Игорь

    ...и следом отправить полученный код в Evince. :)

    ОтветитьУдалить
  4. Зря смётесь - идея насчёт просмотрщика документов очень здравая. Вот бы её ещё реализовать.

    А antiodt понравился, буду пользовать. Хотя по работе больше приходится работать с antiword.

    ОтветитьУдалить
  5. Спасибо всем за комментарии!

    2f_andrey:
    xmlstarlet часто алиасят как xml (так даже в документации к нему советуется и во всех их примерах так), но в Debian он по умолчанию не заалиасен, поэтому написал в скрипте имя полностью, чтобы у всех работало…

    2Игорь, 2заятсъ:
    Идея быстрого просмотрщика — хорошая. И код в Evince отослать тоже бы не мешало :) Я сам впрочем в ближайшее время не смогу этим заняться… Да и для просмотрщика надо наверное всё таки хоть какое-то форматирование сохранять… А идея хорошая.

    ОтветитьУдалить
  6. 2virens
    Товарищи реализовали (http://opendocumentfellowship.com/odfviewer), но как-то криво. У меня оно начало ругаться на несовместимость sha-подписей каких-то сторонних архивов. Хотя, бета 2, оно понятно.

    ОтветитьУдалить
  7. Этот комментарий был удален администратором блога.

    ОтветитьУдалить
  8. Добавил ссылку на odt2txt (конвертер ODT в Markdown).

    ОтветитьУдалить
  9. Дописываем в .vimrc

    " .odt файлы. Необходим скрипт antiodt (спасибо jetxee!)
    au BufReadPre *.odt set ro
    au BufReadPre *.odt set hlsearch!
    au BufReadPost *.odt %!antiodt "%"

    предварительно положив скрипт в /bin или ~/bin, если последняя прописана в $PATH.
    Читаем .odt-файлы в vim'е без проблем.

    ОтветитьУдалить