在cakePHP中包含PDF格式的样式表

时间:2014-09-23 07:40:37

标签: cakephp cakephp-2.0 dompdf

我正在使用dompdf为某些视图生成PDF,而且工作得很好。问题是我无法在任何地方包含css文件,并且只考虑视图内部<style>标记中包含的css。

以下是控制器操作:

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');,但这只是没有采取任何行动。

非常感谢任何帮助或指导。

2 个答案:

答案 0 :(得分:2)

您可以包含以下CSS文件: -

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

将您的css文件放入webroot / css文件夹。

答案 1 :(得分:1)

Archana的回答似乎是有效的,但我想提供更多的背景信息。使用$dompdf->load_html()加载文档时,dompdf没有关于文件源的信息。当您提供指向外部资源的链接时,dompdf会将当前正在执行的文件在本地文件系统上设置为基本路径。

基本上,URL将按以下方式解析:

  • 将相对于当前正在执行的文件
  • 评估相对URL(例如css/styles.css
  • 绝对URL(例如/css/styles.css)将相对于文件系统根
  • 进行评估
  • 具有域名的网址(例如http://example.com/css/styles.css)将按照书面
  • 进行评估

当您对HTMLHelper::css进行以下调用时:

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

CakePHP将生成类似于以下内容的样式引用:

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

根据我上面概述的解析规则,将从文件系统根目录中读取引用。除非你有一个名为&#34; css&#34;的根文件夹。使用样式表,引用将无效。 Archana的回答之所以有效,是因为您提供了从文件系统根目录到文件的路径(例如/inet/www/cakesite/app/webroot/css/styles.css)。

如果指定域,则可以更轻松地获取外部资源引用的句柄。以这种方式,dompdf将通过您的Web服务器访问资源,就像任何Web浏览器一样。这种类型的引用确实需要更多关注你的dompdf和服务器配置。

您可能会发现以下有关如何构建网址的问题: