|
Página 1 de 1
|
¿como Hago Un Reporte En Un Pdf?
Autor |
Mensaje |
cyberx0x
Aprendiz
Registrado: Septiembre 2009
Mensajes: 63
Edad: 36 Ubicación:
|
¿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
|
#1 Viernes, 13 Noviembre 2009, 02:00 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
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
|
#2 Viernes, 13 Noviembre 2009, 10:35 |
|
|
cyberx0x
Aprendiz
Registrado: Septiembre 2009
Mensajes: 63
Edad: 36 Ubicación:
|
Re: ¿como Hago Un Reporte En Un Pdf?
Por desgracia en la documentación no aparece absolutamente nada asi que ni por donde empezar
|
#3 Sabado, 14 Noviembre 2009, 06:00 |
|
|
jsoto61
Aprendiz
Registrado: Octobre 2009
Mensajes: 94
Edad: 62 Ubicación: Las Palmas
|
Re: ¿como Hago Un Reporte En Un Pdf?
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
|
#4 Sabado, 14 Noviembre 2009, 11:54 |
|
|
ahtonio
Programador
Registrado: Octobre 2009
Mensajes: 144
Edad: 58 Ubicación: Zaragoza
|
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.
|
#5 Domingo, 15 Noviembre 2009, 20:51 |
|
|
Francis
Usuario
Registrado: Septiembre 2009
Mensajes: 15
Edad: 47
|
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.
|
#6 Domingo, 15 Noviembre 2009, 23:08 |
|
|
cyberx0x
Aprendiz
Registrado: Septiembre 2009
Mensajes: 63
Edad: 36 Ubicación:
|
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
|
#7 Domingo, 22 Noviembre 2009, 05:47 |
|
|
jguardon
Administrador
Registrado: Septiembre 2009
Mensajes: 2708
Edad: 57 Ubicación: Granada
|
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"
|
#8 Domingo, 22 Noviembre 2009, 12:00 |
|
|
jsoto61
Aprendiz
Registrado: Octobre 2009
Mensajes: 94
Edad: 62 Ubicación: Las Palmas
|
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
|
#9 Domingo, 20 Diciembre 2009, 12:36 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 1
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
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
|
|
|
|
|