Insertar un codigo QR o DataMatrix

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...

Insertar un codigo QR o DataMatrix

Notapor gustavodiaz00 » Sab Nov 25, 2017 7:32 am

Hola a todos

Estube buscando alguna forma de colocar un código QR o DataMatrix en unas planillas en las que estoy trabajano y me topé con algo ineresante.

Utilizo un servicio web generador de códigos donde se le pasa el texto que se quiere codicar y la respuesta la captura y la inserta en la celda seleccionada.

La idea de colocar un QR o DataMatrix puede servir por ejemplo para colocar un enlace en la planilla ej (Obtener Ayuda) y si se esta en la PC te deriva a la página de ayuda pero si estas viendo la planilla impresa podés escanear el código con una plicación en el celular e ir directamente a la página de ayua. Otra idea podría ser colocar un código en las tarjetas de presentación y cuando se escanea te deriva a la página de la empresa, o ágina personal, etc.

Bueno no los aburro mas y aca les dejo el código y un ejemplo.

Código: Seleccionar todo   Expandir vistaContraer vista
REM  *****  BASIC  *****

Sub Main
   
   if not Estoy_Conectado then ' verifico si estoy conectado a internet
    exit sub
   end if

   TEXTO = ThisComponent.getSheets.getByName("Sheet1").getCellByPosition(1,2 ).String ' Leo la cadena a codificar
        
   Texto_Titulo = " "           
   
   msgbox "Texto a codificar:" & Chr(10) & Chr(10) & TEXTO  ' Muestro la cadena
   
   oRango = ThisComponent.getCurrentController.getActiveSheet().getCellRangeByName( "C3" )
   ThisComponent.getCurrentController.select( oRango )
   
   Texto_Titulo = "QrCode " & Texto
   encode_i_nigma(Texto,Texto_Titulo, "Q")
   
   oRango = ThisComponent.getCurrentController.getActiveSheet().getCellRangeByName( "E3" )
   ThisComponent.getCurrentController.select( oRango )
   
   Texto_Titulo = "Code DataMatrix " & Texto
   encode_i_nigma(Texto,Texto_Titulo, "D")
   
   oRango = ThisComponent.getCurrentController.getActiveSheet().getCellRangeByName( "C5" )
   ThisComponent.getCurrentController.select( oRango )
   
   chart_apis_google(Texto)
   
   oRango = ThisComponent.getCurrentController.getActiveSheet().getCellRangeByName( "E5" )
   ThisComponent.getCurrentController.select( oRango )
   
   Insert_Image("https://forum.openoffice.org/es/forum/styles/prosilver/imageset/logo_forum_es.png")
   
   oRango = ThisComponent.getCurrentController.getActiveSheet().getCellRangeByName( "A1" )
   ThisComponent.getCurrentController.select( oRango )
   
   
End Sub

function Estoy_Conectado As boolean
Dim Conexion As Boolean

Conexion = True

oGoogle = "http://google.com"
oSFA = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")
if oSFA.exists(oGoogle)= false then
  MsgBox ("No se puede acceder a " & oGoogle & chr(10) & "Verifique su conección")
  Conexion = false
endif

Estoy_Conectado = Conexion

end function

sub encode_i_nigma(Encode_Texto, Texto_Titulo, Qr_DataM)

if len(Encode_Texto) < 1 then
  msgbox "Cadena Vacía."
  exit sub
elseif len(Encode_Texto) > 1950 then
  msgbox "Excedió el límite max de 1950 caracteres."
  exit sub
end if

ImgUrl = ""
 
If UCase(Qr_DataM) = "D" Then
  ImgUrl =ConvertToURL("http://encode.i-nigma.com/DMtrx/img.php?d="& Encode_Texto &"&c="& Texto_Titulo &"&s=6")
end if
If UCase(Qr_DataM) = "Q" Then
  ImgUrl =ConvertToURL("http://encode.i-nigma.com/QRCode/img.php?d="& Encode_Texto &"&c="& Texto_Titulo &"&s=6")
end if

If ImgUrl = "" Then
  msgbox " Error use D Para DataMatrix o Q para QR"
  exit Sub
end If

Insert_Image(ImgUrl)

end sub

sub chart_apis_google(Encode_Texto)

sURL = "http://chart.apis.google.com/chart?cht=qr&chs="
ImgUrl = ConvertToURL(sURL & "300x300" & "&chl=" & Encode_Texto & "&choe=UTF-8" )

Insert_Image(ImgUrl)

end sub

Sub Insert_Image(ImgUrl)
 
dim document   as object
dim dispatcher as object

document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

dim args1(3) as new com.sun.star.beans.PropertyValue
args1(0).Name = "FileName"
args1(0).Value = ImgUrl
args1(1).Name = "FilterName"
args1(1).Value = "<Alle formater>"
args1(2).Name = "AsLink"
args1(2).Value = false
args1(3).Name = "Style"
args1(3).Value = "Grafik"

dispatcher.executeDispatch(document, ".uno:InsertGraphic", "", 0, args1())

end sub



PD: La función que inserta el código también sirve para insertar imágenes directamente de la web. Lo único que hay que hacer es pasar como parámetro es la direcceción del enlace.

QrCode - DataMatrix.ods
(12.76 KiB) 83 veces
LibreOffice 5.3.5.2 en opensuse leap 42.3
Avatar de Usuario
gustavodiaz00
 
Mensajes: 44
Registrado: Mié Abr 26, 2017 1:29 am
Ubicación: Argentina, San Nicolás de los Arroyos

Volver a Macros y API UNO

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 7 invitados