Consulta sobre generación de QR

274 views
Skip to first unread message

acmc

unread,
Jan 3, 2025, 1:46:46 PM1/3/25
to Comunidad de Visual Foxpro en Español
Salu2 Foxeros!!
Alguién me puede sacar de la duda si FoxBarcodeQR requiere de conexión a internet?? en caso de que si, que opción hay para generar el QR sin conexión a internet? No se si QRCodeLib?  y de esta opción supongo que genera el código de cualquier texto que se requiera no? o solo es para el CFDI?

Agradeceré mucho sus comentarios y sugerencias.

Salu2 y Feliz inicio de año!!

Zarlu

unread,
Jan 3, 2025, 5:43:36 PM1/3/25
to Comunidad de Visual Foxpro en Español
Buenas tardes acmc!

En mis pruebas ni barcodelibrary.dll, ni qrcodelib.dll requirieron conexión de internet

Suerte
zarlu
Chetumal, Quintana Roo, México

Angel Perez

unread,
Jan 3, 2025, 5:45:47 PM1/3/25
to publice...@googlegroups.com
Gracias Zarlu.. y cual es la diferencia entre esas dos que mencionas? o cual me recomiendas mas?

Salu2!!

--
Blog de la Comunidad Visual FoxPro en Español http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito a un tema del grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/publicesvfoxpro/Rm4bulDUyvY/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver este debate, visita https://groups.google.com/d/msgid/publicesvfoxpro/fbf673dd-75f6-4cdb-a4ee-1ebab0f07ab2n%40googlegroups.com.

Zarlu

unread,
Jan 4, 2025, 8:15:06 AM1/4/25
to Comunidad de Visual Foxpro en Español
Buenos días acmc!

No tengo la experiencia para contestarte.
Sólo he usado, y muy poco,  QRCodeLib.dll para un texto pequeño de apenas 6 caracteres.
Quizá alguien del grupo más avezado en el tema podría opinar

Suerte
zarlu
Chetumal, Quintana Roo, México

Luis Maria Guayan

unread,
Jan 16, 2025, 5:54:43 PM1/16/25
to Comunidad de Visual Foxpro en Español
Hola, FoxBarcodeQR no necesita conexion a Internet. Solo si utilizas el método GooQRCodeImage() que utilizaba a API de Google, pero creo ya no está activa 

Mira la documentación en: https://sites.google.com/site/foxbarcode/foxbarcodeqr

 --

Luis María Guayán
YB (TUC) Argentina
_______________________________


Comunidad Visual FoxPro en Español
http://comunidadvfp.blogspot.com

Angel Perez

unread,
Jan 17, 2025, 11:34:41 AM1/17/25
to publice...@googlegroups.com
Muchas gracias por el dato y su tiempo!!

--
Blog de la Comunidad Visual FoxPro en Español http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito a un tema del grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/publicesvfoxpro/Rm4bulDUyvY/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a publicesvfoxp...@googlegroups.com.

Juan Gonzalez

unread,
Jan 17, 2025, 5:19:18 PM1/17/25
to publice...@googlegroups.com
mTexto = "lo que se va"
mUrl = "https://api.qrserver.com/v1/create-qr-code/?size=150x150&data=" + URLEncode(mTexto)
mArchivo = "codigo_qr.png"

* Crea el objeto WinHttpRequest
oHttp = CREATEOBJECT("WinHttp.WinHttpRequest.5.1")

* Abre la conexión con la URL
oHttp.Open("GET", mUrl, .F.)

* Envía la solicitud
oHttp.Send()

* Verifica si la respuesta fue exitosa (código 200)
IF oHttp.Status = 200
    * Abre el archivo en modo binario y guarda los datos
    oStream = CREATEOBJECT("ADODB.Stream")
    oStream.Open()
    oStream.Type = 1  && Establece el tipo de archivo binario
    oStream.Write(oHttp.responseBody)
    oStream.Position = 0
    oStream.SaveToFile(mArchivo, 2)  && Guarda el archivo con el nombre especificado
    oStream.Close()
    MESSAGEBOX("Código QR descargado y guardado como " + mArchivo)
ELSE
    MESSAGEBOX("Error al descargar la imagen, código de estado: " + TRANSFORM(oHttp.Status))
ENDIF

* Libera los objetos
RELEASE oHttp
RELEASE oStream

* Función para codificar la URL
FUNCTION URLEncode
    LPARAMETER tcString
    LOCAL lcEncodedString, lcChar, lnAsciiCode
    lcEncodedString = ""
   
    FOR i = 1 TO LEN(tcString)
        lcChar = SUBSTR(tcString, i, 1)
        lnAsciiCode = ASC(lcChar)
       
        * Si el carácter no es seguro para URL, codificamos en formato %XX
        IF lnAsciiCode < 48 OR (lnAsciiCode > 57 AND lnAsciiCode < 65) OR (lnAsciiCode > 90 AND lnAsciiCode < 97) OR lnAsciiCode > 122
            lcEncodedString = lcEncodedString + "%" + TRANSFORM(lnAsciiCode, "X2")
        ELSE
            lcEncodedString = lcEncodedString + lcChar
        ENDIF
    NEXT
   
    RETURN lcEncodedString
ENDFUNC



Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver este debate, visita https://groups.google.com/d/msgid/publicesvfoxpro/CACdxo6h6U1uqqWYBOo6%2BomW63VMYHJCmH5cPYPCXQ8e0fvOzbg%40mail.gmail.com.

gcard...@gmail.com

unread,
Jan 18, 2025, 2:26:22 PM1/18/25
to Comunidad de Visual Foxpro en Español
Saludos, si loque requieres es generar un QR de mas de 256 caracteres, como por ejemplo para facturacion electronica, desde foxpro, lo que yo hice fue hacer un pequeño programa en Python que lo haga, que reciba como parametro la cadena a convertir a QR y una ruta donde colocar la imagen, en python hay muchas librerias que hace eso de forma eficiente, yo utilize "qrcode" luego compile el script de python a exe con otra libreria: pyinstaller  (el exe queda con todas las dependencias que este requiere), y lo ejecuto desde vfoxpro via wscript, pasandole como 1er parametro la cadena a generar qr y la ruta del archivo png de salida.

por ejemplo esta cadena:

NumFac: EC02658
FecFac: 2024-12-31
HorFac: 13:06:01-05:00
NitFac: 93355451
DocAdq: 901845641
ValFac: 400000.00
ValIva: 76000.00
ValOtroIm: 0.00
ValTolFac: 476000.00
CUFE: 0e3f16546e3094935dd3cab9abbd851e407fe0ddd1ed5248a67a131d60ceb6ab36dd6c68fd2d1fb57b5394ee88eec658
https://catalogo-vpfe.dian.gov.co/document/searchqr?documentkey=0e3f16546e3094935dd3cab9abbd851e407fe0ddd1ed5248a67a131d60ceb6ab36dd6c68fd2d1fb57b5394ee88eec658

lo mejor es colocar la cadena en un archivo de texto y subirlo con filetostring

para evitar restricciones de tamaño de cadenas de vfoxpro

**instalar libreria qrcode
pip install qrcode[pil]

*CODIGO SCRIPT PYTHON
***************************************************>>>

import qrcode
import sys

# instalar qrcode pip install qrcode[pil]
# pip install pyinstaller
# generar ejecutable con  pyinstaller:  pyinstaller --onefile generar_qr.py

def generar_qr(texto, archivo_salida):
    """
    Genera un código QR a partir de una cadena de texto y lo guarda en un archivo de imagen.

    Args:
        texto (str): La cadena de texto que se codificará en el QR.
        archivo_salida (str): Nombre del archivo de salida para guardar el QR.
    """
    # Crear un objeto QR Code con configuración personalizada
    qr = qrcode.QRCode(
        version=None,  # Ajusta el tamaño del QR automáticamente
        error_correction=qrcode.constants.ERROR_CORRECT_L,  # Nivel de corrección de errores (L, M, Q, H)
        box_size=10,  # Tamaño de cada "cuadro" del QR
        border=4,     # Ancho del borde (en cuadros)
    )
   
    # Agregar el texto al código QR
    qr.add_data(texto)
    qr.make(fit=True)  # Ajustar tamaño automáticamente

    # Crear la imagen del QR
    img = qr.make_image(fill_color="black", back_color="white")
    img.save(archivo_salida)
    # print(f"Código QR generado y guardado como {archivo_salida}")

if __name__ == "__main__":
    # Verificar si hay suficientes argumentos
    if len(sys.argv) < 3:
        print("Uso: python generar_qr.py <cadena_de_texto> <nombre_archivo_salida>")
        print("Ejemplo: python generar_qr.py 'Hola Mundo' qr.png")
        sys.exit(1)

    # Obtener argumentos desde la línea de comandos
    texto = sys.argv[1]
    archivo_salida = sys.argv[2]

    # Generar el código QR
    generar_qr(texto, archivo_salida)

***************************************************>>>

**libreria para crear exe desde script de python
pip install pyinstaller

pyinstaller --onefile --noconsole generar_qr.py

**queda en una carpeta \dist\generar_qr.exe

*****************************************
* PRG PARA GENERAR QR CADENA LARGA DESDE UN ARCHIVO, USANDO EJECUTABLE CREADO CON PYTHON
****************************************
** EL ARCHIVO QR1.TXT CONTIENE LA CADENA A IMPRIMIR.....

xcadena=FILETOSTR("qr1.txt")

xcmd='generar_qr.exe "'+xcadena+'" c:\tmp\imagenqr.png'  

=ejecuta(xcmd,0)

RETURN

*---------------------------------------------------
FUNCTION Ejecuta(cComando, iStatus)
*---------------------------------------------------
*!* Esta funcion ejecuta un comando de DOS indicado
*!* como primer parámetro, el segundo es el estilo
*!* de la ventana a utilizar, ver el sig. listado
*!* entEstiloVentana Descripción
*!* 0 Oculta la ventana y activa otra.
*!* 1 Activa y muestra una ventana. Si la ventana está minimizada o maximizada, el sistema la restaura con su posición y tamaño originales.
*!*             Una aplicación debe especificar este indicador cuando muestre la ventana por primera vez.
*!* 2 Activa la ventana y la muestra minimizada.
*!* 3 Activa la ventana y la muestra maximizada.
*!* 4 Muestra una ventana con su tamaño y posición más recientes. La ventana activa permanece activa.
*!* 5 Activa la ventana y la muestra con su tamaño y posición actuales.
*!* 6 Minimiza la ventana especificada y activa la siguiente ventana de mayor nivel en orden Z.
*!* 7 Muestra la ventana minimizada. La ventana activa permanece activa.
*!* 8 Muestra la ventana en su estado actual. La ventana activa permanece activa.
*!* 9 Activa y muestra la ventana. Si la ventana está minimizada o maximizada, el sistema la restaura con su posición y tamaño originales.
*!*             Una aplicación debe especificar este indicador cuando se restaure una ventana minimizada.
*!* 10 Establece el estado de presentación a partir del estado del programa que inició la aplicación.
*----------------------------------------------------
  TRY
    oShell = createobject("WScript.Shell")
    oShell.Run(cComando,iStatus,.T.)
  CATCH TO xEcepcion
    lsErrorEcepcion = "No se pudo ejecutar: "+cComando+ " RS:"+TRANSFORM(xEcepcion.ErrorNo) + CHR(13)+CHR(10)+  "Mensaje: " + xEcepcion.Message
    Messagebox(lsErrorEcepcion,16,"Lector QR")
  FINALLY
    *  
  ENDTRY  
ENDFUNC

COMUNICATE conmigo y te envio el genera_qr.exe YA COMPILADO O LO GENERAS TU

Espero le sirva a la comunidad
GUIDO CARDONA

Gabriel Gomez M

unread,
Jan 18, 2025, 4:58:10 PM1/18/25
to publice...@googlegroups.com

Buenas tardes, no es necesario el Internet depende cual es origen del qr es un texto. Me dices para orientarte


Fabian Toro

unread,
Jan 18, 2025, 8:22:07 PM1/18/25
to publice...@googlegroups.com
Reply all
Reply to author
Forward
0 new messages