带有PHP数据的FPDF多重pdf - 不同的页眉和页脚

时间:2015-02-10 19:17:44

标签: php pdf fpdf multiple-processes

我正在尝试根据来自数据库的数据创建1,2或3个PDF - 使用FPDF和PHP。 如果我必须创建1个PDF就可以了。 但是,如果我需要创建2或3我遇到问题,因为无法重新声明某些类。

用于测试必须生成多少PDF的PHP代码:

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是页眉和页脚不同。 在此先感谢您的帮助和时间:)

2 个答案:

答案 0 :(得分:0)

如果我理解得很好,问题是您重新声明了FPDF类。为避免这种情况,您可以使用class_exists php函数在尝试重新声明之前验证该类是否已存在。

试试这个:

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

答案 1 :(得分:0)

我通过以下操作解决了这个问题:

在添加了gera-certificado.php(生成第一个证书的文件)之后,我没有使用下一个文件(gera-certificado-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."'\">";
        }

恢复: 如果该人参加了上午和下午的课程,则我将重定向到早晨证书,然后再重定向到下午证书,最后我将所有证书发送给我。

如果该人仅在上午或下午才报名,我将重定向至特定证书,然后发送所有证书。

如果该人在早上或下午没有参加任何课程,我只会发送参加证书。

也许代码不是那么漂亮,但是当时它可以工作并解决了需求。我把决议留在这里。也许会帮助别人。