В практике автоматизации мебельного производства, строительства или проектирования часто возникает задача динамического формирования чертежей. Представьте ситуацию: у вас есть базовый шаблон изображения детали, и вам необходимо программно заменить на нем размеры (например, заменить число 720 на 920) в зависимости от параметров заказа в системе 1С. Поскольку обычный графический файл (JPEG или PNG) является растровым, просто «переписать» переменную внутри него невозможно. Однако существует несколько эффективных способов решения этой задачи. Разберем их подробно.
Этот метод наиболее близок к стандартному функционалу платформы 1С и не требует подключения внешних библиотек. Рассмотрим его реализацию, основанную на идее использования макета. Мы можем использовать ТабличныйДокумент в качестве холста.
Проанализируем алгоритм действий:
РисунокТабличногоДокумента), который будет служить фоновым чертежом.Рассмотрим пример кода для реализации этой идеи:
// Создаем объект табличного документа
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("МакетЧертежа");
// Получаем рисунок-подложку
КартинкаФон = Макет.Рисунки.ФоновыйЧертеж;
// Если нам нужно динамически добавить текст в определенные координаты
НоваяНадпись = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Текст);
НоваяНадпись.Верх = 50; // Координаты в мм или пунктах
НоваяНадпись.Лево = 120;
НоваяНадпись.Ширина = 40;
НоваяНадпись.Высота = 10;
НоваяНадпись.Текст = "920";
НоваяНадпись.ГраницаСверху = Ложь; // Убираем рамку
НоваяНадпись.ГраницаСлева = Ложь;
НоваяНадпись.ГраницаСправа = Ложь;
НоваяНадпись.ГраницаСнизу = Ложь;
НоваяНадпись.Шрифт = Новый Шрифт("Arial", 12, Истина);
// Сохраняем результат в файл
ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.PDF);
Этот метод хорош тем, что позволяет визуально настроить привязки данных в конфигураторе, используя 1С как простой графический редактор.
Если задача требует массовой обработки изображений с высокой скоростью или сложного рендеринга, проанализируем возможности утилиты ImageMagick. Это мощный инструмент, который часто называют «фотошопом из командной строки». Мы можем вызывать его функции прямо из кода 1С.
Выясним, как это работает: 1С формирует строку команды, где указывает путь к исходному файлу, текст, координаты и параметры шрифта, а затем выполняет команду через ЗапуститьПриложение().
Пример формирования команды для ImageMagick:
Команда = "magick convert source.jpg -font Arial -pointsize 24 -draw ""text 100,200 '920'"" result.jpg";
ЗапуститьПриложение(Команда, , Истина);
Преимущества: поддержка практически всех форматов, очень высокая скорость работы, возможность «затирать» старые области (например, нарисовать белый прямоугольник поверх старого числа и написать новое).
Разберем наиболее современный и технологичный подход — использование формата SVG (Scalable Vector Graphics). SVG — это текстовый формат на базе XML. Если ваш чертеж сохранен в SVG, то изменение значения превращается в простую замену строки.
Посмотрим на пример структуры SVG:
<svg height="100" width="100">
<text x="10" y="40" fill="black" id="dimension1">720</text>
</svg>
В 1С мы можем работать с этим как с обычным текстом:
ТекстSVG = ЧтениеТекста.Прочитать();
// Заменяем старое значение на новое
НовыйТекстSVG = СтрЗаменить(ТекстSVG, "720", "920");
// Записываем обратно или выводим в поле HTML-документа
Проанализируем выгоду: SVG идеально масштабируется без потери качества, и его можно напрямую отображать на управляемой форме 1С в поле HTML-документа.
Для систем на базе Windows мы можем использовать мощь .NET Framework через COM-объекты. Библиотека System.Drawing позволяет работать с графикой на низком уровне.
Рассмотрим по шагам процесс отрисовки текста поверх картинки:
Bitmap.Graphics из этого изображения.DrawString для нанесения текста.Bitmap в новый файл.Примерный алгоритм на языке 1С (через COM):
// Инициализация графических объектов .NET
Картинка = Новый COMОбъект("System.Drawing.Bitmap");
Картинка = Картинка.FromFile(ПутьКФайлу);
Графика = Новый COMОбъект("System.Drawing.Graphics");
Графика = Графика.FromImage(Картинка);
Кисть = Новый COMОбъект("System.Drawing.SolidBrush");
Цвет = Новый COMОбъект("System.Drawing.Color");
Кисть.Color = Цвет.Black;
Шрифт = Новый COMОбъект("System.Drawing.Font");
Шрифт = Шрифт.Font("Arial", 14);
Графика.DrawString("920", Шрифт, Кисть, 150, 300);
Картинка.Save(НовыйПуть);
Если пользователю нужно не просто программно получить картинку, а самому «подвигать» цифры на чертеже, рассмотрим вариант с HTML5 Canvas. В управляемой форме 1С размещается ПолеHTMLДокумента.
Выясним преимущества такого подхода:
drag-and-drop для позиционирования надписей.Для передачи данных из JavaScript в 1С используется событие ПриНажатии или специализированные методы взаимодействия с контейнером HTML.
Резюмируем: Выбор метода зависит от ваших технических условий. Если вам нужно быстрое решение внутри платформы — используйте Табличный документ. Если важна кроссплатформенность и качество — переходите на SVG. Для высокопроизводительной серверной обработки лучше всего подойдет ImageMagick или библиотеки .NET.