PHP / Laravel - 如何在打印的每页上显示 table header?

PHP / Laravel - How can I display table header on each page print?

我正在使用 Laravel 5.6 和 maatwebsite(laravel-excel) 3.1 我的 php 版本是 7.1

这里是 ReportExport class :

<?php
namespace App\Exports;
use App\Report;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Illuminate\Contracts\View\View;
use Maatwebsite\Excel\Concerns\FromView;
use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Events\AfterSheet;
use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup;
class ReportExport implements ShouldAutoSize, FromView, WithColumnFormatting, WithEvents
{
    use Exportable;
    protected $id;
    public function __construct($id)
    {
        $this->id = $id;
    }
    public function view(): View
    {
        $report = Report::find($this->id);
        return view('exports.report', [
            'report' => $report,
        ]);
    }
    public function registerEvents(): array
    {
        return [
            AfterSheet::class    => function(AfterSheet $event) {
                $event->sheet->getDelegate()->getPageSetup()->setOrientation(PageSetup::ORIENTATION_LANDSCAPE);
                ...
            },
        ];
    }
}

我的观点 blade 像这样导出 laravel :

<table>
    ...
    <thead>
    <tr>
        <th colspan="2" rowspan="2">No</th>
        <th colspan="7" rowspan="2">Mata Pelajaran</th>
        <th colspan="17">Pengetahuan</th>
        <th colspan="17">Keterampilan</th>
    </tr>
    <tr>
        <th colspan="2">KB</th>
        <th colspan="3">Angka</th>
        <th colspan="3">Predikat</th>
        <th colspan="9">Deskripsi</th>
        <th colspan="2">KB</th>
        <th colspan="3">Angka</th>
        <th colspan="3">Predikat</th>
        <th colspan="9">Deskripsi</th>
    </tr>
    </thead>
    <tbody>
    ...
    @php ($group = 'A')
    @php ($number = 0)
    @foreach($values as $item)
    @if($number==0 || $group!=$item['group'])
    <tr>
        <td colspan="9">Kelompok {{$item['group']}}</td>
        <td colspan="2"></td>
        <td colspan="3"></td>
        <td colspan="3"></td>
        <td colspan="9"></td>
        <td colspan="2"></td>
        <td colspan="3"></td>
        <td colspan="3"></td>
        <td colspan="9"></td>
    </tr>
    @php ($number = 0)
    @endif
    <tr>
        <td colspan="2">{{++$number}}</td>
        <td colspan="7">{{$item['lesson_name']}}</td>
        <td colspan="2">{{$item['kb_pengetahuan']}}</td>
        <td colspan="3">{{$item['nilai_pengetahuan']}}</td>
        <td colspan="3">{{$item['predikat_pengetahuan']}}</td>
        <td colspan="9">{{$item['deskripsi_pengetahuan']}}</td>
        <td colspan="2">{{$item['kb_keterampilan']}}</td>
        <td colspan="3">{{$item['nilai_keterampilan']}}</td>
        <td colspan="3">{{$item['predikat_keterampilan']}}</td>
        <td colspan="9">{{$item['deskripsi_keterampilan']}}</td>
    </tr>
    @php ($group = $item['group'])
    @endforeach
    </tbody>
</table>

脚本有效。但是如果我在打印预览中看到,table 的 header 只显示在第 1 页。我希望 table header 出现在所有页面

我该怎么做?

因为您在这里使用 blade.. 所以您需要根据条件重复 header 以分隔每个页面。至于你想在页面上显示多少条记录。

最好将其创建为 sub-view 并根据条件包含 header。我的意思是在行数之后(基于页面上调整的 space) .

这是使用子视图的文档 - https://laravel.com/docs/5.8/blade#including-sub-views

如果您使用从记录生成 excel,您可以使用这种方法。

Set rows to repeat at top when printing - PHPExcel

如果有帮助请告诉我。