Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
¿como Hago Un Reporte En Un Pdf?
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje ¿como Hago Un Reporte En Un Pdf? 
 
Necesito un reporte de un programa solo es un digujo de un drawing area y el contenido de mis variables, gracias por su ayuda lo recompensare dando mi programa a la comunidad cuando este terminado
 



 
cyberx0x - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿como Hago Un Reporte En Un Pdf? 
 
Tienes que enlazar el módulo gb.pdf. Pruébalo, que es bastante intuitivo de usar.
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿como Hago Un Reporte En Un Pdf? 
 
Por desgracia en la documentación no aparece absolutamente nada asi que ni por donde empezar
 



 
cyberx0x - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿como Hago Un Reporte En Un Pdf? 
 
cyberx0x escribió: [Ver mensaje]
Por desgracia en la documentación no aparece absolutamente nada asi que ni por donde empezar


Yo estoy iigual que tu,...no se por donde empezar y me vendría muy bien poder imprimir informes en pdf, en los ejemplos que vienen con la aplicación de gambas hay uno dedicado "supuestamente" al tema, pero únicamente veo una imagen, muy bonita por cierto, de un cubo rotando con el logo de gambas en sus caras.
 



 
última edición por jsoto61 el Sabado, 14 Noviembre 2009, 12:05; editado 1 vez 
jsoto61 - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿como Hago Un Reporte En Un Pdf? 
 
Hola, el problema es simple una vez que lo comprendes y manejas el objeto Draw. Con Draw, puedes manejar un DrawingArea, PictureBox... y un objeto Printer, que viene con gb.Qt, no con gb.Gtk (Cuidado).
Aqui te dejo un codigo que encontre por los foros y puede explicartelo.



PUBLIC SUB mnupdf_Click()

 DIM fecha AS String
 DIM fecha2 AS String
 DIM fichero AS String
 DIM ficheropdf AS String
 DIM x AS Integer
 DIM y AS Integer
 DIM yinc1 AS Integer
 DIM yinc2 AS Integer
 DIM xinc1 AS Integer
 DIM xinc2 AS Integer
 DIM i AS Integer
 DIM codigo AS String
 DIM articulo AS String
 DIM cantidad AS String

 'generar un fichero con los artículos que hay en la bd

   fecha = Format(Now, "ddmmyyyy")
   fecha2 = Format(Now, "dd-mm-yyyy")
   fichero = "/tmp/temporal.ps"
   ficheropdf = User.home & "/Escritorio/articulosbd-" & fecha & ".pdf"

   Printer.copies = 1
   Printer.name = ""
   Printer.size = "A4"
   Printer.file = fichero

   Draw.Begin(printer)
   Draw.Font.name = "FreeSans"
   Draw.Font.size = 24
   Draw.Font.Bold = TRUE

   'cabecera********************************************************

   x = 250
   y = 400

   Draw.Text("ARTICULOS EN LA BD " & fecha2, x + 550, y)
   Draw.Font.size = 16

   yinc1 = 200
   xinc1 = 800
   xinc2 = 3700
   y = y + yinc1 + yinc1

   Draw.Text("CODIGO", x, y)
   Draw.Text("ARTICULO", x + xinc1, y)
   Draw.Text("PRECIO", x + xinc2, y)

   'cuerpo *************************************************************

   y = y + yinc1
   yinc2 = 100

   Draw.Font.size = 10
   Draw.Font.bold = FALSE

   FOR i = 0 TO contador

     IF (clvarticulos.Exist(i)) THEN
       codigo = clvarticulos[i][1]
       articulo = clvarticulos[i][2]
       cantidad = clvarticulos[i][3]

       Draw.Text(codigo, x, y)
       Draw.Text(articulo, x + xinc1, y)
       Draw.Text(cantidad, x + xinc2, y)
       'Draw.Text(CString(y), x + xinc2, y)

       y = y + yinc2

       IF (y > 6400) THEN 'debemos comenzar una nueva página

       'incluimos la cabecera y modificamos el valor de y

        printer.NewPage
        y = 400
        Draw.Font.size = 16
        Draw.Font.Bold = TRUE
        Draw.Text("CODIGO", x, y)
        Draw.Text("ARTICULO", x + xinc1, y)
        Draw.Text("PRECIO", x + xinc2, y)
        Draw.Font.size = 10
        Draw.Font.bold = FALSE
        y = y + yinc1

       ENDIF

     ENDIF

   NEXT

   Draw.End

   'convertimos el fichero ps a pdf

   SHELL "ps2pdf " & fichero & " " & ficheropdf WAIT

   Message.Info("Fichero generado en el escritorio")

 END




 Simplemente utiliza el objeto draw y el objeto printer (para utilizarlo
 tienes que incluir el componente gb-qt y quitar el gb-gui si lo tienes
 por que son incompatibles). Como ves hay que controlarlo todo, tanto el
 tamaño de la página, el tipo de fuente, etc, ..., las coordenadas donde
 escribes, si tienes que poner una nueva página, en fin, yo cuando hice
 este programa fue la forma que encontré para crear un documento.

 Saludos y espero que te sirva.

El código no es mio pero muchas gracias al autor, que ayudara a tantos.
 



 
ahtonio - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿como Hago Un Reporte En Un Pdf? 
 
Pues sí ese código es mío, y como dice el compañero fué un poco laborioso sacar el reporte en pdf. Aprovechando este hilo, si alguien conoce alguna otra forma de sacar contenidos similares en pdf, pero que sea un poco menos laboriosa, por favor que lo ponga aquí.

Saludos.
 



 
Francis - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿como Hago Un Reporte En Un Pdf? 
 
Y como paso lo de un drawingArea a un PDF o en su defecto a un html
 



 
cyberx0x - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿como Hago Un Reporte En Un Pdf? 
 
Pero has leido los mensajes anteriores?

Está bastante claro en el código... de todas maneras no es posible pasar de un drawingarea a html, tendrás que repasar las "lecciones" siguientes:

Reportes en HTML

Manejo de ficheros
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿como Hago Un Reporte En Un Pdf? 
 
He estado trabajando con el ejemplo de código que nos puso el amigo ahAntonio y lo he modificado para poder entender mejor su utilización, adjunto el resultado de mis pruebas por si a alguno le viniera bien. Para probarlo basta con crear un módulo nuevo, insertar el código adjunto y hacer una llamada desde cualquier sitio a ModNuevo.PruebaPDF. El resultado será un archivo pdf en nuestro escritorio con dos páginas, incluyendo título del informe en primera página, y cabecera en todas las demás. Espero que sea útil.


  PRIVATE x AS Integer
  PRIVATE y AS Integer
  PRIVATE yinc1 AS Integer
  PRIVATE yinc2 AS Integer
  PRIVATE xinc1 AS Integer
  PRIVATE xinc2 AS Integer
  PRIVATE TituloInforme AS String
  PRIVATE LongitudTitulo AS Integer
  
  CONST MARGEN_SUPERIOR AS Integer = 250
  CONST MARGEN_COLUMNA1 AS Integer = 400 'margen izquierdo de la primera columna
  CONST MARGEN_COLUMNA2 AS Integer = 800 'margen izquierdo de la segunda columna
  CONST MARGEN_COLUMNA3 AS Integer = 3600 'margen izquierdo de la tercera columna
  CONST TAMANIO_TITULO AS Integer = 24 'tamaño de la fuente para el título del informe
  CONST TAMANIO_CABECERAS AS Integer = 16 'tamaño de la fuente para las cabeceras del informe
  CONST SEPARACION_FILAS AS Integer = 100 'separación entre las filas del informe
  

PUBLIC SUB PruebaPDF()
  
  DIM FechaArchivo AS String 'fecha para el nombre del archivo a generar
  DIM FechaInforme AS String 'fecha para visualizar en informe generado
  DIM fichero AS String
  DIM ficheropdf AS String
  DIM i AS Integer
  DIM codigo AS String
  DIM articulo AS String
  DIM cantidad AS String

  'generar un fichero con los artículos que hay en la bd

  FechaArchivo = Format(Now, "ddmmyyyy")
  FechaInforme = Format(Now, "dd-mm-yyyy")
  fichero = "/tmp/temporal.ps"
  ficheropdf = User.home & "/Escritorio/pruebapdf-" & FechaArchivo & ".pdf"

   Printer.copies = 1 'número de copias que queremos imprimir
   Printer.name = "" 'nombre de la impresora
   Printer.size = "A4" 'tamaño del papel
   Printer.file = fichero 'indica que se va a imprimir en un fichero definido anteriormente
 
   Draw.Begin(printer) 'comienza el "dibujo" hacia la impresora definida
   Draw.Font.name = "FreeSans" 'tipo de letra que utilizaremos
   Draw.Font.size = TAMANIO_TITULO
   Draw.Font.Bold = TRUE
   Draw.LineStyle = 1 'líneas en estilo "solid"
   Draw.LineWidth = 10 'grosor de la línea
 
   'cabecera********************************************************
  'inicialización para los márgenes de impresión
   x = MARGEN_COLUMNA1
   y = MARGEN_SUPERIOR
  
   TituloInforme = "Ejemplo de informe en PDF " & FechaInforme
  
   Draw.Text(TituloInforme, x + 350, y) 'añadimos 350 puntos para centrar título
  
   Draw.Line(0, y + MARGEN_SUPERIOR, Printer.Width, y + MARGEN_SUPERIOR)
   yinc1 = 200
   xinc1 = MARGEN_COLUMNA2
   xinc2 = MARGEN_COLUMNA3
   y = y + yinc1 + yinc1  
  
   cabecera_paginas()
 
  'cuerpo *************************************************************

   y = y + yinc1
   yinc2 = SEPARACION_FILAS
 
   Draw.Font.size = 10
   Draw.Font.bold = FALSE
 
   FOR i = 0 TO 100 'con este bucle se imprime un informe con 100 filas (2 páginas)
 
       codigo = "código" & i
       articulo = "artículo" & i
       cantidad = "cantidad" & i
 
       Draw.Text(codigo, x, y)
       Draw.Text(articulo, x + xinc1, y)
       Draw.Text(cantidad, x + xinc2, y)
       y = y + yinc2
 
       IF (y > 6400) THEN 'debemos comenzar una nueva página

       'incluimos la cabecera y modificamos el valor de y
 
        printer.NewPage 'comenzamos impresión en nueva página
        y = MARGEN_SUPERIOR
        cabecera_paginas()
        Draw.Font.size = 10
        Draw.Font.bold = FALSE
        y = y + yinc1
 
       ENDIF
   NEXT

  Draw.End

   'convertimos el fichero ps a pdf
 
   SHELL "ps2pdf " & fichero & " " & ficheropdf WAIT
 
   Message.Info("Fichero generado en el escritorio")
  
END

PRIVATE SUB cabecera_paginas()

  Draw.LineStyle = 1 'líneas en estilo "solid"
  Draw.LineWidth = 5 'grosor de la línea
  Draw.Font.size = TAMANIO_CABECERAS
  Draw.Font.Bold = TRUE
  Draw.Text("CODIGO", x, y)
  Draw.Text("ARTICULO", x + xinc1, y)
  Draw.Text("PRECIO", x + xinc2, y)
  Draw.Line(x, y + 150, Printer.Width - MARGEN_COLUMNA1, y + 150)
  
END
 

 



 
última edición por jsoto61 el Domingo, 20 Diciembre 2009, 12:40; editado 1 vez 
jsoto61 - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes ¿como Funcionan Los Contenedores? jsbsan Controles/Librerías/Componentes 0 Sabado, 26 Diciembre 2009, 00:25 Ver último mensaje
jsbsan
No hay nuevos mensajes PictureBox Con Fondo Transparente. Como Hago? mil_arg General 7 Jueves, 07 Enero 2010, 23:22 Ver último mensaje
mil_arg
No hay nuevos mensajes Como Hago Para Crear Un Archivo XML /tmp jcontasti General 1 Jueves, 28 Octobre 2010, 21:51 Ver último mensaje
david
No hay nuevos mensajes No Agrega Ni Borra La Lista De Un Combobox... v3ctor Aplicaciones/Fragmentos de Código 3 Miercoles, 07 Enero 2015, 22:44 Ver último mensaje
jguardon
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron