2013-06-19 11 views
8

Używam Zend Framework i biblioteki DOMPDF. Kiedy testuję go z wbudowanym css wszystko działa idealnie. Ale kiedy próbowałem przenieść kod css do zewnętrznego pliku reguły nie są stosowane na stronie html.DOMPDF nie działa z zewnętrznym plikiem css

Oto mój kod.

  1. kod działania regulatora, które generują 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 odpowiadających widok (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.And mój plik css:

div {color: red;} 

Jak to działa?

UPDATE:

Aby to działa zmieniłem następujące rzeczy:

1.In działanie regulatora dodać ścieżkę bazową dla plików zewnętrznych

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

2.In widok zmiana href od tag linku. Sprawiają, że w stosunku do ścieżki bazowej ustalonej w kroku 1.

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

Jeśli ktoś znajdzie to w wyszukiwarce (tak jak ja), proszę zauważyć, że istnieje inna opcja o nazwie 'DOMPDF :: set_protocol()', zobacz moją odpowiedź poniżej, aby uzyskać więcej informacji. –

Odpowiedz

9

to w rzeczywistości nic wspólnego z Zend Framework, ale trzeba dostarczyć DomPDF właściwą drogę, aby załadować „zewnętrznych” pliki.

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

Zobacz także manual DomPDF dla tej funkcji.

5

@Jurian Sluiman jest na dobrej drodze, choć jego odpowiedź niestety mi nie pomogła.

musiałem poświęcić trochę czasu, aby znaleźć rozwiązanie, które pracowały dla mnie, który za pomocą DOMPDF::set_protocol():

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

WWW_ROOT o to CakePHP constant skierowana w folderze webroot mojego wniosku. Zwróć uwagę, że ma końcowy ukośnik.

Najlepsze jest to, że wydaje się niewłaściwe korzystanie z set_protocol(). Ale nie przeszkadza mi to, dopóki działa CSS.

Nadzieja ta oszczędza ktoś inny kilka godzin.