¿como Hago Un Reporte En Un Pdf?


Objetivo: ¿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

Perfil MP  
Objetivo: Re: ¿como Hago Un Reporte En Un Pdf?
Tienes que enlazar el módulo gb.pdf. Pruébalo, que es bastante intuitivo de usar.

Perfil MP  
Objetivo: Re: ¿como Hago Un Reporte En Un Pdf?
Por desgracia en la documentación no aparece absolutamente nada asi que ni por donde empezar

Perfil MP  
Objetivo: 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
Perfil MP  
Objetivo: 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.

Perfil MP  
Objetivo: 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.

Perfil MP  
Objetivo: 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

Perfil MP  
Objetivo: 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

Perfil MP  
Objetivo: 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
Perfil MP  

Página 1 de 1


  
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

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.4842s (PHP: -48% SQL: 148%)
Consultas SQL: 47 - Debug off - GZIP Activado