Создание 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С.

Вступайте в нашу телеграмм-группу Инфостарт

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Загрузка и выгрузка в Excel Универсальные функции Программист 1С:Предприятие 8 Россия Бесплатно (free)

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    6407    Abysswalker    11    

48

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

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

14.05.2025    11331    DeerCven    15    

64

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

21.05.2024    63395    dimanich70    87    

177

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

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

1 стартмани

18.03.2024    8538    7    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

12.02.2024    79546    atdonya    31    

75

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

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

30.11.2023    11620    ke.92@mail.ru    18    

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