Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Imprimir vista HTML renderizada con Twig

3 de noviembre de 2015

Saludos

Tengo una duda tengo esto en un controlador de symfony 2.7

$html = $this->renderView('document/_print.html.twig', array(
    'data' => $data,                   
));

Mi duda es cómo puede imprimir el contenido de $html.

Gracias.


Respuestas

#1

No entiendo muy bien la pregunta. El método renderView() ya te devuelve una cadena de texto con el contenido HTML renderizado. Para mostrar este contenido en una página HTML mediante JavaScript puedes usar cualquier método tradicional, desde el arcaico document.write() hasta el más común innerHTML().

@javiereguiluz

3 noviembre 2015, 22:44
#2

No me expliqué bien. Es que quiero enviarlo a imprimir. En este momento el documento aparece previsualizado, pero dentro de un layout principal.

Lo inserté de esta forma:

{{ render(controller('AppBundle:Controlador:printPreview', {'code': code })) }}

Además, cree un botón para imprimir en js.

window.print()

Lo que quiero es imprimir el contenido que devuelve esta action “printPreview”, la función de js imprime todo. Habrá una forma de imprimir solo eso.

Gracias.

@dariongg

3 noviembre 2015, 23:06
#3

He estado buscando un poco y al parecer, no hay una forma elegante de hacerlo. La mejor solución que he encontrado es la de este comentario de StackOverflow. Tendrías que encerrar el contenido en un elemento HTML:

<div id="imprimible"
    {{ render(controller('AppBundle:Controlador:printPreview', {'code': code })) }}
</div>

Y luego con CSS ocultar todo al imprimir salvo el elemento #imprimible:

@media print {
  body * {
    visibility: hidden;
  }
  #imprimible, #imprimible * {
    visibility: visible;
  }
  #imprimible {
    position: absolute;
    left: 0;
    top: 0;
  }
}

@javiereguiluz

4 noviembre 2015, 8:55
#4

Gracias, logré imprimir el documento correctamente. Pero todavía me surge una duda. Lo imprimo, pero quiero que después de imprimir cierre la sesión de usuario, para ello llamo a la ruta "logout".

Tengo esto en javascript:

function printDoc()
{
    window.print();
//    sleep(2000);
    var route = "{{ path('logout') }}";
    window.location = route;
//     window.location.href = route;
}

pero no me funciona. Imprime el documento pero no logro que se redireccione a logout.

comentando la parte de window.print(),

window.location o window.location.href, etcc. lo unico que hace es poner en la url esto {{ path("logout") }}

@dariongg

4 noviembre 2015, 15:51
#5

Primero debes comprobar que el valor de path('logout') es correcto. Aunque en tu caso no va a importar, cuando uses Twig para generar código JavaScript, acuérdate de escapar la información para JavaScript:

var route = "{{ path('logout')|e('js') }}";

Por otra parte, si usas una versión moderna de Symfony puedes usar el siguiente atajo para generar la URL para desconectarse del firewall actual:

var route = "{{ logout_path()|e('js') }}";

@javiereguiluz

4 noviembre 2015, 15:59
#6

Gracias use el mismo codigo

<script type="text/javascript">
 
        function printDoc()
        {            
            window.print();            
            var url = "{{ path('logout') | e('js') }}";
            document.location.replace(url);
        }
</script>

en la plantilla twig y funciono.

todavia tengo un pero,

window.print();  // Se ejecuta          
 
//----------------------------- NO se ejecuta
var url = "{{ path('logout') | e('js') }}";
document.location.replace(url);

Despues de imprimir no se ejecuta la redirección, pero si elimino window.print(), Si.

@dariongg

4 noviembre 2015, 16:28
#7

En esta respuesta de StackOverflow le recomiendan que espere un poco desde que se imprime la página hasta que se redirecciona. Es parecido a lo que tu haces, pero en vez de un sleep() usan un setTimeout().

@javiereguiluz

4 noviembre 2015, 16:31
#8

Gracias.

con setTimeout() funciona correctamente.


Esto no tiene nada que ver con el problema anterior, pero puede ser de ayuda para otra persona.

En mi caso tengo conexiones con 3 bd (1 mysql y 2 sql server), me paso que no reconnocia los acentos y ñ.

para eso se definio charset para cada conexion, el pero es que el para metro a recibir en este caso UTF 8, se debe escribe de diferente manera para mysql, que para ms sql server.

doctrine:
    dbal:
        connections:
            conexion1: // mysql
                charset: UTF8
            conexion2: // mssql
                charset: UTF-8

En este caso estoy utilizando symfony 2.7

@dariongg

4 noviembre 2015, 16:37