DOMPDF не работает с внешним файлом css
я использую Zend Framework и библиотеку DOMPDF. Когда я тестирую его с помощью встроенного css, все работает отлично. Но когда я пытался переместить css-код во внешний файл, правила не применялись к html-странице.
вот мой код.
- код действия контроллера, которые генерируют pdf
require_once ("DomPdf/dompdf_config.Инк.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 тега link. Сделайте это относительно базового пути, установленного на шаге 1.
<link type="text/css" href="pdf.css" rel="stylesheet" />
2 ответов
это фактически не имеет ничего общего с Zend Framework,но вам нужно указать DomPDF правильный путь для загрузки "внешних" файлов.
$dompdf = new DOMPDF();
$dompdf->set_base_path(realpath(APPLICATION_PATH . '/path/to/css/'));
$dompdf->load_html($html);
$dompdf->render();
см. также руководство DomPDF для этой функции.
@Jurian Sluiman находится на правильном пути, хотя его ответ мне не помог, К сожалению.
мне пришлось потратить некоторое время, чтобы найти решение, которое сработало для меня, которое использовало DOMPDF::set_protocol()
:
$dompdf->set_protocol(WWW_ROOT);
$dompdf->set_base_path('/');
WWW_ROOT
здесь в CakePHP-постоянный указывая на папку webroot моего приложения. обратите внимание, что он имеет косую черту.
лучшая часть заключается в том, что это похоже на неправильное использование set_protocol()
. Но я в порядке с этим, пока это заставляет CSS работать.
- https://github.com/dompdf/dompdf/search?q=set_protocol
- https://groups.google.com/forum/?_escaped_fragment_=topic/dompdf/uBWdQbug_dM
- http://code.google.com/p/dompdf/wiki/CSSCompatibility
надеюсь, это сэкономит кому-то еще несколько часов времени.