我正在使用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');
,但这只是没有采取任何行动。
非常感谢任何帮助或指导。
答案 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将按以下方式解析:
css/styles.css
)
/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和服务器配置。
您可能会发现以下有关如何构建网址的问题: