Actualización del 28/02/2021: Se libera una nueva versión v.2.10 de FoxBarcodeQR
FoxBarcodeQR es una clase libre que ofrece una solución alternativa para todos los desarrolladores de la comunidad de Visual FoxPro que solicitaron soporte para Códigos QR a la clase FoxBarcode.
Ambas clases forman parte del proyecto VFPx:
- FoxBarcodeQR: https://github.com/VFPX/FoxBarcodeQR
- FoxBarcode: https://github.com/VFPX/FoxBarcode
FoxBarcodeQR utiliza las librerías:
- BarCodeLibrary.dll (Darío Álvarez Aranda, México)
- QRCodeLib.dll (www.validacfd.com) que codifica cadenas sin límites de longitud y tiene mayor control en la generación del Código QR.
- API de Google (https://developers.google.com/chart/infographics/docs/qr_codes) A partir de la versión 2.10 utiliza esta API para generar los códigos QR.
Características de las librerías externas
BarCodeLibrary.dll
- Genera códigos QR funcionales, pero sólo se puede establecer el tamaño y el tipo de la imagen generada.
- No tiene ajustes para el nivel de corrección de errores, colores y/o margenes.
- No soporta cadenas de mas de 255 caracteres.
La librería BarCodeLibrary.dll contiene solo 3 funciones:
- LibraryVersion: Retorna una cadena con la versión de la librería.
- SetConfiguration: Método para establecer el tamaño y el tipo de archivo de imagen a generar.
- GenerateFile: Método responsable de generar la imagen del código de barras QR.
QRCodeLib.dll (versión 0.1b - www.validacfd.com)
- Genera códigos QR funcionales con un mayor control de configuración.
- Soporta cadenas de mas de 255 caracteres.
La librería BarCodeLib.dll contiene los métodos:
- QRCodeLibVer: Retorna una cadena con la versión de la librería.
- FastQRCode: Genera la imagen del código de barras QR con el texto a codificar.
- FullQRCode: Igual que el método anterior, pero con mayor control en la generación de la imagen del código QR.
- Requiere conexión a internet.
- Soporta cadenas de mas de 255 caracteres.
Métodos de FoxBarcodeQR
FoxBarcodeQR encapsula las funciones de las librerías BarCodeLibrary.dll, QRCodeLib.dll y la API de Google, en métodos propios de la clase para compatibilidad con las versiones anteriores y poder seleccionar la librería a utilizar .
Los métodos de la clase FoxBarcodeQR son:
- QRBarcodeImage() que utiliza la librería BarCodeLibrary.dll y que recibe los siguientes parámetros:
- tcText: Texto para codificar
- tcFile: Nombre del archivo de imagen que desea generar. Si no se especifica ninguno, se genera un nombre de archivo aleatorio en la carpeta de archivos temporales de Windows.
- tnSize: El tamaño de la imagen generada. Recibe un número entero entre 2 y 12
- 2 = 66 x 66 (en píxeles)
- 3 = 99 x 99
- 4 = 132 x 132
- 5 = 165 x 165
- 6 = 198 x 198
- 7 = 231 x 231
- 8 = 264 x 264
- 9 = 297 x 297
- 10 = 330 x 330
- 11 = 363 x 363
- 12 = 396 x 396
- tnType: El tipo de archivo de imagen generado. Recibe un número entero entre 0 y 2.
- 0 = BMP
- 1 = JPG
- 2 = PNG
A partir de la versión 2.0 de FoxBarcodeQR, los nuevos métodos añadidos utilizan la librería QRCodeLib.dll v.01b (www.validacfd.com)
- FullQRCodeImage() que recibe los mismos parámetros que QRBarcodeImage()
- tcText: Texto para codificar
- tcFile: Nombre del archivo de imagen que desea generar. Si no se especifica ninguno, se genera un nombre de archivo aleatorio en la carpeta de archivos temporales de Windows.
- tnSize: El ancho y alto en pixeles de la imagen generada
- tnType: (solo por compatibilidad) La librería solo genera archivo de imagen tipo 0 = BMP
Para configurar las otras opciones se utilizan las siguientes propiedades:
- lAutoConfigurate: .T. para seleccionar una versión de código QR más grande si la cantidad de datos lo requiere.
- lAutoFit: Trabaja conjuntamente con lAutoConfigurate
- nBackColor: Color del fondo del código QR
- nBarColor: Color de las barras del código QR
- nCorrectionLevel: Nivel de corrección de errores :
- 0 = Nivel L ( 7 % )
- 1 = Nivel M ( 15 % )
- 2 = Nivel Q ( 25% )
- 3= Nivel H ( 30% )
- nEncoding: Algoritmo de codificación:
- 0 = Alfabético: Codifica caracteres alfanuméricos (digitos 0-9; mayúsculas A-Z; otros nueve caracteres: Espacio $ % * + – . / : )
- 1 = Byte = 1: Codifica valores binarios ( 8-bit data)
- 2 = Numérico: Codifica unicamente valores numéricos (digitos 0-9)
- 3 = Kanji: Codifica caracteres Kanji. Los caracteres Kanji en Código QR pueden tener valores 8140-9FFC y E040-EBBF
- 4 = Auto: Selección automática del algoritmo de codificación. (Recomendado)
- nMarginPixels: Margen en pixeles
- nModuleWidth: Tamaño de los módulos en pixeles
- nHeight: Alto de la imagen en pixeles
- nWidth: Ancho de la imagen en pixeles
- FastQRCodeImage() es igual que el método FullQRCodeImage() y solo se pasa el texto a codificar. El resto se configura automáticamente, sin ningún control del usuario.
- tcText: Texto para codificar
- tcFile: Nombre del archivo de imagen que desea generar. Si no se especifica ninguno, se genera un nombre de archivo aleatorio en la carpeta de archivos temporales de Windows.
- GooQRCodeImage() recibe los mismos parámetros que los métodos anteriores para uniformar la clase:
- tcText: Texto para codificar
- tcFile: Nombre del archivo de imagen que desea generar. Si no se especifica ninguno, se genera un nombre de archivo aleatorio en la carpeta de archivos temporales de Windows.
- tnSize: El ancho y alto en pixeles de la imagen generada
- tnType: (solo por compatibilidad) La API solo genera archivo de imagen tipo 2 = PNG
Esta API nos permite ajustar algunas otras propiedades como:
- nCorrectionLevel: Nivel de corrección de errores :
- 0 = Nivel L ( 7 % )
- 1 = Nivel M ( 15 % )
- 2 = Nivel Q ( 25% )
- 3= Nivel H ( 30% )
- nMarginPixels: Margen en columnas
Todos estos métodos retornan la ruta y el nombre del archivo de la imagen generada con el código QR.
Ejemplos
En el siguiente ejemplo, se crean dos imágenes de Código QR, la primera con el método QRBarcodeImage() y la segunda con el método FullQRCodeImage():
SET PROCEDURE TO LOCFILE("FoxBarcodeQR.prg") ADITIVE *--- Crear un objeto FoxBarcodeQR LOCAL loFbc, lcQRImage loFbc = CREATEOBJECT("FoxBarcodeQR") *-- Utilizando la librería BarCodeLibrary.dll lcQRImage1 = loFbc.QRBarcodeImage("http://vfpx.codeplex.com/wikipage?title=FoxBarcode",,6,0) *-- Utilizando la librería QRCodeLib.dll (www.validacfd.com) loFbc.nBackColor = RGB(0,255,255) && Yelow loFbc.nBarColor = RGB(0,0,128) && Blue loFbc.nCorrectionLevel = 2 && Q 25% lcQRImage2 = loFbc.FullQRCodeImage("http://vfpx.codeplex.com/wikipage?title=FoxBarcode",,200,0)
Con BarCodeLibrary.dll
Con QRCodeLib.dll con mas opciones para configurar
A partir de ésta nueva versión 2.0 de FoxBarcodeQR se pueden codificar cadenas de caracteres mayores a 255 caracteres con la librería QRCodeLib.dll, y a partir de la versión 2.10 con la API de Google también. Ejemplo:
SET PROCEDURE TO LOCFILE("FoxBarcodeQR.prg") ADITIVE *--- Crear un objeto FoxBarcodeQR LOCAL loFbc, lcQRImage loFbc = CREATEOBJECT("FoxBarcodeQR") lcString = "+ .0010. -" DO WHILE LEN(lcString) < 500 lnI = LEN(lcString) + 10 lcString = lcString + "+ ." + TRANSFORM(lnI, "@L 9999") + ". -" ENDDO *-- Utilizando la librería QRCodeLib.dll (www.validacfd.com) lcQRImage = loFbc.FullQRCodeImage(lcString,,330) *-- Utilizando la API de Google lcQRImage2 = loFbc.GooQRCodeImage(lcString,,330)
Con QRCodeLib.dll
Con la API de Google
Para incluir un código de barras QR en un informe, se debe insertar un objeto Image y establecer la propiedad "ControlSource" con una llamada al método QRBarcodeImage(), FullQRCodeImage() o GooQRCodeImage(). Se recomienda ajustar "Escala de contenidos, mantener la forma" si el tamaño de la imagen difiere de la estructura.
Código QR en informes
Importante: Antes de ejecutar el informe y crear el objeto FoxBarcodeQR, se debe declarar la variable como PRIVATE de forma que ésta tenga alcance en el informe:
*--- Crear un objeto FoxBarcodeQR privado PRIVATE poFbc m.poFbc = CREATEOBJECT("FoxBarcodeQR") ... REPORT FORM FoxBarcodeQR PREVIEW
Distribución
Los únicos archivos necesarios para ser distribuidos para que FoxBarcodeQR funcione correctamente son:
- FoxBarcodeQR.prg
- BarCodeLibrary.dll
- QRCodeLib.dll (www.validacfd.com)
Notas sobre la distribución e instalación del archivo BarCodeLibrary.dll y QRCodeLib.dll:
- No se registran los archivos BarCodeLibrary.dll y QRCodeLib.dll. Debe estar ambos en la misma carpeta de la aplicación o en la carpeta del sistema de Windows.
- BarCodeLibrary.dll y QRCodeLib.dll fueron probados y funcionan en Windows XP, 7, 8 y 10 (32 y 64 bits)
Tengo ya en producción la versión 2.0!!! Simplemente bestial...
ResponderBorrarBuen día gente!, tengo un problema en un cliente, solo me pasa en uno de un montón, no me muestra un bmp en un reporte, es un QR que genero con las librerías foxbarcoedqr (qrcodlib y BarCodeLibrary), es con visual fox 6, a alguno le paso?, alguna idea?, aclaro que con el 7 y el 9 si se ven, lo que note de diferente
ResponderBorrares que en este cliente se genera el bmp de 16 bit y en los demás de 32, es un windows server 2008 r2,muchas gracias
Hola buenas Tardes, necesito una ayuda especial, el problema es el siguiente,genero un QR con:
ResponderBorrarDECLARE LONG URLDownloadToFile IN URLMON.DLL ;
LONG, STRING, STRING, LONG, LONG
=URLDownloadToFile(0, m.lcUrl, m.tcFile, 0, 0)
return m.tcFile
EL PROBLEMA ES QUE CUANDO EJECUTO LA APLICACIÓN EN EL ENTORNO DEL SISTEMA NO ME GUARDA/DESCARGA LA IMAGEN, EN CAMBIO CUANDO EL PRG LO CORRO DESDE EL ENTORNO DEL VFP LO GUARDA PERFECTAMENTE.-
LES VOY A AGRADECER SI ME PUEDEN AYUDAR.
MUCHAS GRACIAS
Alguien ha implementado la ver. 2.0 pero con Vfp advanced 10.1 64bit?
ResponderBorrar