Создание pdf из XML-ответа занимает так много времени - PullRequest
0 голосов
/ 09 октября 2018

У меня есть xml в моей базе данных, и я хотел сгенерировать pdf из xml, но если 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>, чтобы хорошо выглядеть.

<code>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 .= '
';
        }
        $position += 81;
    }
    $output .= '
';вернуть $ output;}

Вот скриншот, как выглядит pdf.

enter image description here

Пожалуйста, помогите мне улучшить синхронизацию pdf, в настоящее времязаймет больше 10 минут для 10-страничного PDF.

...