【问题标题】:Dompdf with table pdf contains error带有表格 pdf 的 Dompdf 包含错误
【发布时间】:2012-03-16 05:07:33
【问题描述】:

我在 cakephp 1.3 应用程序中使用 dompdf 0.6.0 beta 3 作为供应商。我的服务器的php版本是5.2。我作为附件生成的 pdf 包含使用 html 助手生成的表格,并且 css 在标题中声明。

我有一个很奇怪的问题。通常生成的 pdf 没有问题,但在大约 10% 的生成的 pdf 中,文件包含错误并且仅部分呈现。没有致命错误,但不知何故 pdf 生成是不正确的。更奇怪的是,它与 php 代码在 Session 变量中获取的数据完全相同。因此,有时生成相同的数据时没有任何问题(在 90% 的情况下),有时会出现问题。

如果您知道问题可能是什么,谢谢。

这是生成 pdf 的代码。 (Journal 是我创建的助手,函数 Journal::journalCheck 输出一个表)

$html = 
'<html xmlns="http://www.w3.org/1999/xhtml">'.
    '<head>'.
        $this->Html->charset().
        '<style>

            ul{
                margin: 0px;
            }
            .enonces p{
                margin:0px;
            }
            table{
                border-collapse: collapse;
                width:100%;
                margin-bottom: 25px;
            }    
            table.legende{
                width:25%;
            }

            td{
                border: 1px solid black;
            }

            th{
                border: 1px solid black;
                background-color: #96ed88;
            }
            .noEcriture{
                width:5%;
            }

            .nomCompte{
                width:15%;
            }

            .montantCompte{
                width: 10%;
                text-align: right;
            }

            .libelle{
                width: 45%;
                min-width: 65px;
            }
            .faux{
                color: red;
                text-decoration:line-through;
            }
            .ecriture_fausse{
                background-color: pink;
            }
            td.correction_cell{
                background-color: #daafe7;
            }
            .consigne{
                font-style:italic;
            }

            .enonces{
                border: 1px solid black;
                margin-bottom: 20px;
            }

        </style>'.
    '</head>'.
    '<body>'.
        '<h1>'.
            $exercice[0]['Exercice']['nom'].
        '</h1>'.
        '<h3>'.
            'Exercice réalisé par '.$session->read('eleve.Exercice.prenom').'                            '.$session->read('eleve.Exercice.nom_famille').
            ' - version '.$session->read('exercice.'.$this->params['pass'][0].'version').
            ' - '.date('d/m/Y').
        '</h3>'.
        '<p class="consigne">'.
            $this->Journal->showConsigne($exercice[0]['Exercice']['consigne'],$raw = true).
        '</p>'.
        '<div class="enonces">'.
            $this->Journal->viewEnonce($enonces).
        '</div>'.
        $this->Journal->journalCheck($datas,$correct_datas,$ecriture_ids,$compte_ids,array('pdf'=>true)).
        '<p>'.
            'Légende:'.
        '</p>'. 
        '<table class="legende">'.
            $this->Html->tableCells(array(array('écriture juste'),
                                    array(array('écriture fausse',array('class'=>'ecriture_fausse'))),
                                    array(array('corrigé',array('class'=>'correction_cell'))))
                                    ).
        '</table>'.       
        '<p>'.
            'Source: <a href="'.$_SERVER['HTTP_HOST']."/".basename(ROOT)."/"."exercices/complete/".$this->params['pass'][0].'">'.
            $_SERVER['HTTP_HOST']."/".basename(ROOT)."/"."exercices/complete/".$this->params['pass'][0].'</a>'.             
        '</p>'.
    '</body>'.
'</html>';

$dompdf = new DOMPDF();
$dompdf->load_html($html);
$dompdf->render();
$dompdf->stream("Journalizer_".$exercice[0]['Exercice']['nom']."_".$session->read('eleve.Exercice.nom_famille')."_".$session->read('eleve.Exercice.prenom')."_v".$session->read('exercice.'.$this->params['pass'][0].'version').".pdf", array("Attachment" => 1));

【问题讨论】:

  • “不知何故 PDF 生成”对于任何人来说都不足以帮助您:) 尝试整理一些示例。
  • 抱歉,您会在此处找到损坏的 pdf 文件的两个屏幕截图。首先,文件的第一部分不应有任何空白页:[请参阅此处] (lacompta.ch/MITIC/Images/Capture3.PNG)。然后,表格直到最后才呈现(第 18 行遗漏了一个单元格)。在这个下面应该有另一个表:[见这里] (lacompta.ch/MITIC/Images/Capture4.PNG)
  • 所以文件每次都完全一样?查看给您带来问题的 HTML 示例可能会有所帮助。此外,即使没有致命错误,也可能存在影响输出的其他问题。
  • 我用生成 pdf 的代码编辑了我的问题。对我来说真正奇怪的是,使用完全相同的数据,它最常见的输出很好,但在 10% 的情况下,pdf 输出中存在错误。即使出现错误并且我再次生成 pdf,该文件第二次渲染得非常好。我真的不明白...
  • 为了帮助调试问题,您还可以尝试将 dompdf HTML 和 PDF 保存到磁盘。您可以使用$dompdf-&gt;output_html()$dompdf-&gt;output() 获取HTML 和PDF。运行该命令,直到得到一个错误的渲染,然后比较好的和坏的 HTML。

标签: php cakephp pdf-generation dompdf


【解决方案1】:

前段时间我也遇到过同样的问题。问题是当 pdf 太大时 dompdf 会抛出错误。我现在无法找到解决此问题的方法,因为我无法再编写代码了。

尝试检查 apache 错误日志文件。如果您发现此错误,则可以使用错误消息在 Google 上搜索答案。

需要一些简单的源代码单行编辑来解决此问题。

【讨论】:

    猜你喜欢
    • 2015-01-03
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 2016-08-02
    相关资源
    最近更新 更多