Insertar un codigo QR o DataMatrix

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Avatar de Usuario
gustavodiaz00
Mensajes: 64
Registrado: Mié Abr 26, 2017 1:29 am
Ubicación: Argentina, San Nicolás de los Arroyos

Insertar un codigo QR o DataMatrix

Mensaje por gustavodiaz00 »

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

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) Descargado 291 veces
LibreOffice 6.1 en KDE Neon
Responder