FoxBarcodeQR
FoxBarcode y FoxBarcodeQR son parte de VFPx, un proyecto de la Comunidad Mundial de Visual FoxPro para crear complementos de código abierto para Visual FoxPro 9.0.
Las páginas principales de ambos proyectos VFPx son:
Las últimas versiones:
Última versión FoxBarcode: 1.19 lanzada el 21/05/2019 Aquí
Última versión FoxBarcodeQR: 2.10 lanzada el 27/02/2021 Aquí
En memoria de
Guillermo Carrero
(05/02/1961 - 14/01/2013)
FoxBarcodeQR
FoxBarcodeQR es una aplicación de software libre que ofrece una herramienta de código de barras para la comunidad de Visual FoxPro. Es un complemento de la clase FoxBarcode sólo para códigos QR.
FoxBarcodeQR utiliza las librerías BarCodeLibrary.dll (Darío Álvarez Aranda, México) , a partir de la versión 2.0 de FoxBarcodeQR utiliza QRCodeLib.dll (www.validacfd.com) agregando soporte para codificar mas de 255 caracteres y mayor control en la generación del código QR, y a partir de la versión 2.10 utiliza la API de Google (https://developers.google.com/chart/infographics/docs/qr_codes) para generar los códigos QR.
Puede escoger mediante distintos métodos cual librería utilizará.
Esta clase es una solución alternativa para todos los desarrolladores que solicitaron soporte para el Código QR con la clase FoxBarcode.
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 (recomendada)
Genera códigos QR funcionales con un mayor control de configuración.
Soporta cadenas de mas de 255 caracteres.
La librería BarCodeLib.dll (versión 0.1b - www.validacfd.com ) 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.
Google API
Genera códigos QR a través de una llamada POST a una URL, por lo que 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:
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.
A partir de la versión 2.10 de FoxBarcodeQR se agregó un nuevo método que utiliza la API de Google:
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("https://comunidadvfp.blogspot.com",,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("https://comunidadvfp.blogspot.com",,198,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 con la API de Google. 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(), FastQRCodeImage() o GooQRCodeImage(). Se recomienda ajustar "Escala de contenidos, mantener la forma" si el tamaño de la imagen difiere de la estructura.
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)
Agradecimientos
A mi amigo Guillermo que me iluminó desde el cielo para realizar este complemento para nuestra clase FoxBarcode.
A www.validacfd.com por su librería QRCodeLib.dll.