2013-06-19 10 views
8

Sto utilizzando Zend Framework e la libreria DOMPDF. Quando lo collaudo con css inline tutto funziona perfettamente. Ma quando ho provato a spostare il codice CSS al file esterno le regole non sono applicate alla pagina html.DOMPDF non funziona con file css esterno

Ecco il mio codice.

  1. Codice dell'azione di controllo, che generano 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.Code di vista corrispondente (indice/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.And mio file css:

div {color: red;} 

Come rendere funziona?

UPDATE:

Per rendere più funziona Ho cambiato le seguenti cose:

1.In azione del Controller Aggiungi percorso di base per i file esterni

attributo
$dompdf->set_base_path(APPLICATION_PATH."/../public/themes/css/"); 

2.In vista cambiamento href di il tag link. Rendono relativo al percorso di base impostata al punto 1.

<link type="text/css" href="pdf.css" rel="stylesheet" /> 
+0

Nel caso qualcuno lo trovi su un motore di ricerca (proprio come ho fatto io), si noti che c'è un'altra opzione chiamata 'DOMPDF :: set_protocol()', vedere la mia risposta sotto per maggiori informazioni. –

risposta

9

Questo è in realtà nulla a che fare con Zend Framework, ma è necessario fornire dompdf la strada giusta per caricare i file "esterni" da.

$dompdf = new DOMPDF(); 
$dompdf->set_base_path(realpath(APPLICATION_PATH . '/path/to/css/')); 
$dompdf->load_html($html); 
$dompdf->render(); 

Vedi anche la manual di dompdf per questa funzione.

5

@Jurian Sluiman è sulla buona strada, anche se la sua risposta non mi ha aiutato, purtroppo.

ho dovuto passare un po 'di tempo al fine di trovare la soluzione che ha funzionato per me, che stava usando DOMPDF::set_protocol():

$dompdf->set_protocol(WWW_ROOT); 
$dompdf->set_base_path('/'); 

WWW_ROOT ecco un CakePHP constant che punta alla cartella webroot della mia candidatura. Si noti che ha una barra finale.

La parte migliore è che questo sembra un uso improprio di set_protocol(). Ma ci sto bene finché fa funzionare il CSS.

Spero che questo consente di risparmiare qualcun altro paio d'ore di tempo.