Использовал как-то библиотеку Zint и через сервис Google
// Получение QR кода с помощью библиотеки ZINT
Функция ПолучитьКартинкуQRКодаZINT(КодируемыйОбъект,Катало гГенератораШК) Экспорт
Перем КартинкаQRКод;
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("png");
Попытка
Команда = "zint -b 58 -o " + ИмяВременногоФайла + " -d " + КодируемыйОбъект;
КомандаСистемы(Команда ,КаталогГенератораШК);
Исключение
Сообщить(ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;
Попытка
КартинкаQRКод = Новый Картинка(ИмяВременногоФайла);
Исключение
Сообщить(ОписаниеОшибки());
Попытка
УдалитьФайлы(ИмяВременногоФайла);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Возврат Неопределено;
КонецПопытки;
Попытка
УдалитьФайлы(ИмяВременногоФайла);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Возврат КартинкаQRКод;
КонецФункции
// Получение QR кода с помощью Google API
Функция ПолучитьКартинкуQRКодаWeb(КодируемыйОбъект)
ТабДок = Новый ТабличныйДокумент;
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("png");
АдресНачало = "http://chart.apis.google.com/chart?cht=qr&chs=300x300&chld=H|0&chl=";
//АдресКонец = ЗаказСсылка.Номер + Символы.ПС + Заказссылка.Контрагент.Наименование;
//АдресКонец = СтрЗаменить(АдресКонец, " ", "+");
АдресКонец = EncodeURL(КодируемыйОбъект);
Соединение = ПолучитьCOMОбъект("","Microsoft.XMLHTTP");
Соединение.open("GET", АдресНачало + АдресКонец,0,,);
Соединение.send(null);
СохранитьДвоичныйБуферВФайл(Соединение.responseBod y, ИмяВременногоФайла);
Попытка
КартинкаQRКод = Новый Картинка(ИмяВременногоФайла);
Исключение
Сообщить(ОписаниеОшибки());
Попытка
УдалитьФайлы(ИмяВременногоФайла);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Возврат Неопределено;
КонецПопытки;
Попытка
УдалитьФайлы(ИмяВременногоФайла);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Возврат КартинкаQRКод;
КонецФункции
// Функции для работы ф-ции через Google API
Функция СохранитьДвоичныйБуферВФайл(Буфер, ИмяФайла) Экспорт
Поток = Новый COMОбъект("ADODB.Stream");
Поток.Type = 1; //Бинарный
Поток.Mode = 3;
Поток.Open();
Поток.Write(Буфер);
Поток.SaveToFile(ИмяФайла);
Поток.Close();
КонецФункции
// Функции для работы ф-ции через Google API
Функция hex(Знач Значение)
Значение=Число(Значение);
Если Значение<=0 Тогда
Результат="0";
Иначе
Значение=Цел(Значение);
Результат="";
Пока Значение>0 Цикл
Результат=Сред("0123456789ABCDEFGHIJKLMNOPQRSTUVWX YZ",Значение%16 + 1,1)+Результат;
Значение=Цел(Значение/16) ;
КонецЦикла;
КонецЕсли;
Если СтрДлина(Результат) < 2 Тогда
Результат = "0" + Результат;
КонецЕсли;
Возврат "%" + Результат;
КонецФункции
// Функции для работы ф-ции через Google API
Функция EncodeURL(URL)
Рез = "";
Для Сч = 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 <= 0x7FF
Рез = Рез + hex(192 + Цел(vch / 64));
Рез = Рез + hex(128 + (vch % 64));
Иначе // 0x7FF < ch <= 0xFFFF
Рез = Рез + hex(224 + Цел(vch / 4096));
Рез = Рез + hex(128 + (Цел(vch / 64) % 64));
Рез = Рез + hex(128 + (vch % 64));
КонецЕсли;
КонецЦикла;
Возврат Рез;
КонецФункции
|