Я использую Mpdf ссылку для создания html в pdf на одном из моих веб-сайтов, pdf генерируется нормально, но проблема в том, что он занимает слишком много времени только для 50000 строк в таблице, примерно 15 -20 минут.
без CSS это занимает половину времени, но, все еще слишком долго, в pdf нет изображений, только простые тексты в таблице html.
Ниже я делюсь своим кодом, если кто-то предлагает что-то действительно полезное для меня.
Код контроллера
ini_set('max_execution_time', '2000');
ini_set("pcre.backtrack_limit", "100000000");
ini_set("memory_limit","8000M");
ini_set('allow_url_fopen',1);
$data = array();
$response = array();
$paymentDue = DB::table('payment_due_view')
->select('payment_due_date', 'customer_name', 'invoice_number',
'business_name','order_total', 'phonenumber', 'email', 'payment_status')
->where('order_total', '>', '0')
->whereNull('deleted_at')
->orderBy('payment_due_date', 'desc');
$paymentDue = $paymentDue->limit('50000');
$paymentDue = $paymentDue->get()->toArray();
$data['todaysPaymentListData'] = $paymentDue;
$mpdf = new Mpdf();
$mpdf->useSubstitutions = false;
//$mpdf->simpleTables = false;
$html = \View::make('admin.screen.payment_due_pdf')->with('data', $data)->render();
$chunks = explode("chunk", $html);
foreach($chunks as $key => $val) {
$mpdf->WriteHTML($val);
}
$pdfFileName = 'payment_due_report'.time().'.pdf';
$pdf_path = public_path() . '/payment-due-pdf/' . $pdfFileName;
$mpdf->Output($pdf_path, 'F');
$baseUrl = url('/');
$downloadUrl = $baseUrl.'/payment-due-pdf/'.$pdfFileName;
Просмотр Код
<table class="row" width="100%" bgcolor="#ffffff" align="center" cellpadding="0" cellspacing="0" border="0"
style="border-collapse:collapse; text-align:left; border-spacing:0; max-width:100%;margin-top: 10px;">
<tr>
<td style="border-collapse:collapse; border-spacing:0;text-align: right;padding-right: 18px;font-size: 12px !important;line-height: 20px;padding-top: 10px;"> Report Date - {{date('m/d/Y', strtotime($reportedDate))}}</td>
</tr>
</table>
<table width="100%">
<tr>
<td style='padding:10px 10px 10px 10px; text-align:center'>
<h3 style="text-align: center; margin-top: 30px;"> Customer Payment Due Report </h3>
</td>
</tr>
</table>
<table cellpadding='1' cellspacing='0' style='border:1px solid #4E4E5B; border-bottom:0;line-height:21px;margin:auto;width:100%; background:#fff; font-size:12px;text-align:center'>
<tr style='border-bottom: 1px dashed #CECECE;'>
<th style='border-bottom: 1px solid #4E4E5B; border-right: 1px solid #4E4E5B; border-top:0; border-left:0;background:#306EBA;color:#fff;'>Payment Due Date</th>
<th style='border-bottom: 1px solid #4E4E5B; border-right: 1px solid #4E4E5B; border-top:0; border-left:0;background:#306EBA;color:#fff;'>Due Status</th>
<th style='border-bottom: 1px solid #4E4E5B; border-right: 1px solid #4E4E5B; border-top:0; border-left:0;background:#306EBA;color:#fff;'>Customer Name</th>
<th style='border-bottom: 1px solid #4E4E5B; border-right: 1px solid #4E4E5B; border-top:0; border-left:0;background:#306EBA;color:#fff;'>Invoice Number</th>
<th style='border-bottom: 1px solid #4E4E5B; border-right: 1px solid #4E4E5B; border-top:0; border-left:0;background:#306EBA;color:#fff;'>Business Name</th>
<th style='border-bottom: 1px solid #4E4E5B; border-right: 1px solid #4E4E5B; border-top:0; border-left:0;background:#306EBA;color:#fff;'>Order Total</th>
<th style='border-bottom: 1px solid #4E4E5B; border-right: 1px solid #4E4E5B; border-top:0; border-left:0;background:#306EBA;color:#fff;'>Phone Number</th>
<th style='border-bottom: 1px solid #4E4E5B; border-right: 1px solid #4E4E5B; border-top:0; border-left:0;background:#306EBA;color:#fff;'>Email</th>
</tr>
@if(isset($data['todaysPaymentListData']) && !empty($data['todaysPaymentListData']))
@foreach($data['todaysPaymentListData'] as $val)
chunk
@php $number = 'N/A'@endphp
@if($val->phonenumber != '')
@php $number = $val->phonenumber @endphp
@endif
@if(strtotime($val->payment_due_date) == strtotime(date('Y-m-d')))
@php $dueStatus = 'Due Today' @endphp
@elseif(strtotime($val->payment_due_date) > strtotime(date('Y-m-d')))
@php $dueStatus = 'Future Due' @endphp
@else
@php $dueStatus = 'Past Due' @endphp
@endif
@php $businessName = 'N/A'@endphp
@if($val->business_name != '')
@php $businessName = $val->business_name @endphp
@endif
<tr>
<td style="font-size:12px; text-align:center; border-right: 1px solid #4E4E5B; border-bottom: 1px solid #4E4E5B; word-wrap: break-word;">{{ \Helper::getDateTimeByTimezone($val->payment_due_date) }}</td>
<td style="font-size:12px; text-align:center; border-right: 1px solid #4E4E5B; border-bottom: 1px solid #4E4E5B; word-wrap: break-word;">{{ $dueStatus }}</td>
<td style="font-size:12px; text-align:center; border-right: 1px solid #4E4E5B; border-bottom: 1px solid #4E4E5B; word-wrap: break-word;">{{ $val->customer_name }}</td>
<td style="font-size:12px; text-align:center; border-right: 1px solid #4E4E5B; border-bottom: 1px solid #4E4E5B; word-wrap: break-word;">{{ $val->invoice_number }}</td>
<td style="font-size:12px; text-align:center; border-right: 1px solid #4E4E5B; border-bottom: 1px solid #4E4E5B; word-wrap: break-word;">{{ $businessName }}</td>
<td style="font-size:12px; text-align:center; border-right: 1px solid #4E4E5B; border-bottom: 1px solid #4E4E5B; word-wrap: break-word;">${{ $val->order_total }}</td>
<td style="font-size:12px; text-align:center; border-right: 1px solid #4E4E5B; border-bottom: 1px solid #4E4E5B; word-wrap: break-word;">{{ $val->phonenumber }}</td>
<td style="font-size:12px; text-align:center; border-right: 1px solid #4E4E5B; border-bottom: 1px solid #4E4E5B; word-wrap: break-word;">{{ $val->email }}</td>
</tr>
@endforeach
@endif
</table>