> Faqs > Ejecutar el código Javascript al generar PDF con dompdf en Laravel

Ejecutar el código Javascript al generar PDF con dompdf en Laravel

Estoy tratando de generar un PDF con dompdf en Laravel 5.1 pero tengo un problema cuando carga el contenido html. Al parecer no termina de cargar por completo partes que agrego al contenido html desde Javascript haciendo uso de:

$('#contenido_tabla').append(insertar_tabla);

Cuando realizo un return $view; en mi controlador antes de generar el pdf, todo parece estar bien, carga el contenido correctamente.

El problema surge cuando hace el loadHTML. El contenido mencionado ya no aparece.

Tal vez estoy cometiendo algún error o quizá no es posible por algún factor, estoy atento a cualquier colaboración gracias de antemano

Este es parte de mi codigo en el controlador:

$datos = Datos::find($id);

$view =  view('pdf/informe_pdf', ['datos'=>$datos,'request'=>$request])->render();  
//return $view;
$pdf = \App::make('dompdf.wrapper'); 
$pdf->loadHTML($view)->setPaper('letter', 'portrait');  
return $pdf->stream('informe.pdf');

Respuestas

Las vistas que procesas al volcar los datos con la librería de DOMPDF no ejecutan el Javascript.

No se me ocurre mucho que puedas hacer para que se ejecute y se procese ese Javascript, presentando el resultado en la página, la verdad, ya que nunca se va a ejecutar el código al convertirse el HTML a PDF.

La única solución, me temo, sería que realizases en PHP los procesos de Javascript, realizando las conversiones en el documento en el lado del servidor, antes de procesar el HTML para generar el PDF.

Es un trabajo extra, pero creo que no hay mucha opción.

Opción $isJavascriptEnabled

Existe una opción de configuración de DOM PDF llamada $isJavascriptEnabled que puedes encontrar en la documentación de DOMPDF.

Sin embargo esa opción no procesa el Javascript como tú querrías para volcarlo como contenido en el PDF. Más bien es una posibilidad de crear Javascript que el cliente de lectura del PDF podría ejecutar, pero dependería del programa con el que lees el PDF y creo que generalmente ignorarán ese código.

Mira el propio código de DOMPDF donde explican esa propiedad de configuración que igual te aclara algo más.

/**
 * Enable inline JavaScript
 *
 * If this setting is set to true then DOMPDF will automatically insert
 * JavaScript code contained within <script type="text/javascript"> ... </script>
 * tags as written into the PDF.
 *
 * NOTE: This is PDF-based JavaScript to be executed by the PDF viewer,
 * not browser-based JavaScript executed by Dompdf.
 *
 * @var bool
 */
private $isJavascriptEnabled = true;
Julian
1100 46 84 45