luti: [PEAR] File_PDF ruft footer() nicht auf

Hallo,

ich verwende PEAR, um ein PDF zu erzeugen. PEAR greift dabei im wesentlichen auf FPDF zurück. Hier das DOC-File.

Wenn ich mit "class My_File_PDF extends File_PDF" die Klasse File_PDF überschreibe und dort die Funktion "footer()" neu definiere, passiert leider gar nichts. Anders als erwartet (beschrieben), wird footer() nicht beim Aufruf von addPage() oder close() aufgerufen, sondern ignoriert. Hatte schon mal jemand das gleiche Problem und/oder weiß eine Lösung?

Hier mein Beispiel-Code:

require_once('File/PDF.php');  
	  
class My_File_PDF extends File_PDF  
{  
	function footer()  
	{  
		die();			  
	}  
}  
  
# Neues Objekt ableiten  
$pdf=&My_File_PDF::factory('P', 'mm', 'A4');  
$pdf->open();  
$pdf->setMargins(15,15);  
$pdf->setAutoPageBreak(true, 45);  
  
# Fonts	  
$pdf->AddFont('trebuc','',  'File/PDF/fonts/trebuc.php');  
$erg=$pdf->setFont('trebuc', '', 12);  
  
if (true===PEAR::isError($erg))  
{  
   die ($erg->getmessage());  
}  
  
# Seite erzeugen  
$pdf->addPage();  
  
# Inhalt  
$pdf->setXY(15, 35);  
$pdf->setFontSize(16);  
$pdf->MultiCell($width, 50, 'HALLO', '', 'C', 0);  
  
# Datei an Browser senden  
$erg=$pdf->output('dateiname');  
  
if (true===PEAR::isError($erg))  
{  
   die ($erg->getMessage());  
}

Dank & Gruß, luti

ps: die() habe ich nur mal als Beispiel angeführt, auch bei einer normalen Ausgabe geschieht nichts ...

  1. Hi!

    $pdf=&My_File_PDF::factory('P', 'mm', 'A4');

    Welche Klasse wird denn durch diese Factory wirklich instantiiert? var_dump($pdf) sagt dir das.

    Lo!

    1. Hallo dedlfix,

      Welche Klasse wird denn durch diese Factory wirklich instantiiert? var_dump($pdf) sagt dir das.

      Nun, die Ausgabe ergibt:

      object(File_PDF)#5 (55) {
        ["_page"]=>int(1)
        ["_n"]=>int(2)
        ["_offsets"]=>array(0) { [...]
        ["_pages"]=>array(1) { [...]
        ["_in_footer"]=>bool(false) [...]
      }

      Aber was sagt mir das jetzt genau? Heißt das, es wird ein File_PDF-Objekt erzeugt anstelle der My_File_PDF?

      Dank & Gruß, luti

      1. Hi,

        object(File_PDF)#5 (55) {

        Aber was sagt mir das jetzt genau? Heißt das, es wird ein File_PDF-Objekt erzeugt anstelle der My_File_PDF?

        Natürlich - in den Klammern hinter object steht der Name der Klasse, von der dieses Ding eine Instanz ist.

        MfG ChrisB

        --
        Light travels faster than sound - that's why most people appear bright until you hear them speak.
      2. Hi!

        Aber was sagt mir das jetzt genau? Heißt das, es wird ein File_PDF-Objekt erzeugt anstelle der My_File_PDF?

        Ganz genau so ist es. Es hätte mich auch sehr gewundert, wüsste die Factory-Methode, und noch dazu ohne dass man es ihr mitteilt, dass sie nun eine ganz andere Klasse instantiieren soll, als in ihrem Code vorgegeben ist.

        Schau in die Dokumentation oder dir den Code der PEAR-Klasse an, ob und wenn ja wie man eine andere Klasse instanziieren kann oder ob man die factory links liegen lassen kann und zu Fuß eine Instanz erstellen kann.

        Lo!

        1. Hallo,

          Schau in die Dokumentation oder dir den Code der PEAR-Klasse an, ob und wenn ja wie man eine andere Klasse instanziieren kann oder ob man die factory links liegen lassen kann und zu Fuß eine Instanz erstellen kann.

          Bingo! Kann man in der factory angeben ... Besten dank für die Hilfe.

          Und hier für die Nachwelt / das Archiv: Link

          void &factory( [array $params = array()], [string $class = 'File_PDF'])
          "string $class - The concrete class name to return an instance of. Defaults to File_PDF."

          Ich muss also das Objekt so erzeugen:

          $pdf=&My_File_PDF::factory(array('orientation' => 'P',  
                                           'unit' => 'mm',  
                                           'format' => 'A4'),  
                                     'My_File_PDF');
          

          Dank & Gruß, luti