Laravel-Dompdf ErrorException Cpdf.php, неопределенный индекс 3923 - PullRequest
0 голосов
/ 12 июля 2019

я получаю эту ошибку [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] на моем живом сайте.Поэтому я проверяю Cpdf.php и перехожу к строке 3923, она находится внутри public function getFontHeight, а ошибка в $font=$this->fonts[$this->currentFont];

, как решить эту проблему?нет форума, ответов или обсуждения этой ошибки, так что я все равно застрял

, у меня есть 4 html для рендеринга dompdf, 1 для счета и 3 для отчетов.Нет проблем с загрузкой или потоковым инвойсом, но другие 3 отчета - это ошибка 3923

, вот мой контроллер инвойса

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');
}

вот мой html-инвойс, представленный dompdf (успех)

<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>

это 1 из 3 моих контроллеров отчетов

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');
    }
  }

и это 1 из 3 моих html отчетов, представленных dompdf (2 других получают ту же ошибку)

 <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>

это происходит только на живом сервере, я использую бесплатный сервер 000webhost, это причина моей ошибки?бесплатная версия?или что-нибудь еще?пожалуйста, помогите мне

...