13

我正在使用 Zend Framework 和 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" />
4

2 回答 2

13

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

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

有关此功能,另请参阅 DomPDF 的手册

于 2013-06-19T08:20:53.700 回答
6

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

我不得不花一些时间来找到对我有用的解决方案,它正在使用DOMPDF::set_protocol()

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

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

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

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

于 2014-10-19T21:46:50.113 回答