Загрузка 0
ПОДЕЛИТЬСЯ

Мой блог

Листай вниз

Как я автоматизировал печать чертежей в конструкторском бюро: опыт разработки распределенной системы

Как я автоматизировал печать чертежей в конструкторском бюро: опыт разработки распределенной системы

Когда конструкторскому бюро требуется выпустить сотни комплектов разнокалиберных чертежей, процесс превращается в рутинный ад. Я, Сергей Багров, продолжаю рассказывать о своем опыте разработки корпоративного софта — на этот раз о создании распределенной системы пакетной печати PDF-файлов для локальной сети предприятия. О том, как превратить ручной труд в полный автомат и сократить время подготовки документации на 75%, читайте в этом материале.

Графики производительности конвертации
Сводные графики утилизации системных ресурсов при обработке многостраничных книг.
Архитектурная схема воркера печати
Взаимодействие внутренних модулей системы через шину данных RabbitMQ.
Логирование работы фонового сервиса
Фрагмент системных логов, фиксирующих успешную отправку заданий на плоттеры.
Таблица сравнения библиотек обработки PDF
Табличные данные по скорости обработки и потреблению памяти.
Структура JSON-отчета о выполнении задания
Пример структуры JSON-ответа, возвращаемого воркером веб-приложению.
Схема гибридного развертывания системы
Разделение веб-интерфейса в Docker и локального принт-сервера на Windows.

Введение в задачу и первые ограничения

Инженерная документация кардинально отличается от стандартных офисных файлов. Один документ может объединять от десятка до тысячи страниц, причем внутри одного файла соседствуют форматы A4, A3, A2, A1 и составные листы. Часть чертежей должна выводиться в цвете, а часть — исключительно в монохромном режиме.

Классический подход «AS IS» требовал от инженера вручную анализировать каждый лист, группировать страницы по параметрам, настраивать драйверы и отправлять их на разные принтеры и плоттеры. Чтобы исключить человеческий фактор, я поставил цель: создать pipeline, который на вход принимает «тяжелый» PDF, а на выходе выдает полностью отсортированные по устройствам распечатанные комплекты.

Реклама
Пользовательский интерфейс системы печати
Минималистичный интерфейс первой версии веб-приложения с единой кнопкой отправки документов.

Требования и инфраструктура проекта

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

Главным требованием бизнеса стала предельная простота для инженера: указать путь к файлу на файловом сервере и нажать единственную «большую красную кнопку» отправить. Все остальные решения — от определения формата и цветности до выбора конкретного плоттера — система обязана была принимать самостоятельно.

Эволюция архитектуры: от простого MVP к сервисам

Первая версия системы представляла собой монолитное SPA на базе Django, развернутое через IIS. Для извлечения страниц применялась библиотека PyPDF2, а для растеризации — связка ImageMagick и Ghostscript с последующей обработкой в Pillow. Это позволило решить задачу в кратчайшие сроки, однако на больших чертежах генплана формата A2*3 монолит начал чрезмерно нагружать память и процессор.

Ошибки конвертации документов в задаче pdf2image
Диагностическое окно с результатами тестового прогона утилит конвертации.

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

Оптимизация и переход на MuPDF

Чтобы ускорить конвертацию тяжелых инженерных чертежей и снизить аппетиты к ресурсам, я провел сравнительный тест популярных библиотек. Замеры показали, что переход на MuPDF (через Python-обертку fitz) дает колоссальный прирост производительности. Она справляется с задачей в несколько раз быстрее аналогов и существенно экономит процессорное время на сложных графических макетах.

Новый пайплайн обработки стал выглядеть гораздо лаконичнее: файл открывается средствами MuPDF, страницы поступают в обработку лениво, без полной предварительной загрузки в память. Это позволило стабильно обрабатывать массивные многостраничные книги без риска падений из-за нехватки оперативной памяти.

Мониторинг ресурсов в Диспетчере задач Windows
Анализ нагрузки на аппаратные ресурсы компьютера в процессе пакетной растеризации.

Алгоритмы анализа страниц и отправки на печать

Каждая страница документа последовательно проходит несколько этапов:

  • Извлечение объекта страницы и ее точных физических размеров из типографских пунктов в миллиметры.
  • Создание растрового представления в виде массива пикселей с заданным разрешением 300 DPI.
  • Анализ цветности с помощью вычисления дисперсии значений цветовых каналов RGB для определения наличия цветных элементов.
  • Сопоставление параметров с конфигурационной таблицей и автоматический выбор целевого устройства через WinAPI.

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

Аппаратные характеристики тестового стенда
Спецификация серверного процессора и оперативной памяти, использованных для замеров производительности.
01.