Буквально на днях встала задача программного размещения картинок в уже сформированной таблице, при этом картинки должны были быть с прозрачным фоном. Как результат изысканий появился данный класс - возможно кому-нибуть пригодится.
Что может:
Размещать в произвольном месте в таблице картинки с прозрачным фоном, с возможностью произвольного смещения картинки по оси X/Y, c возможностью поворота картинки на произвольный градус. С версии 1.3 - поддержка вывода 81 типа штрих-кодов, в том числе двухмерные QR Code, Data Matrix и т.д. (корректно кодирует кириллицу).
Где использовать:
- при вставке подписей и печатей
- при вставке фирменных логотипов
- для реализации корпоративного оформления документов
- при вставке текста
- при вставке штрих-кодов (список доступных типов ШК см. ниже)
- и т.д.
Что используется:
1. ВК TableDoc.dll - автор Трапезников Дмитрий (trad) (http://www.1cpp.ru/forum/YaBB.pl?num=1177688915/0) - используется возможность добавления в таблицу произвольного количество OLE-объектов произвольных размеров (обязательно)
2. ActiveX элемент управления bmp_1c.ocx (ActiveBMP) - автор Морев Андрей (Z1) (http://1c.proclub.ru/modules/mydownloads/personal.php?lid=2725&cid=111) - используется непосредственно для отображения картинок в таблице (обязательно)
3. ActiveX GFLAx (http://www.xnview.com/en/download_gfl.html) - для возможности произвольного поворота вставляемого изображения и конвертации входящего изображения в BMP (опционально)
4. ActiveX элемент управления text_1c.ocx (ActiveText) - автор Морев Андрей (Z1) (http://1c.proclub.ru/modules/mydownloads/personal.php?cid=129&lid=2726) - используется непосредственно для отображения картинок в таблице (опционально)
5. Шрифт EanG000.ttf - для вывода штрих-кодов EAN-13.
6. ActiveX элемент управления OcvitaBarcode.ocx - Разработчик: Ocvita (http://ocvita.ru/content/view/89/1/) На основе библиотеки zint (www.sourceforge.net/projects/zint) - используется для отображения ШК всевозможных типов в таблице
При наличии GFLAx - входящий файл картинки может быть практически любого графического формата, иначе - только BMP.
Свойства:
ЕстьПроизвольноеСмещение - использовать произвольное смещение при размещении объекта в таблицу (0 - нет; 1 - да);
ПроизвольноеСмещениеНач_X, ПроизвольноеСмещениеКон_X, ПроизвольноеСмещениеНач_Y, ПроизвольноеСмещениеКон_Y - границы в пикселях для произвольного смещения;
ЕстьПроизвольныйПоворот - использовать поворот на произвольный градус при размещении объекта в таблицу (0 - нет; 1 - да);
ПроизвольныйПоворотНач, ПроизвольныйПоворотКон - границы для ограничения градуса поворота;
Методы:
Процедура ПодключитьТаблицу(Таб) - подключение таблицы к классу
- Таб - объект типа "Таблица"
Функция ДобавитьИзображение(Лево, Верх, Право, Низ, Путь, Тип) - добавление изображения в таблицу, возвращает ссылку на добавленный объект ActiveBMP
- Лево, Право, Верх, Низ - координаты добавиления изображения в таблицу (см. "тип")
- Путь - путь к файлу изображения
- Тип - тип системы координат: 0 - пиксельная; 1 - табличная; 2 - левый верхний угол задается в табличной системе, в "право,низ" - задается смещение относительно левого верхнего угла
Функция ДобавитьТекст_Актив(Лево, Верх, Право, Низ, Текст, Тип) - добавление текста (с помощью ActiveText) в таблицу, возвращает ссылку на добавленный объект ActiveText
- Лево, Право, Верх, Низ - координаты добавиления изображения в таблицу (см. "тип")
- Текст- текст для добавления в таблицу
- Тип - тип системы координат: 0 - пиксельная; 1 - табличная; 2 - левый верхний угол задается в табличной системе, в "право,низ" - задается смещение относительно левого верхнего угла
Функция ДобавитьШК_Актив(Лево, Верх, Право, Низ, ШК, Тип) - добавление штрих-кода (с помощью ActiveText) в таблицу, возвращает ссылку на добавленный объект ActiveText
- Лево, Право, Верх, Низ - координаты добавиления изображения в таблицу (см. "тип")
- ШК- штрих-код для добавления в таблицу
- Тип - тип системы координат: 0 - пиксельная; 1 - табличная; 2 - левый верхний угол задается в табличной системе, в "право,низ" - задается смещение относительно левого верхнего угла
Функция ДобавитьТекст(Лево, Верх, Право, Низ, Текст, Тип) - добавление текста (стандартный объект Текст) в таблицу, возвращает ссылку область таблицы добавленного объекта
- Лево, Право, Верх, Низ - координаты добавиления изображения в таблицу (см. "тип")
- Текст- текст для добавления в таблицу
- Тип - тип системы координат: 0 - пиксельная; 1 - табличная; 2 - левый верхний угол задается в табличной системе, в "право,низ" - задается смещение относительно левого верхнего угла
Функция ДобавитьШК(Лево, Верх, Право, Низ, ШК, Тип) - добавление штрих-кода (стандартный объект Текст) в таблицу, возвращает ссылку область таблицы добавленного объекта
- Лево, Право, Верх, Низ - координаты добавиления изображения в таблицу (см. "тип")
- ШК - штрих-код для добавления в таблицу
- Тип - тип системы координат: 0 - пиксельная; 1 - табличная; 2 - левый верхний угол задается в табличной системе, в "право,низ" - задается смещение относительно левого верхнего угла
Функция ДобавитьШК_Оквита(Лево, Верх, Право, Низ, ШК, ТипШК, Тип) - добавление штрих-кода (с помощью OcvitaBarcode) в таблицу, возвращает ссылку на добавленный объект OcvitaBarcode
- Лево, Право, Верх, Низ - координаты добавиления изображения в таблицу (см. "тип")
- ШК - штрих-код для добавления в таблицу
- ТипШК - тип штрих-код для добавления в таблицу, можно передавать цифровой код или строковое название (доступные типы ШК см. ниже)
- Тип - тип системы координат: 0 - пиксельная; 1 - табличная; 2 - левый верхний угол задается в табличной системе, в "право,низ" - задается смещение относительно левого верхнего угла
Пример добавления в таблицу подписи с печатью
....
Таблица = СоздатьОбъект("Таблица");
//заполнение таблицы
....
Таблица.Показать();
Печ = СоздатьОбъект("ИзображенияДляТаблицы");
Печ.ПодключитьТаблицу(Таблица);
Печ.ЕстьПроизвольноеСмещение = 1;
Печ.ЕстьПроизвольныйПоворот = 0;
Печ.ДобавитьИзображение(2,5,70,50,"C:\Подпись.gif",2);
Печ.ЕстьПроизвольныйПоворот = 1;
Печ.ПроизвольныйПоворотНач = -15;
Печ.ПроизвольныйПоворотКон = 15;
Печ.ДобавитьИзображение(300,150,430,280,"C:\Печать.gif",0);
Обновление от 09.06.2012 версия 1.1
1. При повороте картинки - размер картинки увеличивается пропорционально углу поворота - раньше это увеличение картинки компенсировалось увеличением
втавляемого ОЛЕ-объекта, теперь новое изображение после поворота обрезается до первоначальных размеров - имхо - так более правильно.
2. Особенностью ActiveBMP является то, что изображение из файла подгружается в ОЛЕ-объект в момент визуального просмотра таблицы/отправки на печать. Поэтому при массовой вставке объектов с произвольным поворотом в таблицу получалось что при просмотре всей таблицы в ОЛЕ-объекты подгружалось последнее "повернутое" изображение (корректировка картинки работала через один файл во временном каталоге). Сейчас для каждого такого изображения создается свой уникальный файл во временном каталоге. Данные файлы удаляются при следующем создании объекта "ИзображенияДляТаблицы" - это накладывает некоторое ограничение - если сформировать таблицу несколько раз подряд (без печати и визуального просмотра всех страниц), то изображения на невидимых страницах всех таблиц, кроме последней, будут отсутствовать.
Обновление от 18.06.2012 версия 1.2
1. Добавлена возможность размещения в таблице текста и штрих-кода двумя способами: с помощью ActiveX элемент управления bmp_1c.ocx (ActiveBMP) и с помощью стандартного объекта "Текст" (базовый функционал одинаков, но у ActiveX возможностей все таки больше - возможно кому то это будет критично). При этом работает возможность произвольного смещения и поворота добавляемого объекта.
2. Процедуры добавления объекта переделаны в функции, с возвратом ссылки на добавляемый объект, чтобы после добавления можно было "поиграть" со свойствами этих объектов.
Обновление от 20.06.2012 версия 1.3
1. Добавлена поддержка ActiveX элемента управления OcvitaBarcode.ocx - с его помощью стал доступным вывод в таблицу практически любого ШК, в т.ч. дмухмерных с поддержой кириллицы. Фон для таких объектов непрозрачный (кстати, цвет изображения и фона можно настраивать в свойствах объекта), отсутствует возможность произваольного поворота (в свойствах объекта она есть, но при этом 1Ска закрывается с ошибкой).
Доступные типы ШК: