Quiero imprimir un informe generado con Symfony y twig de más de 5000 páginas. Intenté imprimir con un comando de impresión en Firefox y Chrome, pero el navegador falla o se agota el tiempo de espera mientras carga el documento.
Sin embargo, hay otra opción en la que puedo iterar sobre un objeto y, para cada iteración, volver a cargar un iframe con contenido de página nuevo e imprimir. ¿Cómo puedo hacer esto con un comando de impresión sin llamar al cuadro de diálogo de impresión en cada iteración?
Este es mi escenario:
Opción 1:
Controlador Symfony:
public function printReports(Request $request, $from, $to) { // $bills = ....; $all_bills = $bills->loadAll(['from' => $from, 'to' => $to]); return $this->render('reports/print.all_bills.html.twig', [ 'bill_ids' => $all_bills //$all_bills can result in over 50000 pages ]); }Plantilla de ramita:
{% extends "base.html.twig" %} {% block body %} {% for bill in all_bills %} {% include 'pages/bills.front.html.twig' with { info: bill.info } %} {% include 'pages/bills.back.html.twig' with { content: bill.content } %} {% endfor %} {% endblock %}Opcion 2:
Controlador Symfony:
public function printReport(Request $request, $id) { // $bill = ....; $bill = $bill->loadById(['id' => $id]); return $this->render('reports/print.bill.html.twig', [ 'bill_id' => $bill //$bill results in 2 pages ]); }Plantilla de ramita:
{% extends "base.html.twig" %} {% block body %} {% include 'pages/bills.front.html.twig' %} {% include 'pages/bills.back.html.twig' %} {% endblock %}jQuery:
let ids = []; // may contain up to 3000 ids which prints 2 pages each $.each(ids, function (i, id) { // url to reload the iframe: 'print/bill/{id}' // reload the frame with each id and print the content of the frame // on load });Mi Opción 1 da como resultado un archivo grande que se agota o bloquea el navegador y mi Opción 2 dará como resultado múltiples iteraciones sobre las ID en javascript/jquery mientras se vuelve a cargar un iframe.
Resumen: