CodeIgniter的DOMPDF显示空白屏幕,没有错误,HTML生成正常,但PDF未生成。

3
在CodeIgniter中,DOMPDF显示空白屏幕。。没有错误(在开发模式下)..HTML生成正常..但是PDF没有生成..只有空白屏幕。
我的代码片段:
function pdf_create($html, $filename='', $stream=TRUE) 
{
    require_once("dompdf/dompdf_config.inc.php");

    $dompdf = new DOMPDF();
    $dompdf->load_html($html);
    $dompdf->set_option('isHtml5ParserEnabled', true);
    $dompdf->setPaper('A4', 'potrait');
    $dompdf->render();
    if ($stream) {
        $dompdf->stream($filename.".pdf", array("Attachment" => 0));
    } else {
        return $dompdf->output();
    }
}

function invoicepdf()
{ 
    $orderId  = base64_decode($this->uri->segment('3'));        
    $this->load->helper(array('dompdf', 'file'));

    $query = "SELECT * FROM `ci_booking` WHERE id='".$orderId."'";
    $this->data['order_details'] = $this->home->customQuery($query);

    $html = $this->load->view('reports/printinvoice', $this->data, true);

    //echo $html; die;
    $this->pdf_create($html, 'Invoice -'.$orderId);      
}

当我取消invoicepdf函数中echo语句的注释时,输出可以正常生成。但是当它传递到pdf_create()函数时,屏幕就会显示空白,即使ini_reporting设置为1也没有错误提示。
我附上了一个空白屏幕检查代码,请问为什么会这样?
请建议我应该如何修改。enter image description here

1
尝试这些代码行:ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); ,以显示警告信息。 - Giacomo M
请检查附加的图片,当我检查空白屏幕时。 - Anjali Patil
1
看起来你的主机将你重定向到了一些“空白”页面……我怀疑你包含 dompdf 配置的方式是错误的……尝试像这样做:if (file_exists('dompdf/dompdf_config.inc.php')) require_once("dompdf/dompdf_config.inc.php"); else { echo 'dompdf 配置文件丢失'; die;} - Atural
这两种方法都是在helper中编写还是在controller中编写?如果两者都在controller中编写,那么pdf_create函数应该像$this->pdf_create这样调用。 - jagad89
但是先生。。。当我取消注释 invoicepdf() 函数的注释行 (//echo $html; die;) 后。。。它以 HTML 格式显示正确的输出。 - Anjali Patil
显示剩余11条评论
2个回答

1

你的代码存在两个问题:

1.- 一个小错误带来了长远影响:

在这里,你正在设置一种DomPDF不认识的纸张方向 $dompdf->setPaper('A4', 'potrait'); 你需要将其更改为 portrait 否则 DomPDF 可能无法真正理解你想要什么而导致渲染失败。

2.- 你的视图中所有可读的文本(非HTML格式)都是通过JavaScript生成的,这需要浏览器渲染引擎,而DomPDF没有它(DomPDF 是服务端渲染,与客户端渲染有很大的区别,这很重要)。

当在浏览器中加载视图时一切正常的原因是因为浏览器正确处理了 document.write,但是 DomPDF 没有(因为它不是真正的 DOM/JS 渲染引擎,它只是以适应给定纸张大小和方向的方式格式化普通 HTML)。

尝试使用常规的非-JS HTML 来包含文本。


0

问题解决了... 感谢大家的帮助... 它完全是布局问题...视图文件中有错误的列跨度号码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接