Generar pdf y guardarlo en base de datos.

196 views
Skip to first unread message

Antonio Jesus Rodriguez

unread,
Apr 16, 2012, 2:37:36 PM4/16/12
to symfo...@googlegroups.com
Hola!

Estoy haciendo una aplicación para una comunidad de vecinos, y lo que quiero conseguir es que al pulsar sobre el botón de crear una nueva junta, además de crear esta junta se genere un pdf con los datos de la junta y se guarde en mi base de datos, aunque en la base de datos supongo que lo que se guardará será una ruta al archivo.

Consigo generar un pdf en una nueva ruta con el bundle http://knpbundles.com/psliwa/PdfBundle así:


Acción que genera el pdf: 
/**
     * @Pdf()
     */
    public function crearpdfAction() {
        $format = $this->get('request')->get('_format');

        return $this->render(sprintf('UsuarioBundle:Default:crearpdf.%s.twig', $format)
        );
    }
Ruta donde lo muestro:

usuario_junta_nueva_pdf:
    pattern:  /juntas/nueva/pdf
    defaults: { _controller: UsuarioBundle:Default:crearpdf, _format: pdf }
    requirements:
          _format: pdf

Pero lo que quiero conseguir no es generar un pdf en una nueva ruta, sino que se genere un pdf autmáticamente y se guarde en la base de datos. Supongo que en mi controlador donde genero la nueva junta, después de validar el formulario se tendría que hacer todo esto, pero no sé como. Por ahora no le estoy pasando parámetros al pdf y lo genero con cualquier contenido.

Un saludo

Danny alfonzo Viana perez

unread,
Apr 16, 2012, 2:45:01 PM4/16/12
to symfo...@googlegroups.com
en que ubicación (logica) te queda el pdf generado? dentro del bundle? la idea es que lo muevas a una carpeta publica dentro de /web y solo guardes el nombre del pdf en un campo string de la entidad Junta, que luego ummm no se que hagas con esto.

PD: Ahora si lo que dices arriba es que ya lo generas y tienes la ruta, u se puede diferenciar de otros pdf's ejem: junta0002.pdf lo que debes es guardar esa url y enviarla por correo a los miembros o algo asi.

Antonio Jesus Rodriguez

unread,
Apr 16, 2012, 3:25:29 PM4/16/12
to symfo...@googlegroups.com
El pdf se genera en una nueva ruta .../usuario/juntas/nueva/pdf y no se guarda en ningún sitio, o eso creo. Eso sí, el pdf generado lo puedo guardar mediante botón derecho, "guardar como" en cualquier ubicación.

Pero la idea sería, que esto se hiciera automáticamente en la base de datos.

Danny alfonzo Viana perez

unread,
Apr 16, 2012, 3:37:52 PM4/16/12
to symfo...@googlegroups.com
ahhh ya se, lo que hace el bundle es GENERAR el pdf cada vez que llamas a un controlador por medio de esa ruta! dos cosas:

1.- ya lo tienes casi listo, lo que te falta es hacer que la ruta sea mas flezible, para que puedas generar muchos pdf, algo como pasar el numero de la junta
ejemp:  /usuario/juntas/nueva/pdf/001 /usuario/juntas/nueva/pdf/002 etc..
luego de eso guarda la ruta (url) en un campo STRING en tu entidad

2.- me preocupa cuando dices que el pdf se guardara en base de datos (la información que se depositara en el pdf es la que esta en base de datos, y cuando este se GENERA (el pdf), cada vez que llames a una url determinada, por eso la URL es la que se guarda en base de datos no el pdf) 

SALUDOS amigo, uso letras mayúsculas no por nada malo, sino para denotar que es un concepto importante

Antonio Jesus Rodriguez

unread,
Apr 16, 2012, 3:46:21 PM4/16/12
to symfo...@googlegroups.com
Según lo que me indicas, yo guardaría en mi base de datos la ruta a por ejemplo /usuario/juntas/nueva/pdf/001, pero claro esto no es permanente, ya que para que ese pdf estuviera ahí tendría que crear el pdf de nuevo cada vez que quiero consultarlo. Lo que estoy consiguiendo ahora es que se genere un nuevo pdf y mostrarlo en una ruta, pero al no estar guardándose el pdf en ningún sitio, aunque sea en una carpeta local, no puedo consultarlo.

La idea sería conseguir que en vez de generar el pdf en una ruta diferente cada vez, este pdf se guarde en algúna carpeta del bundle o algo así, y pasarle a un nuevo campo llamado ruta en la entidad Junta, la ruta hacia ese pdf generado.

No sé si me explico bien, de todas formas gracias por intentar ayudarme.

Danny alfonzo Viana perez

unread,
Apr 16, 2012, 3:58:15 PM4/16/12
to symfo...@googlegroups.com
Perfecto, entonces es algo parecido a cuando subes una foto, lo que yo hago es que tengo una entidad y un campo string en ella que se llama path_file, ahora yo logro mediante el formulario del usuario que la imagen que suben se guarde en /web/upload/avatar/ y en el campo string lo que guardo es el nombre de la imagen (4f848b7a65a86.jpg) y cuando voy a mostrar en la plantilla mi imagen hago lo siguiente:

<img src="{{ asset('uploads/videos/' ~ user.pathFile) }}" border=0 />

similar es lo que debes hacer, busca en la documentación del bundle como diseccionar donde se guardara el pdf (lógicamente) puede ser /web/juntasPdf/ y también como nombrar cada pdf de una manera única

y luego guardas este nombre.

Antonio Jesus Rodriguez

unread,
Apr 16, 2012, 5:11:07 PM4/16/12
to symfo...@googlegroups.com
Ok, me pongo a ello cuando tenga un poco de tiempo y comento si tengo alguna duda. Gracias por la respuesta en este tema y en el anterior que he abierto.

Antonio Jesus Rodriguez

unread,
Apr 17, 2012, 1:24:07 PM4/17/12
to symfo...@googlegroups.com
Bueno he estado investigando y esta son las conclusiones que he sacado:

El pdf se genera así:

public function crearpdfAction() {
        $format = $this->get('request')->get('_format');

        return $this->render(sprintf('UsuarioBundle:Default:crearpdf.%s.twig', $format) // Response
        );
    }

La línea marcada en amarillo devuelve un objeto response, pero mi idea es en vez de devolver ese objeto response con return hacer esto:

$respuesta = $this->render(sprintf('UsuarioBundle:Default:crearpdf.%s.twig', $format)

¿Como puedo convertir esa variable $respuesta que es un response a pdf y posteriormente almacenar ese pdf en alguna carpeta de mi bundle?

No sé si de la forma que lo estoy planteando es la correcto, pero lo que quiero hacer es que en vez de que me genere una vista .pdf.twig y me la muestre por pantalla, esa vista se convierta en objeto .pdf y almacenarlo en algún sitio.

Un saludo

Oswaldo Zárraga

unread,
Apr 17, 2012, 1:37:43 PM4/17/12
to symfo...@googlegroups.com
Una cosa es lo que devuelve la función, que lo puedes guardar en una variable y otra cosa son los procesos que ejecuta que probablemente es lo que construye el pdf. Por otro lado entiendo que la salida no es más que un flujo o un stream hasta que el cliente interpreta el encabezado que le envia el servidor y abre la aplicación asociada o el plugin del navegador asociado a la misma.

Espero le sea de utilidad.

--
Has recibido este mensaje porque estás suscrito al grupo "symfony-es" de Google Groups.
Para publicar en este grupo, envía un email a symfo...@googlegroups.com
Para darte de baja, envía un email a symfony-es+...@googlegroups.com
El resto de opciones puedes encontrarlas en http://groups.google.com/group/symfony-es?hl=es



--
______________
Oswaldo Zárraga
TSU. Informática Para la Gestión Social
+58416-718-5472

Rut Cortés

unread,
Dec 4, 2014, 8:55:18 AM12/4/14
to symfo...@googlegroups.com
Hola una pregunta, como hago para cambiarle el tamaño de la letra o de las celdas,desde donde toco, en config.yml..con que sentencias..necesito que el pdf se vea mas grande y el interlineado mas espaciado

Eldin SLopez

unread,
Feb 24, 2015, 11:36:49 AM2/24/15
to symfo...@googlegroups.com
Puedes guardar el HTML en un campo y cuando sea necesario generar de nuevo el PDF. no te complicas tanto.
Reply all
Reply to author
Forward
0 new messages