web-dev-qa-db-ja.com

DOMPDFは外部のcssファイルでは機能しません

ZendFrameworkとDOMPDFライブラリを使用しています。インラインCSSでテストすると、すべてが完全に機能します。しかし、cssコードを外部ファイルに移動しようとすると、ルールがhtmlページに適用されません。

これが私のコードです。

  1. 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.対応するビューのコード(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.そして私のcssファイル:

div {color: red;}

それを機能させる方法は?

更新:

それを機能させるために、私は次のことを変更しました:

1.コントローラーのアクションで、外部ファイルのベースパスを追加します

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

2.ビューでリンクタグのhref属性を変更します。手順1で設定したベースパスを基準にしてください。

<link type="text/css" href="pdf.css" rel="stylesheet" />
12
Tamara

これは実際にはZendFrameworkとは関係ありませんが、「外部」ファイルをロードするための正しいパスをDomPDFに提供する必要があります。

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

この機能については、DomPDFの 手動 も参照してください。

11
Jurian Sluiman

@Jurian Sluimanは正しい方向に進んでいますが、残念ながら彼の答えは役に立ちませんでした。

DOMPDF::set_protocol()を使用していた、自分に合った解決策を見つけるために、しばらく時間を費やす必要がありました。

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

_WWW_ROOT_ここに CakePHP定数 アプリケーションのwebrootフォルダーを指しています。 末尾にスラッシュがあることに注意してください。

最良の部分は、これがset_protocol()の不適切な使用法のように見えることです。しかし、CSSが機能する限り、私はそれで問題ありません。

これが他の誰かの時間を数時間節約することを願っています。

6
aexl