Dedicado a mis proyectos en Gambas ,un lenguaje de programación parecido al Visual Basic + Java pero ampliamente mejorado y...¡¡para gnu/linux!!.La potencia del gnu/linux sumada a la facilidad del Basic



Consultas, Desarrollo de programas y petición de presupuestos:



domingo, 6 de enero de 2013

Creación de Informes: La clase Latex


Llevo varias entradas, comentadoos, pequeñas herramientas para crear informes:

Aunque esta el gb.Report (que para mí nunca ha sido fácil de usar), una de las cosas que he echado en falta, era algo realmente cómodo y fácil de usar, para generar informes en nuestras aplicación.

Pues, después de ver varios videos sobre texmaker (enlace), pensé en hacer una clase que aprovechara la potencia de Latex, para crear documentos y convertirlos en Pdf.

Os dejo aqui (enlace de descarga (versión ejemplo del video)) una aplicación de ejemplo de esta clase llamada ClassLatex, es muy sencilla de usar, y permite:
  • -Definir Cabeceras y Pies de páginas
  • -Insertar imagenes, con escalado y/o rotación
  • -Cajas
  • -Cajas de distintos marcos
  • -Cajas con icono y mensaje de distintas formas
  • -Citas y Bibliográficas
  • -Notas a pie de página
  • -Se pueden indicar anchos verticales y horizontales.
  • -Para poder añadir usepackage no incluidos inicialmente en la clase.
  • -HojaApaisadaInicio: (te escribe la pagina en apaisado (por si la tablas tienen muchas columnas)
  • - HojaApaisadaFin: (fin de la hoja en apaisado..)
    -Crear listas, secciones, subrayado, negrita, centrado de texto, etc.
  • -Tamaño de texto y tipo de letras 
Y tambien se puede introducir código directamente formateado como Latex (por ejemplo para introducir formulas)

Y especialmente estos dos métodos,
  • - ResultadoConsultaDB: Muy útil, ya que le pasas el resultado de una consulta de base de datos, y te muestra la tabla de resultados, con los nombres de campos de las consultas en la primera fila... 
  • - TablaGridview: escribe una tabla con los datos que tenga el gridview
  •  
    Videos tutoriales:                            1º Parte
 

2º parte


Aquí tenéis parte del código del ejemplo para crear un documento:
--> Dim documento As New ClassLaTex
Dim tex As String
Dim parrafada As String
Me.center
documento.Cabecera("Cabecera:izquierda", "Cabecera:centro", "Cabecera:derecha")
documento.Pie("Pie:izquierda", "Pie:centro", "Pie:derecha" & documento.numeropagina())
tex &= documento.LineaJustCentrado(documento.Tam3LargeP("Ejemplo de uso"))
tex &= documento.vspace(1.5) 'añado espacio entre las lineas
tex &= documento.LineaJustCentrado(documento.Tam4Huge("Clase ClassLatex"))
tex &= documento.vspace(1.5)
tex &= documento.LineaJustCentrado(documento.Tam2Large("Autor: JsbSan"))
tex &= documento.vspace(0.5)
tex &= documento.LineaJustCentrado(documento.fecha())
tex &= documento.vspace(3)
tex &= documento.texto("Esto es una prueba de uso de la clase ClassLaTex.")
.....
.....
tex &= documento.tiposmallCaps("hola esto es una prueba" & documento.Cita("David"))
tex &= documento.CrLf()
tex &= documento.Tipoitalica("Esto es talica" & documento.Cita("Juan"))
tex &= documento.CrLf()
tex &= documento.negrita("Esto es en negrita" & documento.NotaPieDePagina("nota: esta escrito en negrita"))
tex &= documento.subrayado(" y esto subrayado")
tex &= documento.texto("siento esto la letra normal")
tex &= documento.CrLf()
tex &= documento.LineaJustIzq("justificado a la izquierda")
tex &= documento.LineaJustCentrado("Centrado")
........
tex &= documento.texto("$$\\int_{x=0}^{\\infty} x\\,{\\rm e}^{-x^2} {\\rm d}x =\\frac{1}{2},\\quad {\\rm e}^{i\\pi}+1=0$$")
tex &= documento.CrLf()
tex &=documento.texto("Muestro datos de un gridviews:")
tex &=documento.CrLf()
tex &=documento.TablaGridViews(gridview1)
tex &= documento.CrLf()
tex &= documento.finPagina()
tex &= documento.HojaApaisadaInicio()
tex &= documento.texto("Consulta de una base de datos: ")
tex &= documento.CrLf()
tex &= documento.ResultadoConsultaDB(resultados,False)
tex &= documento.CrLf()
tex &= documento.texto("Ahora tambien puede escribir documentos en apaisado, sobre todo para tablas que tengan muchas columnas, puede ser muy útil ¿verdad?")
tex &= documento.HojaApaisadafin()
tex &= documento.finPagina()
tex &= documento.TablaDeContenido()
tex &= documento.finPagina()
tex &= documento.texto("Listas")
tex &= documento.CrLf()
tex &= documento.ListaEnumeradaInicio()
tex &= documento.ListaDato("lista 1")
tex &= documento.texto("Hola esto es el párrafo de la lista 1")
tex &= documento.ListaDato("lista 2")
tex &= documento.texto("Hola esto es el párrafo de la lista 2. Bienvenido")
tex &= documento.ListaEnumeradaFin()
tex &= documento.texto("Secciones:")
tex &= documento.CrLf()
tex &= documento.Seccion("Inicio")
tex &= documento.Seccion("Medio")
.....
tex &= documento.grafica(Application.Path & "/Dama.png", 0.5, 35)
tex &= documento.cajaMensaje(parrafada, 4)
tex &= documento.CajaIcono("titulo de la caja", "Esto es el texto largo",Application.Path &"/Dama.png", 0.5, 35, 4)
.... documento.BibliografiaFin()

 'generamos el documento
documento.compila(tex,"prueba")
y una captura:
 
Este es el pdf de ejemplo que se crea en el ejempo: descarga pdf

 Nota:
El código de esta clase es extremadamente sencillo, y es fácil portar a otros lenguajes: c++, java, python, etc..
 Fuente: Enlace al foro gambas-es.org: