0

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>

0 Answers0