Форум » [x]Harbour » Печать QR-кода » Ответить

Печать QR-кода

alex_II: Кто освоил работу с QR-кодом, поделитесь решением. Необходимо его генерировать и печатать. Спасибо.

Ответов - 4

Dima: http://clipper.borda.ru/?1-4-0-00001019-000-0-0-1418065342

AndreyZh: ******************************************************************************** * ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ БИБЛИОТЕКИ ПЕЧАТИ QR КОДОВ СОВМЕСТНО С ТЕКСТОМ /* Пример печати простого статичного слипа формата < произвольный текст > <текст> картинка QR <текст> < произвольный текст > Самое главное, что управление печатью текста: oPrinter:NewLine() // перевод на следующую строку oPrinter:TextOut( Padc(cTxt,80) ) // выводим текстовую строку и печатью картинки могут быть независмыми процессами oBmp:Draw(oPrinter,{1500,1000,1700,1200}) или oBmp:Rect:= { 200,2000, 2000, 1500 } oPrn:DrawBitMap( oBmp ) */ //*** На время включаю директивы препроцессора - затем отключаю #define FORM_A4 9 #define PS_SOLID 0 #define RGB( nR,nG,nB ) ( nR + ( nG * 256 ) + ( nB * 256 * 256 ) ) #define BLACK RGB( 0x0 ,0x0 ,0x0 ) PROC pPintQR() LOCA cBmp:="qr.bmp", cTxt:="произвольный текст", cT:="текст" LOCA nLeftStr:=0, nLeftCol:=0, nRightStr:=0, nRightCol:=0 // Координаты в пикселях LOCA aPos:={}, nI:=0 LOCA oPrint, oBmp, cPrinter:="" cPrinter := GetDefaultPrinter() // Определяю принтер, используемый по умолчанию в системе oPrinter := Win32Prn():New( cPrinter ) // Определяем имя объекта класса для принтера, установленного по умолчанию в системе // В случае успешного создания определяю свойства класса. Эти и свойства (BitNumber,PaperLanght,PaperWidht) должны быть определены до Create oPrinter:Landscape := .F. // портретная ориентация oPrinter:FormType := FORM_A4 // А4 oPrinter:Copies := 1 // число копий... но всё равно делаю по моим алгоритмам // Создаем экземпляр класса и проверка успешности создания... после надо уничтожить его IF !oPrinter:Create() // Не создан экземпляр класса ErrMess("Не создан виртуальный принтер! М/б их нет?",cError) RETU ENDI // Обязательно-проверка успешности постановки в очередь с именем IF !oPrinter:startDoc("Printering USLand") ErrMess("Класс startDoc не смог поставить в очередь печати. Смотрите свойства принтеров, например автономность - обращайтесь к системному администратору!",cError) // Уничтожаем раннее созданный экземпляр объекта (класса). oPrinter:Destroy() RETU ENDI // Определяем перо для рисования линий (толщина шрифта) - форма линий (сплошная, тонкая, черная) oPrinter:SetPen(PS_SOLID, 1, BLACK) // Установка шрифта, в зависимости от сжатия текста. В массиве определяется толщина шрифта и высота... подбор эксперимент oPrinter:SetFont("Courier New",10,{4,-43}) // Обычный и без сжатия oPrinter:Charset(255) // ОБЯЗАТЕЛЬНО - кодировка OEM... иначе козебяки //!*** ПРОЦЕССЫ ПЕЧАТИ ТЕКСТА, УПРАВЛЯЕМЫЕ ПЕРЕХОДОМ НА НОВУЮ СТРОКУ И ПЕЧАТЬ КАРТИНОК !!!НЕЗАВИСИМЫЕ!!! // Печатаем текстовую информацию и лишь по причине пробелов помещаю печать картинки ниже oPrinter:NewLine() // перевод на следующую строку oPrinter:TextOut( Padc(cTxt,80) ) // выводим текстовую строку FOR nI := 1 TO 5 oPrinter:NewLine() oPrinter:TextOut( " " ) NEXT nI oPrinter:NewLine() oPrinter:TextOut( Padc(cT,10)+Spac(60)+Padc(cT,10) ) FOR nI := 1 TO 5 oPrinter:NewLine() oPrinter:TextOut( " " ) NEXT nI oPrinter:NewLine() // перевод на следующую строку oPrinter:TextOut( Padc(cTxt,80) ) // выводим текстовую строку // Печатую bmp файл используя соответствующий класс в конкретных координатах 2000*500 и размера 700*700 oBmp := Win32BMP():new() // создаю объект IF oBmp:loadFile( cBmp ) // загружаю файл oBmp:Draw(oPrinter,{2000,400,360,360}) // печатаю в координатах пикселях на листе. 15mm ENDI oBmp:Destroy() // уничтожаю объект * После закрытия печати сам прогоняет? oPrinter:NewPage() // делаю прогон страницы oPrinter:endDoc() // Закрываю печать документа oPrinter:Destroy() // Уничтожаю объект принтера RETU // Отключаю директивы препроцессора #undef FORM_A4 #undef PS_SOLID #undef RGB #undef BLACK /* Генерация QR кода по переданному тексту и маршруту вывода в файл *.bmp До вызова на ПК должна быть установлена библиотека QRCodelib и доступен для вызова DLL файл библиотеки Параметры: cText Преобразуемый в QR Code текст cPath Маршрут вывода картиник кода cBmp Имя файла картинки Возвращает: Имя файла картинки с маршрутом */ FUNC cQRGen(cText,cPath,cBmp) STAT qrDLL LOCA cFile:="", nResp:=0 #Define DC_CALL_STD 0x0020 DEFAULT cPath TO "", cBmp TO "QR.BMP", cText TO "http://check.egais.ru?id=UUID&dt=0404161630&cn=Common_Name" cFile := cPath+cBmp IF !File("QRCodelib.Dll") THEN RETU "" qrDLL := LoadLibrary("QRCodelib.Dll" ) // Подгружается библиотека из DLL файла nResp := DllCall(qrDLL,DC_CALL_STD,"FastQRCode",cText,cFile) // Формирование и вывод в файл FreeLibrary(qrDLL) // Освобождение из памяти ресурсов занятых библой RETU (cFile) Взять библиотеку можно тут: https://olegon.ru/attachment.php?attachmentid=9008&d=1510037931

Sergy: Освоил и пользуюсь \hb\contrib\hbzebra - гениальное по своей идее решение.


alex_II: Спасибо за информацию



полная версия страницы