Apúntate...


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

domingo, 6 de enero de 2013

Imprimir en Gambas3: Con Html, Objeto Printer, gb.Report, classLatex ( Reportes )

En este post, veremos varias formas de imprimir y hacer reportes con Gambas

Método 1: Con Html

Es una forma indirecta de conseguir realizar informes, pero si sabes html y css, te puede servir para conseguir buenos resultados.

Este método consiste en crear o usar una plantilla hecha en html, la cual la rellenamos con los datos con los cuales queremos hacer el informe, y podemos verlo en nuestro navegador o directamente hacer un pdf (mediante el programa wkhtmltopdf).

Vamos a hacer un ejemplo muy simple:
Construimos un nuevo proyecto, al que añadimos un textArea, con el nombre "TextArea1" y un boton al que llamaremos "ButtonImprimir".
Añadimos el siguiente código :

Public Sub ButtonImprimir_Click()
Dim cadena As String
cadena = "<html><body>"
cadena &= TextArea1.text
cadena &= "</body></html>"
File.Save(User.home & "/texto.html", cadena)
Exec ["wkhtmltopdf", User.home & "/texto.html", User.home & "/texto.pdf"] Wait
Exec ["evince", User.home & "/texto.pdf"]
End


Al ejecutarlo,  si pulsamos el boton "imprimir", abriremos el pdf (texto.pdf) con evince (el visor que viene por defecto en gnome de pdf), obtendremos un salida como esta:
Simplemente se escribe lo que haya en el textarea.

Si escribimos en el textarea el siguiente código:
<h1>Hola</h1><br>
Esto es un texto de <b>prueba</b> de informe en html.</br>

El resultado del pdf obtenido es el siguiente:
Como veis es sencillo, sabiendo html realizar informes. Si además le añades hojas de estilos (css), prodeis conseguir mejores resultados.

Descarga del código fuente del ejemplo: enlace de descarga


Ejemplo de clase para imprimir resultados de consultas de bases de datos:
http://jsbsan.blogspot.com.es/2012/04/informehtml-crear-informes-rapidos-de.html


Nota:
Para instalar  wkhtmltopdf:
$sudo apt-get install wkhtmltopdf


Nota: 24/7/2014 (new)
En algunas páginas html, da problema el wkhtmltopdf, para resolverlo podemos usar un plugin para firefox, que imprimen exactamente como sale en la pantalla del navegador.
Por ejemplo con  Screengrab (fix version)
link: https://addons.mozilla.org/en-US/firefox/search/?q=screengrab&appver=28.0&platform=linux





Método 2: El objeto Printer




La forma más básica para imprimir en gambas, es usar la clase Printer.

Es parecido a dibujar en una clase drawingArea:

-->
Public Sub Printer1_Draw()
Dim PRINT_MARGIN As Float = Paint.Width / Printer1.PaperWidth * 10
Dim docV As String
docV = TextArea1.Text 'texto a escribir
Paint.Font = Font["Courier"]
Paint.DrawRichText(docV, PRINT_MARGIN, PRINT_MARGIN - (Printer1.Page - 1) * (Paint.Height - PRINT_MARGIN * 2), Paint.Width - PRINT_MARGIN * 2, Paint.Height * Printer1.Count, Align.TopNormal)
End

Y en el boton de imprimir:
-->
Public Sub ButtonImprimir_Click()
Me.Enabled = False
Inc Application.Busy
Printer1.Print
Dec Application.Busy
Me.Enabled = True
End

Captura de pantalla del ejemplo del objeto Printer, formulario y salida en impresora pdf:


 Código Fuente: UsandoPrinter.0.0.1.tar.gz
 
Fuente: http://www.gambas-es.org/viewtopic.php?f=5&p=15905#p15905

Método 3: gb.report 

El componente gb.report, se pueden diseñar gráficamente el contenido de la página del informe que hagamos:
 Willicab, hizo en su blog un magnifico ejemplo de creación de reporte de bases de datos con gb.repot desde "cero".  Os dejo la dirección url, para que lo podais consultar:
 Fuentes:
http://willicab.gnu.org.ve/tutogambas-6-crear-reportes-usando-el-componente-gb-report-en-gambas3-12/
http://willicab.gnu.org.ve/tutogambas-7-crear-reportes-usando-el-componente-gb-report-en-gambas3-22/


Copia espejo:
willicab: gb.report 1 de 2
willicab: gb.report 2 de 2
ejemplo gb.report

Método 4: Clase ClassLatex

Esta clase es un intento por mi parte de añadir otra forma de crear informes, aprovechando la potencia de Latex, y la simplicidad de Gambas para poder programar informes (tanto de bases de datos, gridviews), como documentos completos (insertando imñagenes, destintos tipos de letras, tañamos, índices de contenido, bibliografía, pie de páginas, cabeceras y pies de paginas, etc.)

En esta entrada de mi blog podeis encontrar como usarla y el código fuente:
Fuente: http://jsbsan.blogspot.com/2013/01/creacion-de-informes-la-clase-latex.html
Ejemplo de documento que se puede generar:




Copia Espejo:
Pagina web: post de la clase classlatex
Código fuente: la clase classlatex 0.0.4.tag.gz


Nota:
Para usar la clase classlatex, tienes que tener el paquete pdflatex (por ejemplo viene en la instalación de texmaker)







8 comentarios:

  1. Hola. Muy buen post.
    Has usado el metodo report.print?
    Cuando lo trato de usar me dice que hace falta informacion.

    ResponderEliminar
    Respuestas
    1. No, la verdad es que apenas he uso el gb.report. He encontrado muy poca información sobre este componente y pocos ejemplos (el de Willicab es el mejor), visita su blog, a ver si el te puede aclarar más cosas

      Eliminar
  2. Respuestas
    1. ¿que metodo de impresion estas usando?, En esta entrada explico varios métodos para imprimir, en cada uno se hace de distinta manera el incluir imágenes.

      Eliminar
    2. el de objeto printer pero solo paso el texto por que texto es de tipo string y ya he intentado con picture pero no sirve no pasa por favor necesito ayuda

      Eliminar
    3. +Kenedy Cruz Miranda He hecho un ejemplo de impresion de imagenes y texto con printer, lo puedes ver en http://jsbsan.blogspot.com.es/2015/04/el-objeto-printer-imprimir-una-imagen-y.html

      Eliminar
    4. Gracias Hermano!!! pense que no existia esa opcion por que colocaba dim imagen as picture y era image

      Eliminar
  3. Yo estoy usando el método de impresión con latex y va de maravilla con la clase que tuviste a bien compartir. !!! Pero me surgió un problema: Al intentar imprimir una tabla de datos mediante TablaGridview. Solo imprime el contenido de la primer hoja. Si son mas de 61 filas, no aparece lo demás, no se si alguien podría ayudarme.

    ResponderEliminar

A falta de donativos... un poco de publicidad