Bei einem aktuellen Kundenprojekt gab es den Feature-Wunsch, die bestehende Extbase/Fluid -Extension um einen PDF-Export der entsprechenden Daten zu erweitern. Ein Teammitglied ist auf die Idee gekommen FPDF zu verwenden, was es erlaubt, unter PHP schnell PDFs zu erstellen. Die ersten Versuche endeten dann aber darin, dass wir sehr große PHP-Dateien mit zu viel Code hatten. Da haben wir uns gedacht, das muss irgendwie besser gehen und sind auf die Idee gekommen, Fluid zu verwenden und den Code in ViewHelper auszulagern.
Der HauptViewHelper sieht dann so aus:
require('fpdf/fpdf.php'); class Tx_Initos_ViewHelpers_FpfdViewHelper extends Tx_Fluid_Core_ViewHelper_AbstractViewHelper { public function render() { $pdf = new FPDF(); $this->templateVariableContainer->add('fpdf', $pdf); $this->renderChildren(); $pdf->Output('Report', 'I'); $this->templateVariableContainer->remove('fpdf'); exit(); } } |
Danach braucht man einen einfachen Helper, um Seiten anzulegen:
class Tx_Initos_ViewHelpers_P_PageViewHelper extends Tx_Fluid_Core_ViewHelper_AbstractViewHelper { public function render(){ $fpdf = $this->templateVariableContainer->get('fpdf'); $fpdf->AddPage(); $this->renderChildren(); } } |
Und einen ViewHelper, um den Text zu erzeugen:
class Tx_Initos_ViewHelpers_P_TextViewHelper extends cTx_Fluid_Core_ViewHelper_AbstractViewHelper { /** * * @param string $text * @param int $width * @param int $height */ public function render($text, $width, $height){ $pdf = $this->templateVariableContainer->get('fpdf'); $pdf->SetFont('Times','I',30); $pdf->SetTextColor(0,0,0); $pdf->Ln(10); $pdf->Cell($width, $height, utf8_decode($text)c, 0, 1, 'L'); $this->renderChildren(); } } |
Danach kann man sich ein FluidTemplate bauen:
{namespace initos=Tx_Initos_ViewHelpers} |
So kann man die gewohnte Fluid-Syntax verwenden, um PDFs zu erstellen, erhält ein übersichtliches Template und vermeidet Code-Doppelungen. Auf zum Weiteren FPDF-ViewHelper bauen.
Interessieren auch Sie sich für technische Anwendungssysteme? Dann informieren Sie sich doch einfach über unser Schulungsangebot. Oder Sie melden Sie sich bei uns, entweder telefonisch unter +49 4105 135 03 99, per Mail an sales@initos.com oder über unser Kontaktformular.