PureDocx — как мы создали свой Ruby гем

Дата публикации:

Короткая предыстория: мы работали над проектом для компании, занимающейся автострахованием. Ее клиенты были заинтересованы в возможности моментальной отправки фотографий с места ДТП (а точнее — в генерации отчетов из фотографий с их описанием). Вопрос: в каком формате генерировать отчет? PDF? Но его нельзя редактировать. А если фотография нуждается, например, в текстовых комментариях? В итоге мы решили запилить свой Ruby гем, который бы полностью удовлетворял условиям поставленной задачи.

Для чего нужен этот гем? Для создания docx-файла с динамическим добавлением текста, картинок и таблиц. Изначально мы рассмотрели готовые решения — gem docx и gem sablon. Однако в каждом из них были выявлены существенные недостатки.

Есть ли альтернатива?

Гем docx предоставляет довольно гибкий функционал для работы с docx файлами. В частности, с точки зрения редактирования текста и таблиц. В чем же подводные камни? В громоздких методах добавления текста и (самое главное) — невозможности размещения картинок.

Гем Sablon формирует контент документа согласно созданному шаблону. Все просто: сначала осуществляется разметка (в Microsoft Word или в LibreOffice). А далее по указанным меткам размещается текст и/или таблицы. Гем прекрасно подходит для создания однотипных примитивных документов, в которых динамически меняются данные, но не разметка. Он также содержит самодельные конструкции итераторов (each) и разветвления (if). Однако вместо них гораздо проще и практичнее использовать методы Ruby. И самое главное (опять-таки) гем Sablon не поддерживает размещение картинок.

Казалось бы, нашу проблему мог решить один pull request на GitHub. В нем была реализована поддержка изображений. Но она оказалась довольно сырой. Проблема в следующем: при вставке картинки в документ, ее размеры фиксируются. Поэтому, если мы хотим поменять изображение, новый образец других размеров неизменно растягивается. Или сжимается. По высоте или ширине. В общем, это нам не пойдет.

Решение

И решили мы избавиться от всех проблем одним махом. То есть написать свою библиотеку. Изначально планировался предельно простой функционал: вставка неотформатированного текста и добавление картинок с возможностью масштабирования.

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

Наконец, нам удалось совместить структуру документов, созданных с помощью PureDocx gem, с Microsoft Office 2016. Это потребовало определенных усилий, но оно того стоило. Ruby гем состоялся.

Вот как это выглядит

puredocx

Пример сформированного документа.

Документация по проекту на нашей ветке GitHub.

Пользуйтесь на здоровье!

Мы Крым Диджитал

С 2015 года мы предоставляем полный цикл услуг мобильной и веб-разработки клиентам из различных отраслей и разных стран.

Подпишись
на наши новости

Контакты пресс-службы

+ 7 (926) 118-80-32

WhatsApp, Viber, Telegram

Давайте обсудим Ваш проект

или свяжитесь с нами по почте projects@crimeadigital.ru

Нажимая кнопку «Отправить», вы даете согласие на обработку персональных данных

Прошел день карьеры в СевГУ

Резидент технопарка, компания Крым Диджитал, приняла участие в Дне Карьеры в СевГУ, который прошел 17 мая. Мероприятие длилось 3 часа. Компанией заинтересовались  более 35 студентов, которым была важна информация о прохождении практики, бесплатные курсы Академии и вакансии, не требующие опыта работы. Руководитель разработки компании выступил с презентацией и ответил на все вопросы, которые так волнуют студентов — как начать свою карьеру в ИТ? Есть ли возможность совмещать учебу с работой? Кем я смогу стать? Как понять, кем я хочу работать? И многие другие.

Резидент технопарка, компания Крым Диджитал, приняла участие в Дне Карьеры в СевГУ, который прошел 17 мая.

Мероприятие длилось 3 часа. Компанией заинтересовались  более 35 студентов, которым была важна информация о прохождении практики, бесплатные курсы Академии и вакансии, не требующие опыта работы.

Руководитель разработки компании выступил с презентацией и ответил на все вопросы, которые так волнуют студентов - как начать свою карьеру в ИТ?

Есть ли возможность совмещать учебу с работой?

Кем я смогу стать?

Как понять, кем я хочу работать?

И многие другие.

Завершен набор студентов на летнюю практику

Крым Диджитал завершила набор студентов на летнюю практику. В июле придут 14 человек. Это студенты второго и третьего курсов кафедр Программная инженерия, Информатика и вычислительная техника, Информационные системы и технологии и Управление в технических системах. Все ребята будут ходить в офис и будут заняты реальным проектом, который они должны реализовать до конца практики. Каждый выбрал для себя то направление, в котором хотел бы развиваться — front-end и back-end-разработка, дизайн. Руководить практикой будет Head of Engineering.
Крым Диджитал завершила набор студентов на летнюю практику. В июле придут 14 человек. Это студенты второго и третьего курсов кафедр Программная инженерия, Информатика и вычислительная техника, Информационные системы и технологии и Управление в технических системах. Все ребята будут ходить в офис и будут заняты реальным проектом, который они должны реализовать до конца практики. Каждый выбрал для себя то направление, в котором хотел бы развиваться - front-end и back-end-разработка, дизайн. Руководить практикой будет Head of Engineering.

Крым Диджитал приняла участие в стратегической сессии

Руководители Крым Диджитал приняли участие в стратегической сессии, которая прошла на базе СевГУ 10 июня. Вместе с Правительством Севастополя, Институтом информационных технологий и управления в технических системах СевГУ и приглашенными ИТ-компаниями города обсудили перспективу развития системы высшего образования в Севастополе.Представители бизнеса, власти и образовательной системы выступали со своим видением будущих потребностей региона в кадрах, поднимали насущные вопросы обучения студентов, прохождения практики и дальнейшего трудоустройства. Крым Диджитал является амбассадором идеи образования и взращивания молодых кадров, развивает образовательные проекты и на протяжении 5 последних лет ведет активную работу в направлении поддержки и развития молодых специалистов ИТ-отрасли Крыма.

Руководители Крым Диджитал приняли участие в стратегической сессии, которая прошла на базе СевГУ 10 июня.

Вместе с Правительством Севастополя, Институтом информационных технологий и управления в технических системах СевГУ и приглашенными ИТ-компаниями города обсудили перспективу развития системы высшего образования в Севастополе.
Представители бизнеса, власти и образовательной системы выступали со своим видением будущих потребностей региона в кадрах, поднимали насущные вопросы обучения студентов, прохождения практики и дальнейшего трудоустройства.

Крым Диджитал является амбассадором идеи образования и взращивания молодых кадров, развивает образовательные проекты и на протяжении 5 последних лет ведет активную работу в направлении поддержки и развития молодых специалистов ИТ-отрасли Крыма.

Выпуск курса Software Testing

Мы поздравляем выпускников нашего первого в этом году курса Крым Диджитал Академии по Software Testing! Всего курс успешно завершили 13 человек. В течение 2 месяцев несмотря на теплую погоду и манящее море ребята ответственно посещали занятия 2 раза в неделю, делали домашние задания и проверочные работы. Трое начинающих специалистов теперь стажеры нашей компании. Следующий курс намечен на август. Не пропусти анонс записи!

Мы поздравляем выпускников нашего первого в этом году курса Крым Диджитал Академии по Software Testing!

Всего курс успешно завершили 13 человек. В течение 2 месяцев несмотря на теплую погоду и манящее море ребята ответственно посещали занятия 2 раза в неделю, делали домашние задания и проверочные работы. Трое начинающих специалистов теперь стажеры нашей компании.

Следующий курс намечен на август. Не пропусти анонс записи!