具有 PHP 数据的 FPDF 多个 pdf - 不同的页眉和页脚
FPDF multiple pdf with PHP data - Different header and footer
我正在尝试根据来自数据库的数据创建 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,但在第二个和第三个 returns 中出现错误,因为重新声明了 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 的页眉和页脚不同。
预先感谢您的帮助和时间:)
如果我理解得很好,问题是您要重新声明 FPDF class。为避免这种情况,您可以在尝试重新声明它之前使用 class_exists php 函数验证 class 是否已经存在。
试试这个:
if (!class_exists('FPDF')) {
require('fpdf/fpdf.php');
}
我通过执行以下操作解决了问题:
在包含 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."'\">";
}
正在恢复:
如果这个人报名了上午和下午的课程,我会重定向到上午的证书,然后转到下午的证书,最后我发送所有证书。
如果这个人只在上午或下午注册,我会重定向到特定证书,然后发送所有证书。
而且如果此人上午或下午没有报名任何课程,我只发送参加证书。
可能代码没有那么漂亮,但是当时能用,解决了需求。我把决议留在这里。也许它会对其他人有所帮助。
我正在尝试根据来自数据库的数据创建 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,但在第二个和第三个 returns 中出现错误,因为重新声明了 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 的页眉和页脚不同。 预先感谢您的帮助和时间:)
如果我理解得很好,问题是您要重新声明 FPDF class。为避免这种情况,您可以在尝试重新声明它之前使用 class_exists php 函数验证 class 是否已经存在。
试试这个:
if (!class_exists('FPDF')) {
require('fpdf/fpdf.php');
}
我通过执行以下操作解决了问题:
在包含 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."'\">";
}
正在恢复: 如果这个人报名了上午和下午的课程,我会重定向到上午的证书,然后转到下午的证书,最后我发送所有证书。
如果这个人只在上午或下午注册,我会重定向到特定证书,然后发送所有证书。
而且如果此人上午或下午没有报名任何课程,我只发送参加证书。
可能代码没有那么漂亮,但是当时能用,解决了需求。我把决议留在这里。也许它会对其他人有所帮助。