2013-06-19 32 views
8

私はZend FrameworkとDOMPDFライブラリを使用しています。インラインCSSでテストすると、すべてが完璧に動作します。しかし、私は外部ファイルにCSSコードを移動しようとしたときにルールは、HTMLページに適用されません。DOMPDFは外部のCSSファイルでは機能しません

ここに私のコードです。

するrequire_once( "DOMPDF/dompdf_config.inc.php")のPDFを生成するコントローラのアクションのコード、。

$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属性をベースパスを追加リンクタグ

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

誰かが検索エンジンでこれを見つけた場合(私のように)、DOMPDF :: set_protocol()という別のオプションがありますので、下記の私の答えを参考にしてください。 –

答えて

9

ステップ1で設定されたベースパスにそれが相対してくださいこれは、Zend Frameworkに行うには、実際には何の関係もありませんが、DOMPDFにから「外部」ファイルをロードするための正しいパスを指定する必要があります。

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

は、この機能のためにも、DOMPDFのmanualを参照してください。

5

@ユリアン・スリューマンは正しい軌道に乗っていますが、彼の答えは残念なことに私を助けませんでした。私はDOMPDF::set_protocol()を使用していた私のために働いたソリューションを、見つけるためにいくつかの時間を費やす必要があった

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

WWW_ROOTここでは、自分のアプリケーションのWebルートフォルダにCakePHP constant指しています。 スラッシュが付いていることに注意してください。

これは、set_protocol()という不適切な使用法のようです。しかし、CSSを動作させる限り、それでいいです。

希望これは時間の誰か他の人の数時間を節約できます。

関連する問題