我正在使用Zend Framework和DOMPDF库。当我用内联css测试它时,一切都很完美。但是当我试图将css代码移动到外部文件时,规则不适用于html页面。
这是我的代码。
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" />
答案 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)
我不得不花一些时间才能找到适合我的解决方案,即使用DOMPDF::set_protocol()
:
$dompdf->set_protocol(WWW_ROOT);
$dompdf->set_base_path('/');
WWW_ROOT
这是指向我的应用程序的webroot文件夹的CakePHP constant。 请注意,它有一个斜杠。
最好的部分是,这似乎是对set_protocol()
的不当使用。但只要它使CSS工作,我就可以了。
希望这可以节省其他人几个小时的时间。