Свою предыдущую статью на Хабре я написал в 2016 году, и она была посвящена подборку команды стартапа. Примерно в это время я погрузился в историю создания собственного продукта и стало не до создания контента. Так получилось, что в 2020 году мне пришлось сделать свою реализацию библиотеки для создания, редактирования и индексирования документов формата Microsoft Word, стандартизированного как OOXML WordprocessingML и получившего в свое время расширение файла .docx. Именно ей и хотелось бы поделиться с сообществом.

Так исторически сложилось, что ядро нашего проекта работает на стеке технологий Microsoft, а для формирования Word'овских документов мы использовали [тогда] открытую библиотеку DocX, ныне принадлежащую коммерческой компании и распространяемой на платной основе. Причем коммерциализация произошла ровно в момент всеобщего перехода на .Net Core, а последняя свободная версия библиотеки новую платформу не поддерживала. Нужна была замена.

Конечно, никто в здравом уме не берет спецификацию и не делает такие вещи с нуля добровольно. К сожалению, оказалось, что и dotnet-порт Apache POI, и разработанная Microsoft Open XML SDK — очень низкоуровневые библиотеки с очень высоким порогом входа, требующие глубокого знания формата, а код оригинальной библиотеки DocX оказался просто живым кошмаром, совершенно не поддающимся рефакторингу (так что я полностью понимаю желание новых владельцев брать за нее деньги, поскольку психотерапевт — удовольствие не дешевое).

Ко всему этому оригинальная DocX была полна труднообъяснимых багов с единицами измерения, непредсказуемой работой с таблицами и другими проблемами, которые нужно было решать. Поэтому пришлось вооружиться спецификацией 2007 года и сделать для себя что-то работающее.

Этой библиотекой, лицензируемой под лицензией Apache 2.0 и хотелось бы поделиться

Wordroller реализует основные функции, присутствовавшие в оригинальной DocX: работа с абзацами текста, стилями, таблицами и изображениями, поиск и замена текста.

Не были реализованы менее востребованные вещи, такие как автофигуры, функциональность режима правок (она не была полноценно реализована и в оригинальной библиотеке, особенно для таблиц).

Буду рад, если уже неновая библиотека облегчит кому-то жизнь, особенно в небольших отделах автоматизации и стартапах.

Комментарии (17)