DOMPDF不适用于外部css文件

时间:2013-06-19 07:41:20

标签: css zend-framework dompdf

我正在使用Zend Framework和DOMPDF库。当我用内联css测试它时,一切都很完美。但是当我试图将css代码移动到外部文件时,规则不适用于html页面。

这是我的代码。

  1. 控制器动作的代码,生成pdf
  2. 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" />
    

2 个答案:

答案 0 :(得分:11)

这实际上与Zend Framework无关,但您需要为DomPDF提供正确的路径来加载“外部”文件。

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

另请参阅DomPDF的manual以获取此功能。

答案 1 :(得分:6)

@Jurian Sluiman走在正确的轨道上,不幸的是他的答案对我没有帮助。

我不得不花一些时间才能找到适合我的解决方案,即使用DOMPDF::set_protocol()

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

WWW_ROOT这是指向我的应用程序的webroot文件夹的CakePHP constant请注意,它有一个斜杠。

最好的部分是,这似乎是对set_protocol()的不当使用。但只要它使CSS工作,我就可以了。

希望这可以节省其他人几个小时的时间。