2013-06-19 91 views
8

我正在使用Zend框架和DOMPDF庫。當我用內聯css測試它時,一切都很完美。但是當我試圖將CSS代碼移動到外部文件規則不適用於HTML頁面。DOMPDF不適用於外部css文件

這是我的代碼。的代碼控制器的動作,這生成PDF

require_once( 「DOMPDF/dompdf_config.inc.php」)

  1. ;

    $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"); 
    

    相應的視圖(索引/ dom.phtml)的2.Code

    <!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我的CSS文件:

    div {color: red;} 
    

    如何使它工作?

    UPDATE:

    爲了讓我的作品改變了以下幾件事:

    1.In控制器的操作添加基本路徑外部文件

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

    2.In視圖改變href屬性鏈接標籤。使其相對於在步驟1中

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

如果有人在搜索引擎上發現了這個問題(就像我一樣),請注意還有一個選項叫做'DOMPDF :: set_protocol()',請參閱下面的答案以獲取更多信息。 –

回答

9

這其實無關,與Zend框架設定的基本路徑,但你需要提供DOMPDF正確的道路,從加載「外部」的文件。

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

另請參閱DomPDF的manual此功能。

5

@Jurian Sluiman在正確的軌道上,儘管他的回答並沒有幫助我,不幸的是。

我不得不花一些時間,以便找到適合我的解決方案,它使用DOMPDF::set_protocol()

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

WWW_ROOT這裏是一個CakePHP constant指向我的應用程序的根目錄文件夾中。 請注意,它有一個尾部斜線。

最好的部分是,這似乎是不正確的使用set_protocol()。但只要它能使CSS工作,我就可以。

希望這樣可以節省時間別人幾個小時。