Laravel отображает «Ошибка FPDF: страница еще не добавлена»

#laravel #fpdf

#laravel #fpdf

Вопрос:

Я использую библиотеку fpdf для своего проекта laravel. Я создаю класс для функции верхнего и нижнего колонтитулов. Затем вызовите эти функции на моем контроллере pdf. Я сталкиваюсь с этой ошибкой «Ошибка FPDF: страница еще не добавлена», и я понятия не имею, откуда взялась эта ошибка. Можете ли вы научить меня, как исправить эту ошибку. Заранее спасибо.

Коды с моего контроллера

 namespace AppHttpControllers;

use IlluminateHttpRequest;
use CodedgeFpdfFpdfFpdf;
use AppPersonnel;
use AppClassesPDFClass;

class PFTReportController extends Controller
{
    public function postPFTReport(Request $request)
    {
        $pdf = new FPDF();
        $pdf->AddPage('P', 'A4');
    $pdf->Ln(4);
    $pdf->SetFont('Arial', '', 12);

    // Call the header for this report
    $pdfClass = new PDFClass();
    $header = $pdfClass->Header();

    $pdf->Cell(0, 4, 'Sample Report', 0, 1, 'C');
    $pdf->Ln(2);
        
        $pdf->Output();
        exit;
    }
}
  

Код класса

 namespace AppClasses;

use CodedgeFpdfFpdfFpdf;

class PDFClass extends Fpdf
{
    protected $B = 0;
    protected $I = 0;
    protected $U = 0;
    protected $HREF = '';

    // Page header
    function Header()
    {
        $this->SetFont('Arial', '', 11);
        $this->Cell(0, 2, 'Line 1', 0, 1, 'C');
        $this->Cell(0, 8, 'Line 2', 0, 1, 'C');
        $this->SetFont('Arial', 'B', 12);
        $this->Cell(0, 1, 'Line 3', 0, 1, 'C');
        $this->Cell(0, 8, 'Line 4', 0, 1, 'C');
        $this->SetFont('Arial', '', 12);
        $this->Cell(0, 1, 'Line 5', 0, 1, 'C');
        $this->Ln(8);
    }
}
  

Ответ №1:

Вы создаете 2 экземпляра класса. Первый — это FPDF где вы добавляете страницу:

 $pdf = new FPDF();
$pdf->AddPage('P', 'A4');
$pdf->Ln(4);
$pdf->SetFont('Arial', '', 12);
  

… затем вы создаете новую и просто вызываете свой Header() метод вручную:

 $pdfClass = new PDFClass();
$header = $pdfClass->Header();
  

Это не имеет смысла, и на этом этапе выдается ошибка, потому что вы вызываете несколько методов в Header() , которые должны выводить содержимое на страницу, но вы не добавили его раньше.

Вы должны использовать только PDFClass и вы также не должны вызывать Header() метод вручную, потому что он вызывается автоматически.

 public function postPFTReport(Request $request)
{
    $pdf = new PDFClass();
    $pdf->AddPage('P', 'A4'); // NOW THE HEADER() METHOD IS INVOKED AUTOMATICALLY IN THIS CALL
    $pdf->Ln(4);
    $pdf->SetFont('Arial', '', 12);

    $pdf->Cell(0, 4, 'Sample Report', 0, 1, 'C');
    $pdf->Ln(2);
    
    $pdf->Output();
    exit;
}