DOMPDF не работает с внешним файлом css

я использую Zend Framework и библиотеку DOMPDF. Когда я тестирую его с помощью встроенного css, все работает отлично. Но когда я пытался переместить css-код во внешний файл, правила не применялись к html-странице.

вот мой код.

  1. код действия контроллера, которые генерируют 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 работать.

надеюсь, это сэкономит кому-то еще несколько часов времени.