0

FPDFとPHPを使用して、DBからのデータに応じて1、2、または3つのPDFを作成しようとしています。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 つの画像 (ヘッダーとフッター) と、var. 最初の PDF では Ok が生成されますが、FPDF の一部のクラスが再宣言されているため、2 番目と 3 番目ではエラーが返されます。

<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");

 ?>

Ok。それでおしまい!2 番目と 3 番目の FPDF コードは上記と同じですが、PDF はヘッダーとフッターが異なるため、画像ディレクトリが異なるだけです。あなたの助けと時間を前もってありがとう:)

4

2 に答える 2

0

次のようにして問題を解決しました。

次のファイル (gera-certificado-wm.php) を含める代わりに、gera-certificado.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."'\">";
        }

再開: 午前と午後のコースに登録した場合は、午前の証明書にリダイレクトし、次に午後の証明書にリダイレクトし、最後にすべての証明書を送信します。

その人が午前または午後のみに登録した場合は、特定の証明書にリダイレクトしてから、すべての証明書を送信します。

また、午前、午後のいずれのコースにも登録されていない場合は、参加証明書のみをお送りします。

コードはそれほど美しくないかもしれませんが、当時は機能し、ニーズを解決していました。ここに決議を残します。多分それは他の誰かを助けるでしょう。

于 2018-07-16T23:10:50.803 に答える
0

私がよく理解していれば、問題は FPDF クラスを再宣言していることです。これを回避するには、class_exists php 関数を使用して、クラスを再宣言する前に、クラスが既に存在するかどうかを確認できます。

これを試して:

if (!class_exists('FPDF')) {
    require('fpdf/fpdf.php');
}
于 2015-02-10T19:27:08.607 に答える