I am facing problem in downloading PDF using DomPDF library in Laravel. When data set is small it works but slow. And i have real scenarios of data in thousands like 80k 0r more than 100k. I cannot use queued jobs or cache etc because its somehow a real time data. The query return results perfectly but when it comes to the blade file it stucks.
Following is the blade file that i am using to generate PDF.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>PDF Report</title>
</head>
<body style="font-family: Arial, Helvetica, sans-serif !important; margin:0 auto;">
<!-- Define header and footer blocks before your content -->
<header style="margin:0 !important; min-height:10px;"></header>
<main style="">
<?php
$ftr_school = "";
$training_id = $training_data->id;
$arr_indicators = array();
$arr_sessions = array();
$prohibited_indicators = array(17,19,20);
$view_only_hidden = array(10,11,12);
$counter = 1;
$arr_columns_of_sum = array(15,16,18,22,23);
$arr_columns_of_avg = array();
if($batch_sessions == 0){
$batch_sessions = 1;
}
$attendance_total = 0;
$counter_attendance_total = 0;
$ds_observation_total = 0;
$counter_ds_observation= 0;
$model_lesson_total = 0;
$counter_model_lesson= 0;
$book_review_total = 0;
$counter_book_review = 0;
$syndicate_total = 0;
$counter_syndicate = 0;
$simulation_total = 0;
$counter_simulation = 0;
$project_work_total = 0;
$counter_project_work= 0;
$sports_total = 0;
$counter_sports= 0;
$practical_test_total = 0;
$counter_practical_test= 0;
$pre_test_total = 0;
$counter_pre_test= 0;
$mid_test_total = 0;
$counter_mid_test= 0;
$post_test_total = 0;
$counter_post_test= 0;
?>
<table border="1" cellspacing="0" width="100%" class="report-tbl" style="background: #ffffff">
<thead>
<th class="left-align">Sr#</th>
<th class="left-align">Sty#</th>
<th class="left-align">Name</th>
<th class="left-align">CNIC</th>
<th class="left-align">District </th>
<th class="left-align">Tehsil</th>
<th class="left-align">Markaz</th>
@foreach($attendance_indicators as $key=>$attendance_indicator)
@if(!in_array($attendance_indicator->id,$prohibited_indicators) )
@php array_push($arr_indicators,$attendance_indicator->id);
$arr_sessions[$attendance_indicator->id] = $attendance_indicator->ti_i_percentage;
@endphp
<th class="left-align">
{{$attendance_indicator->indicator_name}} ({{$attendance_indicator->ti_i_percentage}}%)
</th>
@endif
@endforeach
<th class="left-align">
Total %
</th>
<th class="left-align">
Grade
</th>
<th class="left-align notexport">
Picture
</th>
<th class="">
Comments
</th>
</thead>
<tbody>
@if(count($data_grade_report) == 0)
<tr class="norec_interm">
<td colspan="10">
<div class="alert alert-danger px-3 py-2" role="alert">
No records found ...!
</div>
</td>
</tr>
@else
@foreach($data_grade_report as $key =>$grades_data)
@php $total_grades = 0; @endphp
<tr>
<td class="left-align">{{++$key}}</td>
<td class="left-align">{{$grades_data->seniority_number == "" ? "0" : $grades_data->seniority_number}}</td>
<td class="left-align">{{$grades_data->teacher_name}}</td>
<td class="left-align">{{$grades_data->teacher_cnic}}</td>
<td class="left-align">{{$grades_data->district_name}}</td>
<td class="left-align">{{$grades_data->tehsil_name}}</td>
<td class="left-align">{{$grades_data->markaz_name}}</td>
@if(in_array(1, $arr_indicators))
@php
$attendance_total = $attendance_total + (($grades_data->total_present/$batch_sessions) * $arr_sessions[1]);
if($attendance_total !=0 && !empty($attendance_total)){
$counter_attendance_total = $counter_attendance_total + 1;
}
$total_grades = $total_grades + ( ($grades_data->total_present/$batch_sessions) * $arr_sessions[1]);
@endphp
<td class="left-align">{{ ( ($grades_data->total_present/$batch_sessions) * $arr_sessions[1] ) }}%</td>
@endif
@if(in_array(2, $arr_indicators))
@php
if($grades_data->ds_observation != ""){
$ds_observation_total = $ds_observation_total + (($grades_data->ds_observation/$grades_data->ds_observation_total) * $arr_sessions[2]);
if($ds_observation_total !=0 && !empty($ds_observation_total)){
$counter_ds_observation = $counter_ds_observation + 1;
}
$total_grades = $total_grades + ( ($grades_data->ds_observation/$grades_data->ds_observation_total) * $arr_sessions[2]);
}
@endphp
<td class="left-align">{{$grades_data->ds_observation == "" ? "0" : ($grades_data->ds_observation/$grades_data->ds_observation_total) * $arr_sessions[2] }}</td>
@endif
@if(in_array(3, $arr_indicators))
@php
if($grades_data->model_lesson != ""){
$model_lesson_total = $model_lesson_total + (($grades_data->model_lesson/$grades_data->model_lesson_total) * $arr_sessions[3]);
if($model_lesson_total !=0 && !empty($model_lesson_total)){
$counter_model_lesson = $counter_model_lesson + 1;
}
$total_grades = $total_grades + ( ($grades_data->model_lesson/$grades_data->model_lesson_total) * $arr_sessions[3]);
}
@endphp
<td class="left-align">{{$grades_data->model_lesson == "" ? "0" : ($grades_data->model_lesson/$grades_data->model_lesson_total) * $arr_sessions[3] }}</td>
@endif
@if(in_array(4, $arr_indicators))
@php
if($grades_data->book_review != ""){
$book_review_total = $book_review_total + (($grades_data->book_review/$grades_data->book_review_total) * $arr_sessions[4]);
if($book_review_total !=0 && !empty($book_review_total)){
$counter_book_review = $counter_book_review + 1;
}
$total_grades = $total_grades + ( ($grades_data->book_review/$grades_data->book_review_total) * $arr_sessions[4]);
}
@endphp
<td class="left-align">{{$grades_data->book_review == "" ? "0" : ($grades_data->book_review/$grades_data->book_review_total) * $arr_sessions[4]}}</td>
@endif
@if(in_array(5, $arr_indicators))
@php
if($grades_data->syndicate != ""){
$total_grades = $total_grades + ( ($grades_data->syndicate/$grades_data->syndicate_total) * $arr_sessions[5]);
$syndicate_total = $syndicate_total + (($grades_data->syndicate/$grades_data->syndicate_total) * $arr_sessions[5]);
if($syndicate_total !=0 && !empty($syndicate_total)){
$counter_syndicate = $counter_syndicate + 1;
}
}
@endphp
<td class="left-align">{{$grades_data->syndicate == "" ? "0" : ($grades_data->syndicate/$grades_data->syndicate_total) * $arr_sessions[5] }}</td>
@endif
@if(in_array(6, $arr_indicators))
@php
if($grades_data->simulation != ""){
$total_grades = $total_grades + ( ($grades_data->simulation/$grades_data->simulation_total) * $arr_sessions[6]);
$simulation_total = $simulation_total + (($grades_data->simulation/$grades_data->simulation_total) * $arr_sessions[6]);
if($simulation_total !=0 && !empty($simulation_total)){
$counter_simulation = $counter_simulation + 1;
}
}
@endphp
<td class="left-align">{{$grades_data->simulation == "" ? "0" : ($grades_data->simulation/$grades_data->simulation_total) * $arr_sessions[6] }}</td>
@endif
@if(in_array(7, $arr_indicators))
@php
if($grades_data->project_work != ""){
$project_work_total = $project_work_total + (($grades_data->project_work/$grades_data->project_work_total) * $arr_sessions[7]);
if($project_work_total !=0 && !empty($project_work_total)){
$counter_project_work = $counter_project_work + 1;
}
$total_grades = $total_grades + ( ($grades_data->project_work/$grades_data->project_work_total) * $arr_sessions[7]);
}
@endphp
<td class="left-align">{{$grades_data->project_work == "" ? "0" : ($grades_data->project_work/$grades_data->project_work_total) * $arr_sessions[7] }}</td>
@endif
@if(in_array(8, $arr_indicators))
@php
if($grades_data->sports != ""){
$sports_total = $sports_total + (($grades_data->sports/$grades_data->sports_total) * $arr_sessions[8]);
if($sports_total !=0 && !empty($sports_total)){
$counter_sports = $counter_sports + 1;
}
$total_grades = $total_grades + ( ($grades_data->sports/$grades_data->sports_total) * $arr_sessions[8]);
}
@endphp
<td class="left-align">{{$grades_data->sports == "" ? "0" : ($grades_data->sports/$grades_data->sports_total) * $arr_sessions[8] }}</td>
@endif
@if(in_array(9, $arr_indicators))
@php
if($grades_data->practical_test != ""){
$practical_test_total = $practical_test_total + (($grades_data->practical_test/$grades_data->practical_test_total) * $arr_sessions[9]);
if($practical_test_total !=0 && !empty($practical_test_total)){
$counter_practical_test = $counter_practical_test + 1;
}
$total_grades = $total_grades + ( ($grades_data->practical_test/$grades_data->practical_test_total) * $arr_sessions[9]);
}
@endphp
<td class="left-align">{{$grades_data->practical_test == "" ? "0" : ($grades_data->practical_test/$grades_data->practical_test_total) * $arr_sessions[9] }}</td>
@endif
@if(in_array(10, $arr_indicators))
@php
if($grades_data->pre_test != ""){
$pre_test_total = $pre_test_total + (($grades_data->pre_test/$grades_data->pre_test_total) * $arr_sessions[10]);
if($pre_test_total !=0 && !empty($pre_test_total)){
$counter_pre_test = $counter_pre_test + 1;
}
$total_grades = $total_grades + ( ($grades_data->pre_test/$grades_data->pre_test_total) * $arr_sessions[10]);
}
@endphp
<td class="left-align">
{{$grades_data->pre_test == "" ? "0" : ($grades_data->pre_test/$grades_data->pre_test_total) * $arr_sessions[10] }}
</td>
@endif
@if(in_array(12, $arr_indicators))
@php
if($grades_data->mid_test != ""){
$mid_test_total = $mid_test_total + (($grades_data->mid_test/$grades_data->mid_test_total) * $arr_sessions[12]);
if($mid_test_total !=0 && !empty($mid_test_total)){
$counter_mid_test = $counter_mid_test + 1;
}
$total_grades = $total_grades + ( ($grades_data->mid_test/$grades_data->mid_test_total) * $arr_sessions[12]);
}
@endphp
<td class="left-align">
{{$grades_data->mid_test == "" ? "0" : ($grades_data->mid_test/$grades_data->mid_test_total) * $arr_sessions[12] }}
</td>
@endif
@if(in_array(11, $arr_indicators))
@php
if($grades_data->post_test != ""){
$post_test_total = $post_test_total + (($grades_data->post_test/$grades_data->post_test_total) * $arr_sessions[11]);
if($post_test_total !=0 && !empty($post_test_total)){
$counter_post_test = $counter_post_test + 1;
}
$total_grades = $total_grades + ( ($grades_data->post_test/$grades_data->post_test_total) * $arr_sessions[11]);
}
@endphp
<td class="left-align">
{{$grades_data->post_test == "" ? "0" : ($grades_data->post_test/$grades_data->post_test_total) * $arr_sessions[11] }}
</td>
@endif
@if(in_array(13, $arr_indicators))
@php
if($grades_data->individual_presentation != ""){
$individual_presentation_total = $individual_presentation_total + (($grades_data->post_test/$grades_data->individual_presentation_total) * $arr_sessions[13]);
if($individual_presentation_total !=0 && !empty($individual_presentation_total)){
$counter_individual_presentation = $counter_individual_presentation + 1;
}
$total_grades = $total_grades + ( ($grades_data->individual_presentation/$grades_data->individual_presentation_total) * $arr_sessions[13]);
}
@endphp
<td class="left-align">
{{$grades_data->individual_presentation == "" ? "0" : ($grades_data->individual_presentation/$grades_data->individual_presentation_total) * $arr_sessions[13] }}
</td>
@endif
@if(in_array(14, $arr_indicators))
@php
if($grades_data->case_study != ""){
$case_study_total = $case_study_total + (($grades_data->case_study/$individual_presentation->case_study_total) * $arr_sessions[14]);
if($counter_case_study !=0 && !empty($counter_case_study)){
$counter_individual_presentation = $counter_individual_presentation + 1;
}
$total_grades = $total_grades + ( ($grades_data->case_study/$grades_data->case_study_total) * $arr_sessions[14]);
}
@endphp
<!--- Case Study --->
<td class="left-align">{{ $grades_data->case_study == "" ? "0" : ($grades_data->case_study/$grades_data->case_study_total) * $arr_sessions[14] }}</td>
@endif
@if(in_array(15, $arr_indicators))
@php
$form_replies_total = $form_replies_total + $grades_data->form_replies;
if($form_replies_total !=0 && !empty($form_replies_total)){
$counter_form_replies = $counter_form_replies + 1;
}
@endphp
<td class="left-align">{{$grades_data->form_replies == "" ? "0" : $grades_data->form_replies}}</td>
@endif
@if(in_array(16, $arr_indicators))
@php
$virtual_session_total = $virtual_session_total + $grades_data->virtual_session;
if($virtual_session_total !=0 && !empty($virtual_session_total)){
$counter_virtual_session = $counter_virtual_session + 1;
}
@endphp
<td class="left-align">{{$grades_data->virtual_session == "" ? "0" : $grades_data->virtual_session}}</td>
@endif
@if(in_array(18, $arr_indicators))
<!--- Trainer Feedback --->
<td class="left-align">-</td>
@endif
@if(in_array(21, $arr_indicators))
@php
if($grades_data->form_replies != ""){
$graded_quiz_total = $graded_quiz_total + (($grades_data->graded_quiz/$grades_data->graded_quiz_total) * $arr_sessions[21]);
if($graded_quiz_total !=0 && !empty($graded_quiz_total)){
$counter_graded_quiz = $counter_graded_quiz + 1;
}
$total_grades = $total_grades + ( ($grades_data->graded_quiz/$grades_data->graded_quiz_total) * $arr_sessions[21]);
}
@endphp
<td class="left-align">
{{$grades_data->graded_quiz_total == "" ? "0" : $grades_data->graded_quiz_total}}
</td>
@endif
@if(in_array(22, $arr_indicators))
<!--- Feedback --->
<td class="left-align">-</td>
@endif
@if(in_array(23, $arr_indicators))
@php
$cop_total = $cop_total + $grades_data->cop_data;
if($cop_total !=0 && !empty($cop_total)){
$counter_cop = $counter_cop + 1;
}
@endphp
<td class="left-align">{{$grades_data->cop_data == "" ? "0" : $grades_data->cop_data}}</td>
@endif
@if(in_array(24, $arr_indicators))
@php
if($grades_data->non_graded_quiz_total != ""){
$non_graded_quiz_total = $non_graded_quiz_total + (($grades_data->non_graded_quiz_total/$grades_data->non_graded_quiz_total) * $arr_sessions[24]);
if($non_graded_quiz_total !=0 && !empty($non_graded_quiz_total)){
$counter_non_graded_quiz = $counter_non_graded_quiz + 1;
}
$total_grades = $total_grades + ( ($grades_data->non_graded_quiz_total/$grades_data->non_graded_quiz_total) * $arr_sessions[24]);
}
@endphp
<td class="left-align">
{{$grades_data->non_graded_quiz_total == "" ? "0" : $grades_data->non_graded_quiz_total}}
</td>
@endif
<td class="left-align">{{$total_grades}} </td>
<td class="left-align">
@if($total_grades > 90)
A
@elseif($total_grades > 80 && $total_grades <= 90)
B
@elseif($total_grades >= 66 && $total_grades <= 79)
C
@elseif($total_grades >= 50 && $total_grades <= 65)
D
@elseif($total_grades >= 35 && $total_grades <= 49)
E
@else
F
@endif
</td>
<td>
@if($grades_data->st_pic_url != "")
<img src="{{$grades_data->st_pic_url}}" alt="no image found" class="user-profile-pic"/>
@else
<img src="{{asset('img/default-avatar.jpg')}}" alt="no image found" class="user-profile-pic" />
@endif
</td>
<td>
{{$grades_data->tsas_pen_picture_comment}}
</td>
</tr>
@php
if($total_grades !=0){
$total_final_counter = $total_final_counter+$total_grades;
$total_score_counter = $total_score_counter+1;
}
@endphp
@endforeach
@endif
</tbody>
</table>
</main>
</body>
</html>