2013-06-19 9 views
8

Ich benutze Zend Framework und DOMPDF-Bibliothek. Wenn ich es mit Inline-CSS teste, funktioniert alles perfekt. Aber wenn ich versuchte, CSS-Code in die externe Datei zu verschieben, werden Regeln nicht auf die HTML-Seite angewendet.DOMPDF funktioniert nicht mit externen CSS-Datei

Hier ist mein Code.

  1. Code of Aktion des Controllers, die pdf erzeugen

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 entsprechender Ansicht (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.Und meine CSS-Datei:

div {color: red;} 

Wie machen es funktioniert?

UPDATE:

Damit es funktioniert ich folgende Dinge geändert:

1.In Controllers Aktion hinzufügen Basispfad für externe Dateien

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

2.In Änderung anzeigen href Attribut das Link-Tag Machen Sie es sich mit dem Basispfad relativ in Schritt gesetzt 1.

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

Falls jemand dies in einer Suchmaschine findet (genau wie ich), beachten Sie bitte, dass es eine andere Option namens 'DOMPDF :: set_protocol()' gibt, siehe meine Antwort unten für weitere Informationen. –

Antwort

9

Diese in der Tat nichts mit Zend Framework zu tun, aber Sie müssen von dompdf den richtigen Weg zu laden, um die „externe“ Dateien liefern.

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

Siehe manual von dompdf auch für diese Funktion.

5

@Jurian Sluiman ist auf dem richtigen Weg, obwohl seine Antwort mir leider nicht geholfen hat.

Ich hatte einige Zeit zu verbringen, um die Lösung zu finden, die für mich gearbeitet, die DOMPDF::set_protocol() wurde unter Verwendung:

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

WWW_ROOT hier ein CakePHP constant zeigt auf den Webroot-Ordner meiner Anwendung ist. Beachten Sie, dass es einen Schrägstrich hat.

Der beste Teil ist, dass dies wie eine unsachgemäße Verwendung von set_protocol() scheint. Aber mir geht es gut, solange es das CSS funktioniert.

Hope this jemand anderes paar Stunden Zeit spart.