【问题标题】:Including style sheets in a PDF in cakePHP在 cakePHP 中的 PDF 中包含样式表
【发布时间】:2014-11-17 07:59:14
【问题描述】:

我正在使用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-&gt;Html-&gt;css('event');,但这只是没有采取任何行动。

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

【问题讨论】:

    标签: cakephp cakephp-2.0 dompdf


    【解决方案1】:

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

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

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

    【讨论】:

    • 我应该将它包含在哪个文件中?
    • 刚刚这样做,现在我收到以下错误:Call to a member function prepend_child() on a non-object 知道为什么吗?
    • 我不知道这个错误。我在我的 dompdf 代码及其工作中使用了上面的代码。
    • @Domas 我相信这个答案解决了你的问题。您现在遇到的问题与 HTML/CSS 的解析有关。我建议您标记答案并开始一个新问题。
    【解决方案2】:

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

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

    • 将相对于当前执行的文件评估相对 URL(例如 css/styles.css
    • 绝对 URL(例如 /css/styles.css)将相对于文件系统根目录进行评估
    • 带有域(例如 http://example.com/css/styles.css)的 URL 将被评估为书面

    当您向HTMLHelper::css 拨打以下电话时:

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

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

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

    根据我上面概述的解析规则,将从文件系统根目录读取引用。除非您有一个名为“css”的根文件夹,其中包含您的样式表,否则该引用将无效。 Archana 的答案有效的原因是您提供了从文件系统根目录到文件的路径(例如 /inet/www/cakesite/app/webroot/css/styles.css)。

    如果您指定域,则处理外部资源引用会更容易一些。以这种方式,dompdf 将通过您的网络服务器访问资源,就像任何网络浏览器一样。这种类型的参考确实需要多注意您的 dompdf 和服务器配置。

    您可能会发现以下问题对如何构建 URL 很有帮助:

    【讨论】:

      猜你喜欢
      • 2013-11-17
      • 2020-02-17
      • 1970-01-01
      • 2010-09-27
      • 1970-01-01
      • 1970-01-01
      • 2015-12-19
      • 1970-01-01
      • 2023-03-19
      相关资源
      最近更新 更多