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
Lesezeichen