+ Antworten
Ergebnis 1 bis 2 von 2

Thema: FPDF in Joomla Komponente einbinden

  1. #1
    Neu an Board
    Registriert seit
    05.08.2010
    Beiträge
    2
    Bedankte sich
    0
    Erhielt 0 Danksagungen
    in 0 Beiträgen

    Idee FPDF in Joomla Komponente einbinden

    Hallo zusammen

    Ich habe mir die Nacht um die Ohren geschlagen und nun, mit ein paar Tricks FPDF zur Erstellung von PDF Dateien aus meiner Komponente heraus integrieren können. Da ich eher noch Joomla Anfänger bin, würde ich mich freuen über Ideen für eine bessere Realisierung.

    Das wichtigste was man über FPDF wissen muss ist: Es funktioniert nicht, wenn nur das kleinste Detail vor oder nach der PDF Erzeugung in den Browser geschrieben wird.

    Somit rufe ich FPDF über den Controller auf:
    PHP-Code:
    defined('_JEXEC') or die();
    jimport('joomla.application.component.controller');
    require(
    'fpdf.php');

    class 
    HalloWeltController extends JController
    {
        function 
    display()
        {
            if ( ! 
    JRequest::getCmd'view' ) ) {
                
    JRequest::setVar('view''categories' );
            }
            
    parent::display();
        }

        function 
    create_pdf()
        {
            
    $pdf=new FPDF();
            
    $pdf->AddPage();
            
    $pdf->SetFont('Arial','B',16);
            
    $pdf->Cell(40,10,'Hello World!');
            
    $pdf->Output();
    //Das Originalbeispiel hello world von FPDF geht bis hier. Funktioniert bei uns jedoch nicht, weil der Browser dies als HTML interpretiert und somit nur Sonderzeichen zum Vorschein kommen. Deswegen der von FPDF vorgeschlagene Workaround:
        //Determine a temporary file name in the current directory
        
    $file basename(tempnam('.''tmp'));
        
    rename($file$file.'.pdf');
        
    $file .= '.pdf';
        
    //Save PDF to file
        
    $pdf->Output($file'F');
        
    //Redirect
        
    header('Location: '.$file);
        }


    Wichtig für FPDF ist, dass nichts anderes in den Browser geschrieben wird. Deswegen muss die index.php des gewählten Designs ebenfalls angepasst werden, so, dass sie nichts mehr in den Browser schreibt.

    Somit die index.php um folgendes erweitern:
    PHP-Code:
    $pdf = $_GET['task'];

    if ($pdf == "create_pdf"){ //header ausschliessen, falls PDF kreiert werden muss, Komponenten trotzdem laden. 
        ?>
        <jdoc:include type="component" />>
        <?php
        
    }
    else
    {
    Dann natürlich das if am Ende der index.php wieder schliessen und siehe da, das war's.

    Jetzt kann ich durch den entsprechenden Aufruf des Controllers in der URL (&task=create_pdf) ein dynamisches PDF mit PHP erzeugen.

    Freue mich auf Ideen und Anregungen.

    Grüsse

    Epitome
    Geändert von Epitome (05.08.2010 um 15:22 Uhr)

  2. #2
    5ky
    5ky ist offline
    Neu an Board
    Registriert seit
    26.07.2010
    Beiträge
    48
    Bedankte sich
    5
    Erhielt 3 Danksagungen
    in 3 Beiträgen

    Standard

    Hey,

    Ich verwende FPDF in einer Joomla Komponente wie hier beschrieben.
    Mein Task lautet z.B. export_pdf

    Nun beginnt allerdings die Controllerdatei mit:
    HTML-Code:
    class KomponenteControllerBeispiel extends KomponenteController
    Innerhalb dieser Klasse habe ich meine Funktion für den Task export_pdf.

    Nun kann ich nicht innerhalb dieser Funktion erneut eine Klasse:
    HTML-Code:
    class mypdf extends fpdf
    erstellen, um z.B. einen Header bzw. Footer zu erzeugen.

    Laut FPDF Homepage sollte ja z.B. ein Footer so aussehen:
    HTML-Code:
    // Benutzedefinierte Klasse auf Basis von FPDF
    class myPDF extends FPDF 
    { 
        // Überlagerung der Footer() Methode
        function Footer() 
        { 
                // Über dem unteren Seitenrand positionieren 
                $this->SetY(-15); 
                // Schriftart festlegen
                $this->SetFont('Arial','I',8); 
                // Zentrierte Ausgabe der Seitenzahl
                $this->Cell(0,10,'Page '.$this->PageNo(),0,0,'C'); 
        } 
    }
    Denke hier fehlt mir grundsätzlich an der PHP-Logik. Dennoch währ ich sehr dankbar, wenn mir hier jemand nen Ruck in die richtige Richtung geben könnte.

    MfG
    5ky

+ Antworten

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein