[PHP & FPDF] Mehrere pdfs erstellen lassen druch funktion

martin

Well-Known Member
Hi

Also ich hab mir ne Datei gebastelt, die heißt pdf_create.php Da drinnen wird wie der Name schon sagt ein PDF erzeugt. Das klappt auch wunderbar, aber leider nur, solange ich nur ein PDF damit erzeuge. Ich müsste also für jedes PDF immer die Seite neu laden lassen. Ich möchte aber nun dem Benutzer die Möglichkeit geben mit einem Klick gleich mehrere PDFs gleichzeitig zu erstellen. Also hab ich mir gedacht, ich pack das in ne Funktion, so ungefähr sieht meine Datei nun aus:

PHP:
function pdf_rechnung($rech_nr, $rech_jahr, $user_id){


class PDF extends FPDF
{
function ....
function .... (hier werden Daten dynamisch geändert sind also von pdf zu pdf verschieden
function ....
function ....

}
$pdf=new PDF();
$pdf->AliasNbPages();
$pdf->AddPage();
$pfad = $rech_nr . ".pdf";
$pdf->Output($pfad);
}

So nun kommt aber immer die Fehlermeldung, in der Zeile in der sich das "class PDF extents FPDF" befindet, dass der Server irgendwas nicht zweimal deklarieren kann. Hat jemand sowas in der Art schonmal gemacht mit fpdf, oder hat jemand einen Tip für mich?
Achso...die Funktion oben wird auf einer php Seite in einer Schleife einige Male durchlaufen.

Vielen Dank
martin
 
Zuletzt bearbeitet:
Dann mach einmal:
Code:
class PDF1 extends FPDF
und
Code:
class PDF2 extends FPDF

und entsprechend:
Code:
$pdf=new PDF1();
oder
Code:
$pdf=new PDF2();
 
Nein geht leider nicht, es kommt folgende Fehlermeldung:


Parse error: parse error, unexpected T_VARIABLE, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in test.php
on line 49

und die line 49 ist die class PDF{$i}...
 
[LoN]Kamikaze schrieb:
$pdf=new PDF{$i}();
also wenn dann:
Code:
$classname = 'PDF'.$i;
$pdf=new $classname;
Bei einem Klassennamen hast du es ja nicht mit variablen Variablen zu tun.

Ansonsten versteh ich das Konzept von martin nicht wirklich um da mehr helfen zu können.
 
danke für den Tip wiedmann, aber das geht auch nicht, bekomme folgende Fehlermeldung:

Parse error: parse error, unexpected T_VARIABLE, expecting T_STRING in
 
Ich komme hier nicht ganz nach... Geht es in PHP, dass du eine Klasse in einer Funktion hast?

Zeig nochmals deinen aktuellen Code, dann komme ich vielleicht wieder nach.
 
uhm...
die klasse kannst du doch so lassen wie sie ist
machst du
PHP:
for($i=0;$i<5;$i++) {
 $pdf = new FPDF;
 $pdf->DeinKramDenDuImPdfHabenWillst;
 $pdf->Output("pdf_datei_". $i .".pdf);
}
und dann wird für jeden durchlauf ein neues pdf erstellt.
Oder hab ich was falsch verstanden?

Philip
 
menace schrieb:
wiedmann: ich meinte eigentlich powerpointdateien, die nach pdf konvertiert wurden.
Sorry, da kann ich dir nicht helfen. Habe kein Ghostscript installiert.

FiLiS schrieb:
die klasse kannst du doch so lassen wie sie ist
Nicht wenn er z.B. Seitenheader/Footer usw. benutzen will. Dazu muss er die Class erweitern.

Und so wie ich ihn verstanden hab, wird bei jedem Durchlauf ein anderes PDF erzeugt, welches dann z.B. andere Seitenheader/Footer benötigt.

IMHO stimmt einfach sein grundlegender/logischer Aufbau vom Script nicht.
 
Hehe das Problem ist doch ein ganz anderes:

PHP:
function foo(/*...*/) {
	class BAR {
		//....
	}
	//....
}

foo();
foo();

Das erste foo() geht gut, das zweite natürlich nicht mehr da der Klassenname BAR schon existier und somit nicht ein weiteres mal deklariert werden kann.

Warum man in diesem Fall eine Klasse innerhalb einer Funktion deklarieren will erschliesst sich mir auch nicht. Pack sie doch da raus und das Problem hat sich erledigt.

Oder Du musst halt tricksen und abfragen ob die Klasse noch nicht existiert und nur dann deklarieren.

PHP:
function foo(/*...*/) {
	if (! class_exists ('BAR')) {
		class BAR {
			//....
		}
	}
	//....
}
 
Zuletzt bearbeitet von einem Moderator:
ja, im grunde sollte man ja die klasse erst definieren und dann mit der funktion jeweils ein neues objekt erstellen

PHP:
class PDF extends FPDF {
    [...]
}

function pdf_rechnung($rech_nr, $rech_jahr, $user_id){
    $pdf=new PDF();
    $pdf->AliasNbPages();
    $pdf->AddPage();
    $pfad = $rech_nr . ".pdf";
    $pdf->Output($pfad);
}

Der Witz an den Objekten ist ja, dass man ihnen Attribute zuweisen kann.
 
Hi. Danke für die Antworten, ihr habt natürlich alle recht. Aber ich bin nicht soo das Programmiergenie (wer hätte das gedacht... ;) ). Hab die fpdf classe hergenommen und wie Wiedmann schon ahnte verwende ich header und foother funktionen. Und genau da liegt der Hund begraben in diesen Funktionen werden so Objekte erstellt wie z.B. ein Kästchen mit Rahmen und dort ein Text drin, der sich von pdf zu pdf ändert.
So es kann durchaus sein, dass meine Art das zu bewerkstelligen nicht passt, aber ich weiß eben nicht wie ich das anders machen könnte. Ich möchte wie gesagt nichts weiteres als mehrere PDFs mit unterschiedlichen Werten in den Funktionen header() und foother() haben.
 
dann müsste es doch evtl. gehen, das mit einer Variable abzufackeln.

PHP:
class PDF extends FPDF {
   [...]
   function Header() {
      [...]
      hier machste was mit $this->foo
   }
   function Footer() {
      hier machste was mit $this->foo
   }
}
und dann halt $foo setzen:
PHP:
$pdf = new PDF;
$pdf->foo="dein zeug";
[...]
Wenn Du aber PDFs mit nur 1 Seite erzeugst und Header und Footer also eh nur 1x aufgerufen würden, kannst Du Dir evtl auch mit SetX(), SetY() bzw. SetXY() aushelfen.
 
Jo! Damit geht es jetzt, vielen Dank. Und sorry nochmal wegen der dummen Frage, aber ich bin kein König im Programmieren!
 
Zurück
Oben