17 de noviembre de 2020

Códigos QR con FoxBarcodeQR v.2.10

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 utiliza las librerías:

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.
La API de Google genera códigos QR  a través de una llamada POST a una URL:
  • 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.dllQRCodeLib.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:

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)

4 comentarios :

  1. Tengo ya en producción la versión 2.0!!! Simplemente bestial...

    ResponderBorrar
  2. Buen 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
    es 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

    ResponderBorrar
  3. Hola buenas Tardes, necesito una ayuda especial, el problema es el siguiente,genero un QR con:
    DECLARE 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

    ResponderBorrar
  4. Alguien ha implementado la ver. 2.0 pero con Vfp advanced 10.1 64bit?

    ResponderBorrar

Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.