1

i get this error [2019-07-12 00:15:02] production.ERROR: Undefined index: {"userId":**,"email":"***********","exception":"[object] (ErrorException(code: 0): Undefined index: at /storage/ssd5/387/10173387/vendor/dompdf/dompdf/lib/Cpdf.php:3923) [stacktrace] on my live website. So i check Cpdf.php and go to line 3923 it is inside public function getFontHeight and the error is at $font=$this->fonts[$this->currentFont];

how to solve this? no forum, answers, or discuss about this error so i stuck

anyway, i have 4 html to be rendered by dompdf, 1 for invoice and 3 for reports. No problem with download or stream invoice, but another 3 reports is error 3923

here is my invoice controller

public function print_pemesanan($id)
{
    set_time_limit(300);
    $idp = $id;
    $datap = \App\Pemesanan::where('id_pemesanan',$id)->first();
    $result = \App\DPemesanan::where('id_pemesanan', $id)->get();
    $result2 = \App\TPemesanan::join('t_dpemesanan','t_tpemesanan.id_dpemesanan','=','t_dpemesanan.id_dpemesanan')->join('t_stock','t_dpemesanan.id_stock','=','t_stock.id_stock')->where('t_tpemesanan.id_pemesanan',$id)->get();
    $sum = \App\DPemesanan::select(DB::raw('sum(harga_pemesanan) as harga_total'))->where('id_pemesanan', $id)->groupBy('id_pemesanan')->get();

    $sum2 = \App\TPemesanan::where('id_pemesanan',$id)->whereIn('status_tpemesanan',[1,2])->select(DB::raw('sum(harga_tpemesanan) as harga_total'))->groupBy('id_pemesanan')->first();

    $pdf = PDF::loadview('mitra/pemesanan/faktur', compact('idp','datap','result','result2','sum','sum2'));
    return $pdf->download('faktur_'.$id,'.pdf');
}

here is my html invoice rendered by dompdf (success)

<html>
  <head>
<link rel="stylesheet" href="{{ asset('assets') }}/bower_components/bootstrap/dist/css/bootstrap.min.css">
<!-- Font Awesome -->
<link rel="stylesheet" href="{{ asset('assets') }}/bower_components/font-awesome/css/font-awesome.min.css">
<!-- Ionicons -->
<link rel="stylesheet" href="{{ asset('assets') }}/bower_components/Ionicons/css/ionicons.min.css">
<!-- Theme style -->
<link rel="stylesheet" href="{{ asset('assets') }}/dist/css/AdminLTE.min.css">
<!-- AdminLTE Skins. Choose a skin from the css/skins
     folder instead of downloading all of them to reduce the load. -->
<link rel="stylesheet" href="{{ asset('assets') }}/dist/css/skins/_all-skins.min.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,300italic,400italic,600italic">

<style>
  .no-gutters {
    margin-right: 0;
    margin-left: 0;

    > .col,
    > [class*="col-"] {
      padding-right: 0;
      padding-left: 0;
    }
  }
</style>
  </head>
  <body>
<div class="content-header row text-center">
  <img src="{{ asset('uploads') }}/logo.jpg" width="120" height="120"><br>

</div>
<section class="content">
      <div class="box box-warning box-solid">
        <div class="box-header with-border">
            Pesanan dari Mitra : {{ $datap->mitra->nama_mitra }} ({{ $datap->mitra->email_mitra }}), 
            {{ date("d-M-Y",strtotime($datap->tgl_pemesanan)) }}
        </div>
        <div class="box-body">
          <table class="table">
            <thead>
              <tr>
                <th>No</th>
                <th>Nama Pesanan</th>
                <th>Harga Satuan</th>
                <th>Jumlah Pesanan</th>
                <th>Harga Pesanan</th>
              </tr>
            </thead>
            <tbody>
              @foreach($result as $row)
                <tr>
                  <td>{{ !empty($i) ? ++$i : $i = 1}}</td>
                  <td>{{ $row->stock->nama_stock }}</td>
                  <td>Rp.{{ number_format($row->stock->harga_satuan,0,',','.') }},-/{{ $row->stock->satuan }}</td>
                  <td>{{ $row->jumlah_pemesanan }}{{ $row->stock->satuan }}</td>
                  <td>Rp.{{ number_format($row->harga_pemesanan,0,',','.') }},-</td>
                </tr>
              @endforeach
            </tbody>
          </table>
        </div>
        <!-- /.box-body -->
        <div class="box-footer">
          @foreach($sum as $row)
          <div class="col-sm-3 pull-right">
            <label class="control-label col-sm-6">Total Harga</label>
            <div class="col-sm-3">
              Rp.{{ number_format($row->harga_total,0,',','.') }},-
            </div>
          </div>
          @endforeach
        </div>
        <!-- /.box-footer-->
      </div>
      <!-- /.box -->
      <div class="box box-success box-solid">
        <div class="box-header with-border">
          Faktur Pesanan {{ $datap->id_pemesanan }}
        </div>
        <div class="box-body">
          <table class="table">
            <thead>
                <tr>
                  <th>No</th>
                  <th>Waktu Proses</th>
                  <th>Nama Barang Pesanan</th>
                  <th>Jumlah Pesanan</th>
                  <th>Harga Pesanan</th>
                  <th>Status Pesanan</th>
                  <th>Keterangan</th>
                </tr>
              </thead>
              <tbody>
                  @foreach($result2 as $row)
                    <tr>
                      <td>{{ !empty($u) ? ++$u : $u = 1}}</td>
                      <td>{{ date('d-M-Y H:i:s', strtotime($row->waktu_tpemesanan)) }}</td>
                      <td>{{ $row->nama_stock }}</td>
                      <td>{{ $row->jumlah_tpemesanan }}{{ $row->satuan }}</td>
                      <td>Rp.{{ number_format($row->harga_tpemesanan,0,',','.') }},-</td>
                      @if($row->status_tpemesanan==1)
                        <td>Dikirim Semua</td>
                      @elseif($row->status_tpemesanan==2)
                        <td>Dikirim Sebagian</td>
                      @elseif($row->status_tpemesanan==3)
                        <td>Ditolak</td>
                      @endif
                      <td>
                      @if(empty($row->keterangan))
                        ---
                      @else
                        {{ $row->keterangan }}
                      @endif
                      </td>
                    </tr>
                  @endforeach
              </tbody>
          </table>
        </div>
        <!-- /.box-body -->
        <div class="box-footer">
          <div class="col-sm-3 pull-right">
            <label class="control-label col-sm-6">Total Bayar</label>
            <div class="col-sm-3">
              Rp.{{ number_format($sum2->harga_total,0,',','.') }},-
            </div>
          </div>
        </div>
        <!-- /.box-footer-->
      </div>

</section>
<!-- jQuery 3 -->
<script src="{{ asset('assets') }}/bower_components/jquery/dist/jquery.min.js"></script>
<!-- Bootstrap 3.3.7 -->
<script src="{{ asset('assets') }}/bower_components/bootstrap/dist/js/bootstrap.min.js"></script>
<!-- SlimScroll -->
<script src="{{ asset('assets') }}/bower_components/jquery-slimscroll/jquery.slimscroll.min.js"></script>
<!-- FastClick -->
<script src="{{ asset('assets') }}/bower_components/fastclick/lib/fastclick.js"></script>
<!-- AdminLTE App -->
<script src="{{ asset('assets') }}/dist/js/adminlte.min.js"></script>
<!-- AdminLTE for demo purposes -->
<script src="{{ asset('assets') }}/dist/js/demo.js"></script>
<script>
  $(document).ready(function () {
    $('.sidebar-menu').tree()
  })
</script>

this one is 1 of my 3 report controller

public function pemesanan_preport(Request $request)
  {
    set_time_limit(2000);

    $tgl1 = date('Y-m-d', strtotime($request->input('tanggal_mulai')));
    $tgl2 = date('Y-m-d', strtotime($request->input('sampai_tanggal')));

    if($tgl1 > date('Y-m-d') || $tgl2 > date('Y-m-d')){
      return redirect('upper/laporan/pemesanan')->with('error','Tanggal yang diinput tidak bisa lebih besar dari '.date('d M Y').' (hari ini)');
    }elseif($tgl2 != '1970-01-01' && $tgl1 > $tgl2){
      return redirect('upper/laporan/pemesanan')->with('error','Tanggal mulai tidak bisa lebih besar dari inputan tanggal sampai');
    }elseif($tgl1 == '1970-01-01' && $tgl2 == '1970-01-01'){
      return redirect('upper/laporan/pemesanan')->with('error','Salah satu dari kedua tanggal harus diisi');
    }elseif($tgl1 == '1970-01-01'){
      $p = \App\Pemesanan::whereDate('tgl_pemesanan',$tgl2)->orderBy('tgl_pemesanan','desc')->get();
      //$tp = \App\TPemesanan::whereDate('waktu_tpemesanan',$tgl2)->get();
      $pdf = PDF::loadview('pimpinan/laporan/pemesanan/report', compact('p','tgl1','tgl2'))->setPaper('a4','landscape');
      return $pdf->download('laporan pemesanan tanggal '.date('d-M-Y', strtotime($tgl2)).'.pdf');
    }elseif($tgl2 == '1970-01-01'){
      $p = \App\Pemesanan::whereBetween('tgl_pemesanan',[$tgl1, date('Y-m-d')])->orderBy('tgl_pemesanan','desc')->get();
      //$tp = \App\TPemesanan::whereBetween(DB::raw('date(waktu_tpemesanan)'),[$tgl1, date('Y-m-d')])->get();
      $pdf = PDF::loadview('pimpinan/laporan/pemesanan/report',compact('p','tgl1','tgl2'))->setPaper('a4','landscape');
      return $pdf->download('laporan pemesanan tanggal '.date('d-M-Y', strtotime($tgl1)).' sampai tanggal '.date('d-M-Y').'.pdf');
    }else{
      $p = \App\Pemesanan::whereBetween('tgl_pemesanan',[$tgl1,$tgl2])->orderBy('tgl_pemesanan','desc')->get();
      //$tp = \App\TPemesanan::whereBetween(DB::raw('date(waktu_tpemesanan)'),[$tgl1, $tgl2])->get();
      $pdf = PDF::loadview('pimpinan/laporan/pemesanan/report', compact('p','tgl1','tgl2'))->setPaper('a4','landscape');
      return $pdf->download('laporan pemesanan tanggal '.date('d-M-Y', strtotime($tgl1)).' sampai tanggal '.date('d-M-Y', strtotime($tgl2)).'.pdf');
    }
  }

and this is 1 of my 3 report html rendered by dompdf (2 other get same error)

 <html>
  <head>
<link rel="stylesheet" href="{{ asset('assets') }}/bower_components/bootstrap/dist/css/bootstrap.min.css">
<!-- Font Awesome -->
<link rel="stylesheet" href="{{ asset('assets') }}/bower_components/font-awesome/css/font-awesome.min.css">
<!-- Ionicons -->
<link rel="stylesheet" href="{{ asset('assets') }}/bower_components/Ionicons/css/ionicons.min.css">
<!-- Theme style -->
<link rel="stylesheet" href="{{ asset('assets') }}/dist/css/AdminLTE.min.css">
<!-- AdminLTE Skins. Choose a skin from the css/skins
     folder instead of downloading all of them to reduce the load. -->
<link rel="stylesheet" href="{{ asset('assets') }}/dist/css/skins/_all-skins.min.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,300italic,400italic,600italic">

<style>
  .no-gutters {
    margin-right: 0;
    margin-left: 0;

    > .col,
    > [class*="col-"] {
      padding-right: 0;
      padding-left: 0;
    }
  }

  table, td, th, tr {
    border: 1px solid black !important;
  }
</style>
  </head>
  <body>
<div class="content-header row text-center">
  <img src="{{ asset('uploads') }}/logo.jpg" width="120" height="120"><br>
</div>
<section class="content">
  <div class="box box-warning box-solid">
    <div class="box-header">
        Laporan Pemesanan
        @if($tgl1 == '1970-01-01')
          Tanggal <strong>{{ date('d-M-Y', strtotime($tgl2)) }}</strong>
        @elseif($tgl2 == '1970-01-01')
          Tanggal <strong>{{ date('d-M-Y', strtotime($tgl1)) }}</strong> Sampai <strong>{{ date('d-M-Y') }}</strong>
        @else
          Tanggal <strong>{{ date('d-M-Y', strtotime($tgl1)) }}</strong> Sampai <strong>{{ date('d-M-Y', strtotime($tgl2)) }}</strong>
        @endif
        <div class="pull-right">Dicetak pada tanggal <strong>{{ date('d-M-Y') }}</strong></div>
    </div>
    <div class="box-body">
      <table class="table text-center">
        <thead>
          <tr>
            <th>No</th>
            <th>ID Pemesanan</th>
            <th>Tanggal Pemesanan</th>
            <th>Nama Mitra</th>
            <th>Harga Total</th>
            <th>Barang Pesanan</th>
            <th>Harga Satuan</th>
            <th>Jumlah Pesanan</th>
            <th>Status Pesanan</th>
            <th>Harga Pesanan</th>
          </tr>
        </thead>
        <tbody>
          @foreach ($p as $row)
          <tr>
            <td rowspan='{{ \App\TPemesanan::where("id_pemesanan",$row->id_pemesanan)->count() }}'>{{ !empty($i) ? ++$i : $i = 1}}</td>
            <td rowspan='{{ \App\TPemesanan::where("id_pemesanan",$row->id_pemesanan)->count() }}'>{{ $row->id_pemesanan }}</td>
            <td rowspan='{{ \App\TPemesanan::where("id_pemesanan",$row->id_pemesanan)->count() }}'>{{ date('d-M-Y', strtotime($row->tgl_pemesanan)) }}</td>
            <td rowspan='{{ \App\TPemesanan::where("id_pemesanan",$row->id_pemesanan)->count() }}'>{{ $row->mitra->nama_mitra }}</td>
            <td rowspan='{{ \App\TPemesanan::where("id_pemesanan",$row->id_pemesanan)->count() }}'>Rp. {{ number_format($row->harga_total,0,',','.') }},-</td>
            @foreach(\App\TPemesanan::where("id_pemesanan",$row->id_pemesanan)->limit(1)->get() as $row2)
              <td>{{ \App\DPemesanan::where("id_dpemesanan",$row2->id_dpemesanan)->first()->stock->nama_stock }}</td>
              <td>Rp. {{ number_format(\App\DPemesanan::where("id_dpemesanan",$row2->id_dpemesanan)->first()->stock->harga_satuan,0,',','.') }},-/{{ \App\DPemesanan::where("id_dpemesanan",$row2->id_dpemesanan)->first()->stock->satuan }}</td>
              <td>{{ \App\DPemesanan::where("id_dpemesanan",$row2->id_dpemesanan)->first()->jumlah_pemesanan }}{{ \App\DPemesanan::where("id_dpemesanan",$row2->id_dpemesanan)->first()->stock->satuan }}</td>
              <td>
                @if(\App\TPemesanan::where("id_tpemesanan",$row2->id_tpemesanan)->first()->status_tpemesanan == 1)
                {{ \App\TPemesanan::where("id_tpemesanan",$row2->id_tpemesanan)->first()->jumlah_tpemesanan }}{{ \App\DPemesanan::where("id_dpemesanan",$row2->id_dpemesanan)->first()->stock->satuan }}
                 (Dikirim Semua)
                @elseif(\App\TPemesanan::where("id_tpemesanan",$row2->id_tpemesanan)->first()->status_tpemesanan == 2)
                {{ \App\TPemesanan::where("id_tpemesanan",$row2->id_tpemesanan)->first()->jumlah_tpemesanan }}{{ \App\DPemesanan::where("id_dpemesanan",$row2->id_dpemesanan)->first()->stock->satuan }}
                 (Dikirim Sebagian)
                @elseif(\App\TPemesanan::where("id_tpemesanan",$row2->id_tpemesanan)->first()->status_tpemesanan == 3)
                {{ \App\TPemesanan::where("id_tpemesanan",$row2->id_tpemesanan)->first()->jumlah_tpemesanan }}{{ \App\DPemesanan::where("id_dpemesanan",$row2->id_dpemesanan)->first()->stock->satuan }}
                  (Ditolak)
                @endif
              </td>
              <td>Rp. {{ number_format(\App\TPemesanan::where("id_tpemesanan",$row2->id_tpemesanan)->first()->harga_tpemesanan,0,',','.') }},-</td>
            </tr>
            @foreach(\App\TPemesanan::where("id_pemesanan",$row->id_pemesanan)->get() as $row3)
            @if(\App\DPemesanan::where("id_dpemesanan",$row3->id_dpemesanan)->first() != \App\DPemesanan::where("id_dpemesanan",$row2->id_dpemesanan)->first() && \App\TPemesanan::where("id_tpemesanan",$row3->id_tpemesanan)->first() != \App\TPemesanan::where("id_tpemesanan",$row2->id_tpemesanan)->first())
            <tr>
             <td>{{ \App\DPemesanan::where("id_dpemesanan",$row3->id_dpemesanan)->first()->stock->nama_stock }}</td>
              <td>Rp. {{ number_format(\App\DPemesanan::where("id_dpemesanan",$row3->id_dpemesanan)->first()->stock->harga_satuan,0,',','.') }},-/{{ \App\DPemesanan::where("id_dpemesanan",$row3->id_dpemesanan)->first()->stock->satuan }}</td>
              <td>{{ \App\DPemesanan::where("id_dpemesanan",$row3->id_dpemesanan)->first()->jumlah_pemesanan }}{{ \App\DPemesanan::where("id_dpemesanan",$row3->id_dpemesanan)->first()->stock->satuan }}</td>
              <td>
                @if(\App\TPemesanan::where("id_tpemesanan",$row3->id_tpemesanan)->first()->status_tpemesanan == 1)
                {{ \App\TPemesanan::where("id_tpemesanan",$row3->id_tpemesanan)->first()->jumlah_tpemesanan }}{{ \App\DPemesanan::where("id_dpemesanan",$row3->id_dpemesanan)->first()->stock->satuan }}
                 (Dikirim Semua)
                @elseif(\App\TPemesanan::where("id_tpemesanan",$row3->id_tpemesanan)->first()->status_tpemesanan == 2)
                {{ \App\TPemesanan::where("id_tpemesanan",$row3->id_tpemesanan)->first()->jumlah_tpemesanan }}{{ \App\DPemesanan::where("id_dpemesanan",$row3->id_dpemesanan)->first()->stock->satuan }}
                 (Dikirim Sebagian)
                @elseif(\App\TPemesanan::where("id_tpemesanan",$row3->id_tpemesanan)->first()->status_tpemesanan == 3)
                {{ \App\TPemesanan::where("id_tpemesanan",$row3->id_tpemesanan)->first()->jumlah_tpemesanan }}{{ \App\DPemesanan::where("id_dpemesanan",$row3->id_dpemesanan)->first()->stock->satuan }}
                  (Ditolak)
                @endif
              </td>
              <td>Rp. {{ number_format(\App\TPemesanan::where("id_tpemesanan",$row3->id_tpemesanan)->first()->harga_tpemesanan,0,',','.') }},-</td>
            </tr>
            @endif
            @endforeach
            @endforeach
          @endforeach
        </tbody>
      </table>
    </div>
    <!-- /.box-body -->
    <div class="box-footer">
      Some System
      <div class="pull-right">

      </div>
    </div>
    <!-- /.box-footer-->
  </div>
      <!-- /.box -->
</section>
<!-- jQuery 3 -->
<script src="{{ asset('assets') }}/bower_components/jquery/dist/jquery.min.js"></script>
<!-- Bootstrap 3.3.7 -->
<script src="{{ asset('assets') }}/bower_components/bootstrap/dist/js/bootstrap.min.js"></script>
<!-- SlimScroll -->
<script src="{{ asset('assets') }}/bower_components/jquery-slimscroll/jquery.slimscroll.min.js"></script>
<!-- FastClick -->
<script src="{{ asset('assets') }}/bower_components/fastclick/lib/fastclick.js"></script>
<!-- AdminLTE App -->
<script src="{{ asset('assets') }}/dist/js/adminlte.min.js"></script>
<!-- AdminLTE for demo purposes -->
<script src="{{ asset('assets') }}/dist/js/demo.js"></script>
<script>
  $(document).ready(function () {
    $('.sidebar-menu').tree()
  })
</script>

this happen only in live server, i use free 000webhost server, is it the cause of my error? the free version? or anything else? please help me

  • That is a whole lot of code to sort through to try to help you. If you can trim this down to a minimal amount of info to *focus* on the area that is creating the error, you may find more people able to help you with your issue. At the least, though, make sure you include the method where the error comes from - I think you mention **Cpdf.php** as the cause, but I don't see the class or method up there. – Watercayman Jul 12 '19 at 01:05
  • 1
    hi, the error is similar with [this QA](https://stackoverflow.com/a/43931525/4648586) have you tried that? also, please anonymize your example, you may risk leaking where you work, what you work, what is it for. – Bagus Tesa Jul 12 '19 at 01:08
  • @Watercayman sorry if i put too many code there but that code is the area where the error is, the invoice is rendered and can be download normally but reports don't. And yes i already mention cpdf.php error in line 3923 while trying to render and download my reports – Ahmad Fikri N Dz Jul 12 '19 at 01:22
  • @BagusTesa, thank you, i'm in stress state now so i don't see if there is sensitive information i upload, but i already hide 'em. Yes i also tried to delete `dompdf_font_cache` but it only work for my invoice, not with my reports. – Ahmad Fikri N Dz Jul 12 '19 at 01:23

0 Answers0