【问题标题】:TCPDF displays blank PDF if query result is big如果查询结果很大,TCPDF 显示空白 PDF
【发布时间】:2015-11-26 11:47:34
【问题描述】:

我有一个搜索表单,只要您在其中输入搜索查询,它就允许下载 PDF。这里的问题是,如果结果数量很少,我只能下载 PDF..

如果结果超过 80 条记录,则显示空白页..

请指教, 谢谢!

这是我的代码:

// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);

//set margins
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);

//set auto page breaks
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

//set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);

//set some language-dependent strings
$pdf->setLanguageArray($l);

// ---------------------------------------------------------


// add a page
$pdf->AddPage();

$pdf->Write(0, $order_type, '', 0, 'L', true, 0, false, false, 0);

$pdf->SetFont('helvetica', '', 7);

// -----------------------------------------------------------------------------

ob_start();

if(!($query = mysql_query($this->sql)))
    throw new Exception(mysql_error());

if(($field_name=mysql_num_fields($query)) > 0) {
    $tableheader = '<table>';
    $tableheader .= '<tr>';
    $tableheader .= '<td>Rows</td>';
    for($x=0;$x<$field_name;$x++) {
        $tableheader .= '<td>'.mysql_field_name($query,$x).'</td>';
        if($x==10)
            break;
    }
    $tableheader .= "</tr>";
}

if(mysql_num_rows($query)) {
    $row = 1;
    while($field = mysql_fetch_assoc($query)) {
        if($row == 1) {
            echo $tableheader;
        }

        echo "<tr>";
        echo "<td>{$row}</td>";
        foreach($field as $val) {
            echo "<td>{$val}</td>";
        }
        echo "</tr>";

        if($row==85) {
            break;
        }
        $row++;
    }
    echo "</table>";
}

$html = ob_get_contents();
ob_end_clean();

$pdf->writeHTML($html, true, false, true, false, '');
$pdf->lastPage();

// -----------------------------------------------------------------------------


//Close and output PDF document
$pdf->Output("memberdata.pdf", 'I');

【问题讨论】:

  • 据我猜测,它的内存问题。尝试修复您的代码以使用尽可能少的内存并分配更多的内存,它会工作。
  • 尝试显示错误。似乎它得到了timeout
  • 我也是这么想的,你有没有更简洁的方法来创建PDF而不使用Writehtml函数?我认为它使用大内存,因为它将表格标签转换为 PDF 格式..
  • Rikesh .. 不,它不会超时.. 我已将超时设置为 0 并在 phpinfo 中确认。. 我还将内存设置为 800M,因为这是唯一允许的最大内存使用量我们的服务器。
  • 如果服务器内存有限,是否允许生成多个文件而不是一个文件中的所有记录?

标签: php tcpdf


【解决方案1】:

我知道这是一个老问题,但对于通过谷歌搜索到这里的人,请在代码开头添加以下内容:

// Increase max_execution_time. If a large pdf fails, increase it even more.
ini_set('max_execution_time', 180);
// Increase this for old PHP versions (like 5.3.3). If a large pdf fails, increase it even more.
ini_set('pcre.backtrack_limit', 1000000);

报告生成因 TCPDF 使用 preg_replace() 而终止。这是旧版本的 PHP 错误(我的是 5.3.3),当字符串太长时 preg_replace() 会静默返回 null。看到这个:
http://sourceforge.net/p/tcpdf/discussion/435311/thread/f7f96b04

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-09
    • 1970-01-01
    相关资源
    最近更新 更多