从XML响应生成pdf需要花费大量时间

时间:2018-10-09 06:27:57

标签: php codeigniter pdf tcpdf

我的数据库中有xml,并希望从xml生成pdf,但是如果xml太大,则会通过超时错误进行处理。我不想更改服务器超时,而不是如何改善pdf生成的时间。 我正在使用<pre>标签进行良好的格式设置。

以下用于pdf生成的代码

public function generateCreditReport($form, $path=false, $htmlPath=false){       
    $this->load->library('fpdf/fpdf');
    $this->load->library('fpdi/fpdi');
    if(!empty($path) && !file_exists($path)){
        $data['form'] =  $form;       
        $data['date'] = $data['xml'] = null;
        if($data['form']->credit_report != ''){ 
            try{
                $data['xml'] = new SimpleXMLElement($data['form']->credit_report);   
            }catch(Exception $e){

            }
            $timeStatus = $this->admin->get_timestamp($data['form']->id, 'credit_pulled');
            if(!empty($timeStatus)) {
                $data['date'] = $timeStatus->date;
            }
        }
        $pdf = new TCPDF();     
        $pdf->SetFont('Helvetica');
        $pdf->SetFontSize(10);
        $pdf->SetTextColor(0, 0, 0);
        $pdf->SetProtection(array('print','modify'),"$form->loan_id","sefinance",0);
        $pdf->AddPage();
        $html = $this->load->view('admin/credit_report_pdf', $data,true);
        $generatedReport = file_put_contents($htmlPath, $html , FILE_APPEND | LOCK_EX);
        $pdf->WriteHTML($html);

        if($path){
            $pdf->Output($path, "F");             
        }else{
            $pdf->Output(); 
        }
    }
}

查看文件credit_report_pdf如下

<h4>Report Results</h4>
<br>
<?php if(!empty($xml)){ ?>
<?php echo print_credit($xml->EfxReport->USPrintImage); ?>
<?php } ?>

我正在使用<pre>进行格式化,看起来不错。

function print_credit($report) {
    $split = " <div style='page-break-before: always;'></div>" . repeater(' ', 43);
    $report = preg_replace('/\* \* \*[\s\S]+?USER REF./', $split, $report);
    $output = "";
    $output = '<pre>';
    $length = strlen($report);
    $count = $length / 81;
    $position = 1;
    for ($i = 0; $i < $count; $i++) {
        if (strpos(substr($report, $position, 80), 'THIS FORM PRODUCED BY EQUIFAX') === FALSE) {
            $output .= substr($report, $position, 80) . '<br>';
        }

        if ($i == 32) {
            $output .= '</pre><pre>';
        }
        $position += 81;
    }
    $output .= '</pre>';
    return $output;
}

这是pdf格式的屏幕截图。

enter image description here

请帮助我改善pdf的时间,目前10页pdf需要花费超过10分钟的时间。

0 个答案:

没有答案