2014-09-23 1 views
1

Я использую dompdf для создания PDF-файлов для некоторых видов, и это работает отлично. Проблема в том, что я не могу включать файлы css в любом месте, и учитывается только css, включенный в теги <style> внутри самого представления.Включая таблицы стилей в формате PDF в cakePHP

Вот действие контроллера:

public function view_pdf($id=null){ 

    ini_set('memory_limit','512M'); 

    $event = $this->Event->findById($id); 

     $evt_data=new \DateTime($event['Event']['date']); 
     $this->set('event', $event); 
     $this->layout='event'; 
} 

Вот раскладка:

require_once(APP . 'Vendor' . DS . 'dompdf' . DS . 'dompdf_config.inc.php'); 
spl_autoload_register('DOMPDF_autoload'); 
$dompdf = new DOMPDF(); 
$dompdf->set_paper = 'A4'; 
$dompdf->load_html(utf8_decode($content_for_layout), Configure::read('App.encoding')); 
$dompdf->render(); 
echo $dompdf->stream('Event.pdf'); 

А вот сам (сокращенный вариант) Вид:

<style> 
div.content-event{ 
    background: gray; 
    color: black; 
    padding: 20px; 
} 
</style> 
<div class="content-event" style="margin-bottom: 80px"> 
<div class="heading"> 
    <div class="row"> 
     <div class="col-md-12"> 
      <h3><?php echo $event['Event']['name']; ?></h3> 
     </div> 
    </div> 
</div> 

Я попытался для включения файлов css обычным способом, например: echo $this->Html->css('event');, как в представлении, так и в макете, но thi s просто не предпринимает никаких действий.

Любая помощь или руководство очень ценятся.

ответ

1

Ответ Archana представляется действительным, но я хотел бы предоставить немного больше контекста. При загрузке документа с использованием $dompdf->load_html() dompdf не имеет информации об источнике файла. Когда вы предоставляете ссылки на внешние ресурсы, dompdf устанавливает текущий исполняемый файл в локальной файловой системе в качестве базового пути.

По существу URL-адрес будет обрабатываться следующим образом:

  • относительных URL (например, css/styles.css) будет оцениваться по отношению к исполняемому в данный момент файл
  • абсолютных адреса (например, /css/styles.css) будут оцениваться по отношению к корневая файловая система
  • URL-адрес с доменом (например, http://example.com/css/styles.css) будет оцениваться как написано

Когда вы сделаете следующий вызов HTMLHelper::css:

$this->Html->css('styles') 

CakePHP будет производить ссылку стиль, подобный следующему:

<link rel="stylesheet" type="text/css" href="/css/styles.css" /> 

на основе правил синтаксического анализа я изложил выше, что ссылка будет считан из корень файловой системы. И если у вас нет корневой папки с именем «css» со своей таблицей стилей, эта ссылка будет недействительной. Причина, по которой ответ Арчаны заключается в том, что вы предоставляете путь от корня файловой системы к файлу (например, /inet/www/cakesite/app/webroot/css/styles.css).

Немного легче получить дескриптор ссылок на внешние ресурсы, если вы укажете домен. Таким образом, dompdf получит доступ к ресурсу через ваш веб-сервер, как и любой веб-браузер. Этот тип ссылок требует более пристального внимания к вашей конфигурации dompdf и сервера.

Вы можете найти следующие вопросы полезно о том, как построить URL:

2

Вы можете включить файл CSS, как следующее: -

<link rel="stylesheet" type="text/css" href="<?php echo APP.'webroot'.DS.'css'.DS.'event.css'; ?>" media="all" /> 

Поместите файл в папку CSS Webroot/CSS.

+0

, какой файл я должен включить его в? – Domas

+0

Вы должны добавить этот код в список. – Archana

+0

Просто сделал это, и теперь я получаю следующую ошибку: 'Вызов функции-члена prepend_child() для объекта, не являющегося объектом. Любая идея, почему? – Domas

Смежные вопросы