Создание QR кода с логотипом компании

17.03.12

Разработка - Универсальные функции

Генерация QR кода с помощью api google с последующим нанесением логотипа компании

QR код может иметь около 30% зон заполненной случайной информацией - эти 30% нам и нужны. Согласно википедии: «Исправляется до 30% повреждений (фиксированные уровни в 7, 15, 25 и 30 процентов)» и телефон всё равно сможет раскодировать информацию. Таким образом QR коду возможно придавать любую форму и цвет.

Стартовой точкой послужил этот ресурс

Для формирования текста использовалась код из публикации: //infostart.ru/public/80106/, с исправлением некоторых недочетов.

 

Порядок действий:

  1. Генерируем текст, который надо прописать в QR-коде;
  2. Используем ссылку «http://chart.apis.google.com/chart?cht=qr&chs=308×308&chl=» +»Наш текст»;
  3. Скачиваем картинку (стандартным 1С способом без использования внешней компоненты);
  4. С помощью программы IrfanView редактируем картинку и наносим watermark (в автоматическом режиме);
  5. Размещаем картинку (в данной статье РисунокТабличногоДокумента).

 

Код реализации:

filename = СоздатьQR_Code_Чек("тут данные");
Если НЕ filename = Неопределено Тогда
    ОбластьQR_Code.Рисунки.D1.Картинка = Новый Картинка(filename);
    ТабличныйДокумент.Вывести(ОбластьQR_Code);
    УдалитьФайлы(filename);
КонецЕсли;


Функция СоздатьQR_Code_Чек(Соответствие) Export
    Строка = "QR код с логотипом" + Символы.ПС;
    Data = EncodeURL(Строка);
    filename = СоздатьQR_Code(Data);
    
    Если НЕ filename = Неопределено Тогда
        Ком = Новый COMObject("wScript.Shell");
        Ком.Run("cmd /c start /wait c:\IrfanView\i_view32.exe " + filename + " /crop=(17,17,270,270) /advancedbatch /aspectratio /resample /silent /convert=" + filename, , Истина);
    КонецЕсли;
    
    Возврат filename;
    
КонецФункции



Функция СоздатьQR_Code(Data) Export
    Возврат ПолучитьКартинкуПоHTTPСсылке("chart.apis.google.com", "chart?cht=qr&chs=308x308&chl=" + Data);
КонецФункции



Функция ПолучитьКартинкуПоHTTPСсылке(Server, Ref) Export
    
    ИмяВременногоФайла = ПолучитьИмяВременногоФайла("png");
    
    Попытка
        Соединение = Новый HTTPСоединение(Server);
        Соединение.Получить(Ref, ИмяВременногоФайла);
        Возврат ИмяВременногоФайла;
    Исключение
        Возврат Неопределено;
    КонецПопытки;
    
КонецФункции



Функция КонвертироватьСтрокуHEX(Значение) Export
    
    Значение = Число(Значение);
    Если Значение <= 0 Тогда
        Результат = "0";
    Иначе
        Значение = Цел(Значение);
        Результат = "";
        Пока Значение > 0 Цикл
            Результат = Сред("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", Значение % 16 + 1, 1) + Результат;
            Значение = Цел(Значение / 16);
        КонецЦикла;
    КонецЕсли;
    
    Если СтрДлина(Результат) < 2 Тогда
        Результат = "0" + Результат;
    КонецЕсли;
    Возврат "%" + Результат;
КонецФункции



Функция EncodeURL(URL) Export
    Рез = "";
    Для Сч = 1 По СтрДлина(URL) Цикл
        ch = Сред(URL, Сч, 1);
        vch = КодСимвола(ch);
        Если ("A" <= ch) И (ch <= "Z") Тогда // "A".."Z"
            Рез = Рез + ch;
        ИначеЕсли ("a" <= ch) И (ch <= "z") Тогда // "a".."z"
            Рез = Рез + ch;
        ИначеЕсли ("0" <= ch) И (ch <= "9") Тогда // "0".."9"
            Рез = Рез + ch;
        ИначеЕсли (ch = " ") ИЛИ (ch = "+") Тогда // space
            Рез = Рез + "+";
        ИначеЕсли (ch = "-") ИЛИ (ch = "_") // unreserved
            ИЛИ (ch = ".") ИЛИ (ch = "!")
            ИЛИ (ch = "~") ИЛИ (ch = "*")
            ИЛИ (ch = "") ИЛИ (ch = "(")
            ИЛИ (ch = ")") Тогда
            Рез = Рез + ch;
        ИначеЕсли (vch <= 127) Тогда // other ASCII
            Рез = Рез + КонвертироватьСтрокуHEX(vch);
        ИначеЕсли (vch <= 2047) Тогда // non-ASCII
            Рез = Рез + КонвертироватьСтрокуHEX(192 + Цел(vch / 64));
            Рез = Рез + КонвертироватьСтрокуHEX(128 + (vch % 64));
        Иначе // 0x7FF < ch
            Рез = Рез + КонвертироватьСтрокуHEX(224 + Цел(vch / 4096));
            Рез = Рез + КонвертироватьСтрокуHEX(128 + (Цел(vch / 64) % 64));
            Рез = Рез + КонвертироватьСтрокуHEX(128 + (vch % 64));
        КонецЕсли;
    КонецЦикла;
    Возврат Рез;
КонецФункции

 

Разберем строчку кода:

Ком.Run("cmd /c start /wait c:\IrfanView\i_view32.exe " + filename + " /crop=(17,17,270,270) /advancedbatch /aspectratio /resample /silent /convert=" + filename, , Истина);

  • "cmd" - запуск командной строки.
  • "/c" - дождаться завершения работы команд и завершить сеанс cmd
  • "start /wait" - дает нам возможность запустить приложение и ждать его завершения
  • "/crop=(17,17,270,270)" - обрезать часть изображение по заданным параметрам (x, y, widht, height)
  • "/advancedbatch" - использовать продвинутые опции
  • "/aspectratio" - сохранять пропорции изображения
  • "/resample" - минимизировать потери качества
  • "/silent" - не выводить сообщения про ошибки и предупреждения
  • "/convert=" - конвертировать и записать в файл с именем

 

И сам watermark, нужно запустить IrfanView и произвести настройки:

 

После настройки сохраните: "Save settings"

 

 

Для работы выбирайте логотип, который будет занимать не более 30% QR-кода, так же для повышения читаемости используйте прозрачность, в этом примере логотип занимает не более 15%. Удачных Вам свершений.

 

UPD: Irfanview сохраняет настройки для каждого пользователя отдельно. (вот здесь: C:\Users\ИмяПользователя\AppData\Roaming\IrfanView). Если вы используете файловый вариант базы, для каждого пользователя нужно скопировать настройки IrfanView в эту папку. Если же это серверный вариант - достаточно скопировать настройку пользователю от которого запущена служба 1С.

См. также

Вставляем картинку из буфера обмена (платформа 1С 8.3.24)

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    2681    1    John_d    8    

55

GUID в 1С 8.3 - как с ними быть

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    4614    atdonya    22    

45

Переоткрытие внешних обработок

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    3965    ke.92@mail.ru    16    

61

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8846    YA_418728146    6    

141

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2077    21    progmaster    7    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    16153    133    sapervodichka    112    

129

Система контроля ведения учета [БСП]

Универсальные функции Механизмы типовых конфигураций БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    7243    quazare    8    

109
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Yasen 490 14.05.12 11:38 Сейчас в теме
Отлично! Год назад читал про возможность стилизации QR-кодов, но посчитал большой роскошью платить специальным дизайнерам за такую работу.
Спасибо!
2. пользователь 12.06.12 11:33
Сообщение было скрыто модератором.
...
Оставьте свое сообщение