FPDF несколько PDF с данными PHP — различные заголовок и нижний колонтитул

Я пытаюсь создать 1, 2 или 3 PDF-файла в зависимости от данных, поступающих из БД — с помощью FPDF и PHP.
Если мне нужно создать 1 PDF, то все в порядке.
Но если мне нужно создать 2 или 3, у меня проблемы, потому что я не могу переопределить некоторые классы.

Ниже приведен код PHP, который проверяет, сколько PDF-файлов нужно сгенерировать:

include "gera-certificado.php"; //creates the first PDF - ok

if($workshop_manha != ''){
include "gera-certificado-wm.php"; // if this var is not empty, then create the second PDF -> problem
}

if($workshop_tarde != ''){
include "gera-certificado-wt.php"; // if this var is not empty, then create the third PDF -> problem
}

Ниже код FPDF — состоит из 2 изображений (верхний и нижний колонтитулы) и только 2 или 3 строки текста с именем var. В первом PDF генерирует Ok, но во втором и третьем возвращает мне ошибку, потому что повторно объявлены некоторые классы FPDF.

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<?php
define('FPDF_FONTPATH','fpdf/font/');
require('fpdf/fpdf.php');
class PDF extends FPDF {
function Header() {
$this->SetFont("Arial","I",10);
//escreve no pdf largura,altura,conteudo,borda,quebra de linha,alinhamento,preenchimento fundo

//altura
$this->SetY(0);
$this->Image("img/topo-certificado.jpg",0,0,297,100); //Image($arquivo);

}
function Footer(){
$this->SetY(-15);
$this->Image("img/rodape-certificado.jpg",0,140,297,70); //Image($arquivo);
}
}

$pdf=new PDF('L','mm','A4');
$pdf->Open();
$pdf->AddPage();
$pdf->SetMargins(0,0,0);
$pdf->SetAutoPageBreak(false);
$pdf->SetAuthor('Dr. Ricardo Wainer');
$pdf->SetTitle('Certificado');

$pdf->SetFont('Arial','',13);
$pdf->SetTextColor(27,67,161);     // Definir cor do texto
$pdf->SetDrawColor(0,0,0); // Definir cor do traço?
$pdf->SetXY(30,106);
$pdf->MultiCell(236,8,"Certificamos que ".strtoupper($nome)." participou do I Congresso Wainer de Psicoterapias Cognitivas, I Congresso Sul-Brasileiro de Terapias Integradas e de 3ª Onda e I Simpósio Brasileiro de Terapia do Esquema, realizado no dias 27, 28 e 29 de agosto de 2015, com carga horária de 22 horas.",0,'C');

$pdf->Output("../../certificados/".$id.".pdf");

?>

Хорошо. Это оно! Второй и третий коды FPDF те же, что и выше, они отличаются только каталогом изображений, потому что PDF — это верхний и нижний колонтитулы.
Заранее спасибо за помощь и время 🙂

0

Решение

Если я хорошо понимаю, проблема в том, что вы переделываете класс FPDF. Чтобы избежать этого, вы можете проверить, существует ли класс, прежде чем пытаться переопределить его, используя функцию php class_exists.

Попробуй это:

if (!class_exists('FPDF')) {
require('fpdf/fpdf.php');
}
0

Другие решения

Я решил проблему, выполнив следующее:

После включения gera -tificado.php (файла, который генерирует первый сертификат) вместо включения следующего файла (gera -tificado-wm.php) я перенаправил с помощью get, чтобы воспользоваться переменными на следующей странице.

Итак, после того, как первый сертификат был сгенерирован, это поток:

        if($workshop_manha != '' AND $workshop_tarde != ''){
echo "<META HTTP-EQUIV='REFRESH' CONTENT=\"0; URL='gera-certificado-wm.php?id=".$id."&oc=".$oc."&nome=".$nome."&email=".$email."&wm=".$workshop_manha."&wt=".$workshop_tarde."'\">";
}
if($workshop_manha != '' AND $workshop_tarde == ''){
echo "<META HTTP-EQUIV='REFRESH' CONTENT=\"0; URL='gera-certificado-wm.php?id=".$id."&oc=".$oc."&nome=".$nome."&email=".$email."&wm=".$workshop_manha."'\">";
}
if($workshop_manha == '' AND $workshop_tarde != ''){
echo "<META HTTP-EQUIV='REFRESH' CONTENT=\"0; URL='gera-certificado-wt.php?id=".$id."&oc=".$oc."&nome=".$nome."&email=".$email."&wm=".$workshop_manha."&wt=".$workshop_tarde."'\">";
}

if($workshop_manha == '' AND $workshop_tarde == '' AND $oc != '0'){
echo "<META HTTP-EQUIV='REFRESH' CONTENT=\"0; URL='../../action/envia-certificado-congresso.php?id=".$id."&nome=".$nome."&email=".$email."'\">";
}

Резюмируя:
Если человек записался на утренние и дневные курсы, я перенаправляю на утренний сертификат, а затем на дневной сертификат и, наконец, отправляю все сертификаты.

Если человек зарегистрировался только утром или днем, я перенаправляю на конкретный сертификат и затем отправляю все сертификаты.

И если человек не записался ни на один курс утром или днем, я только отправляю сертификат об участии.

Может быть, код не такой красивый, но в то время он работал и решал задачи. Я оставляю резолюцию здесь. Может быть, это поможет кому-то еще.

0

По вопросам рекламы [email protected]