tutorial - DOMPDF no funciona con el archivo css externo
tutorial dompdf (2)
Estoy usando Zend Framework y la biblioteca DOMPDF. Cuando lo pruebo con css en línea, todo funciona perfectamente. Pero cuando traté de mover el código css a las reglas de archivos externos, no se aplican a la página html.
Aquí está mi código.
- Código de acción del controlador, que genera pdf
require_once ("DomPdf / dompdf_config.inc.php");
$this->_helper->layout->disableLayout();
$html = $this->view->render(''index/dom.phtml'');
$dompdf = new DOMPDF();
$dompdf->load_html($html);
$dompdf->render();
$pdfContent = $dompdf->output();
file_put_contents(''sample.pdf'', $pdfContent);
die("test");
2. Código de vista correspondiente (index / dom.phtml)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link type="text/css" href="/themes/css/pdf.css" rel="stylesheet" media="screen"/>
</head>
<body>
<div>Tamara testing</div>
<table border="1">
<tr>
<th>Column 1</th>
<th>Column 2</th>
</tr>
<tr>
<td>Value 1</td>
<td>Value 2</td>
</tr>
</table>
</body>
</html>
3.Y mi archivo css:
div {color: red;}
¿Cómo hacer que funcione?
ACTUALIZAR:
Para que funcione, cambié las siguientes cosas:
1.En la acción del controlador agregue la ruta base para archivos externos
$dompdf->set_base_path(APPLICATION_PATH."/../public/themes/css/");
2. En vista, cambie el atributo href de la etiqueta de enlace. Hazlo relativo a la ruta base establecida en el paso 1.
<link type="text/css" href="pdf.css" rel="stylesheet" />
Esto de hecho no tiene nada que ver con Zend Framework, pero debe proporcionar a DomPDF la ruta correcta para cargar los archivos "externos".
$dompdf = new DOMPDF();
$dompdf->set_base_path(realpath(APPLICATION_PATH . ''/path/to/css/''));
$dompdf->load_html($html);
$dompdf->render();
Ver también el manual de DomPDF para esta característica.
@Jurian Sluiman está en el camino correcto, aunque su respuesta no me ayudó, desafortunadamente.
Tuve que pasar un tiempo para encontrar la solución que funcionaba para mí, que estaba usando DOMPDF::set_protocol()
:
$dompdf->set_protocol(WWW_ROOT);
$dompdf->set_base_path(''/'');
WWW_ROOT
aquí es una constante de CakePHP que apunta a la carpeta webroot de mi aplicación. Tenga en cuenta que tiene una barra inclinada.
La mejor parte es que esto parece un uso inapropiado de set_protocol()
. Pero estoy de acuerdo con eso mientras haga que el CSS funcione.
- https://github.com/dompdf/dompdf/search?q=set_protocol
- https://groups.google.com/forum/?_escaped_fragment_=topic/dompdf/uBWdQbug_dM
- http://code.google.com/p/dompdf/wiki/CSSCompatibility
Espero que esto le ahorre a alguien más pocas horas de tiempo.