Как стать автором
Обновить

Легкость бытия: Antiword, reST

Время на прочтение 3 мин
Количество просмотров 7.9K
Как при подготовке документов избежать медлительных офисных пакетов, пользоваться любимым текстовым редактором, отделить содержание от представления, обеспечить высокую читаемость и прозрачность документов для VCS, легко сравнивать версии текстов?

Недавно комментировал извещение о выходе нового LibreOffice и решил, что следует оформить соображения более связно.

Представим, что мы получили по e-mail документ в формате MS Word, должны его заполнить/поправить и распечатать/переслать дальше. Скорее всего, этот документ нам будут периодически присылать снова и/или нам нужно будет на его основе и далее готовить обновленные тексты.

Проблема №1: на нашем GNU/Linux, естественно, отсутствует MS Office, а OpenOffice и его наследники страшно тормозят (особенно если мы привыкли к Vim и др. легким программам).

Проблема №2: очень часто верстка входящих файлов — катастрофическая (отбивка пробелами, форматирование без стилей и т.д.), так что приходится практически переделывать весь документ, чтобы нормально внести изменения.

Проблема №3: формат MS Word непрозрачен, а OpenDocument условно-прозрачен. Другими словами, даже открытый формат невозможно легко читать простыми средствами: нужно разархивировать кучку файлов и парсить XML. А значит, и для контроля версий такие документы непрозрачны.

Что же делать? На помощь приходит юникс-вей в виде простых программок, работающих с простым текстом.

Инструменты

  • Antiword — утилита для извлечения текста из формата MS Word;
  • reStructuredText (reST) — очень простой и достаточно мощный язык семантической разметки текста;
  • Docutils tools (rst2latex, rst2html, rst2odt, rst2xml) и rst2pdf — утилиты для экспорта текста из reST в распространенные форматы для верстки, веба и печати;
  • Бонус: rst2a (онлайн-конвертер с API!)

Workflow

  1. antiword читает .doc и выводит простой текст;
  2. редактируем простой текст;
  3. утилиты rst2* конвертируют текст из reST-разметки в произвольные форматы.
Например, мы получили документ в формате MSWord, хотим что-то быстро исправить в нем и сохранить себе текст/шаблон на будущее:

$ antiword смета.doc > смета.txt
$ vim смета.txt
$ rst2pdf смета.txt -o смета.pdf

Готово, красивый PDF можно посмотреть и распечатать. Кстати, удобно в процессе редактирования исходника держать PDF открытым, скажем, в Okular. При экспорте из reST в PDF (а это можно делать и автоматически) Okular сразу же обновит содержимое, не сбрасывая открытую страницу. Получается почти моментальный предпросмотр. И там же (в Okular) можно распечатать документ.

Я обычно добавляю еще файл стилей (один и тот же более-менее подходит всем документам, можно расширить под конкретный документ). Стили для rst2pdf пишутся в JSON (см. документацию).

Результаты


Проблема №1 решена: используются кроссплатформенные, лёгкие, быстрые и ненавязчивые средства.

Проблема №2 решена: кошмарная исходная верстка сразу убивается, вместо нее мы получаем сам текст, который уже без труда можно привести в reST-порядок. При необходимости результат можно довести в LaTeX'е.

Проблема №3 решена: все документы (и стили) полностью прозрачны для VCS и могут быть прочитаны без спецсредств. В точности как программный код. Значит, если что-то изменилось в официальном документе, вы всегда будете иметь читабельные диффы для любых дат. Для входящих можно тоже хранить исходные версии (желательно вывод antiword), чтобы диффать именно их и легко переносить только изменения в правильные reST-файлы.

Примечания

  • Предлагаемый стек утилит заткнет не все дыры. Прелесть юникс-вея в том, что вы можете спокойно заменять компоненты.
  • Между прочим, Antiword «is able to convert Word documents to plain text, to PostScript, to PDF and to XML/DocBook», так что в ряде случаев можно даже избежать reST.
  • Эта заметка написана на reST и экспортирована через rst2html. ;-)
  • UPD: спасибо ingspree за поправку: правильно не ReST, а reST :)
Теги:
Хабы:
+21
Комментарии 72
Комментарии Комментарии 72

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн