HTML 到 PDF 转换,在 Codeigniter 中支持外部 CSS

HTML to PDF conversion with external CSS support in Codeigniter

在比较了 dompdf、TCPDF、MPDF 中的功能之后,我在这里使用 MPDF 在我的 codeigniter 应用程序中将 HTML 转换为 PDF。在本地主机上,它工作正常。并且 pdf 在 2 或 3 秒内生成。当我将它上传到实时服务器时,创建相同的 pdf 文件需要超过 3 分钟。我已经检查了文件权限。 Pdf 正在生成并保存在文件夹中。但这需要很长时间。

$this->ci->load->library('m_pdf');
$html = $this->ci->load->view('ecommerce/salespdf',$this->data,true);
$m_pdf = $this->ci->m_pdf->load();
$m_pdf->WriteHTML($html);
$filepath = getcwd()."/assets/other_uploads/pdf_files/";
$m_pdf->Output($filepath.$filename, "F");

从上面的代码可以看出,pdf正在指定的文件夹中生成,但是需要很长时间。视图文件中仅包含一个外部 css 文件。

<link href="<?php echo CSS_URL; ?>pdf-invoice.css" rel="stylesheet" type="text/css" />

我的代码有什么问题吗?

我终于修复了这个错误。问题是在视图页面中加载图像。我在这里添加 header 以及公司名称和徽标。

http://domain.com/assets/other_uploads/photo/photo.png

如果我在图像 URL 中提供上述来源,它会尝试在我的视图页面中加载图像,但失败了。所以,我使用下面的代码来解决这个问题。

var/www/domain/assets/other_uploads/photo/photo.png

对于外部 css 问题,我在视图页面中添加了 css 部分作为内部 css。

现在有效!!!

function WriteHTML($html,$bi)
    {
        //remove all unsupported tags
        $this->bi=$bi;
        if ($bi)
            $html=strip_tags($html,"<a><img><p><br><font><tr><blockquote><h1><h2><h3><h4><pre><red><blue><ul><li><hr><b><i><u><strong><em>"); 
        else
            $html=strip_tags($html,"<a><img><p><br><font><tr><blockquote><h1><h2><h3><h4><pre><red><blue><ul><li><hr>"); 
        $html=str_replace("\n",' ',$html); //replace carriage returns with spaces
        // debug
        if ($this->debug) { echo $html; exit; }

        $html = str_replace('&trade;','™',$html);
        $html = str_replace('&copy;','©',$html);
        $html = str_replace('&euro;','€',$html);

        $a=preg_split('/<(.*)>/U',$html,-1,PREG_SPLIT_DELIM_CAPTURE);
        $skip=false;
        foreach($a as $i=>$e)
        {
            if (!$skip) {
                if($this->HREF)
                    $e=str_replace("\n","",str_replace("\r","",$e));
                if($i%2==0)
                {
                    // new line
                    if($this->PRE)
                        $e=str_replace("\r","\n",$e);
                    else
                        $e=str_replace("\r","",$e);
                    //Text
                    if($this->HREF) {
                        $this->PutLink($this->HREF,$e);
                        $skip=true;
                    } else 
                        $this->Write(5,stripslashes(txtentities($e)));
                } else {
                    //Tag
                    if (substr(trim($e),0,1)=='/')
                        $this->CloseTag(strtoupper(substr($e,strpos($e,'/'))));
                    else {
                        //Extract attributes
                        $a2=explode(' ',$e);
                        $tag=strtoupper(array_shift($a2));
                        $attr=array();
                        foreach($a2 as $v) {
                            if(preg_match('/([^=]*)=["\']?([^"\']*)/',$v,$a3))
                                $attr[strtoupper($a3[1])]=$a3[2];
                        }
                        $this->OpenTag($tag,$attr);
                    }
                }
            } else {
                $this->HREF='';
                $skip=false;
            }
        }
    }