【发布时间】: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->output_html()和$dompdf->output()获取HTML 和PDF。运行该命令,直到得到一个错误的渲染,然后比较好的和坏的 HTML。
标签: php cakephp pdf-generation dompdf