FPDF, pdf genereren met variabelen
Op dit moment werk ik aan een huurovereenkomst. Met FPDF gebruik ik de volgende classes om een pdf te genereren:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$pdf = new PDF();
$pdf->AliasNbPages()
$pdf->AddPage()
$this->MultiCell()
$pdf->Cell()
$pdf->Output()
?>
$pdf = new PDF();
$pdf->AliasNbPages()
$pdf->AddPage()
$this->MultiCell()
$pdf->Cell()
$pdf->Output()
?>
Dit werkt allemaal prima met afbeeldingen, positioneringen en variabele waarden zoals tijden, data en prijzen.
Nu zou ik graag willen dat er drie standaard teksten komen (voor 3 verschillende typen verhuur) die in ons CMS aan te passen zijn met een WYSIWYG html editor. Binnen die standaard teksten moeten dan nog de variabelen komen voor tijden, data etc. Probleem is nu dat ik geen idee heb hoe ik HTML direct om kan zetten naar PDF met FPDF en hoe ik kan werken met variabelen in de standaard teksten die aangepast kunnen worden in de editors. Heeft iemand tips en/of ideeën hoe ik dat het beste kan realiseren?
Het geeft een redelijk resultaat, maar verwacht niet dat je een website zomaar in PDF kan zetten ermee. Er is wel wat tweaking en dergelijke nodig.
Zo te zien moet het omzetten van HTML wel lukken. Het gaat niet om een website maar om het genereren van een huurovereenkomst. Dan zit ik nu alleen nog met de standaardteksten die aangepast kunnen worden in een html editor, met in die tekst nog eens variabelen.
Voorbeeld:
De materialen kunt u afhalen op $afhaaldatum na x uur en dient u retour te brengen op op $retourdatum voor x tijd.
Dit is slechts een heel klein voorbeeld van een standaardtektst waar de variabelen in komen te staan. Is dat te combineren met een WYSIWYG HTML editor?
In de tekst kan je dan variabelen in zetten die je met bijvoorbeeld str_replace() aanpast en dan in FPDF gebruiken. Voor de duidelijkheid zou ik echter geen $ gebruiken om een variabele aan te geven in die tekst, maar bijvoorbeeld een %.
Aan zoiets zat ik inderdaad ook te denken. Ik wil namelijk graag dat de teksten van huurovereenkomsten door iedereen eenvoudig aan te passen zijn. Aan de HTML editor zat ik te denken omdat het mij dan eenvoudiger lijkt om met bijvoorbeeld paragrafen te werken. Ik ga er mee aan de slag!
Ik zal eens kijken naar MPDF kijken. Het heeft mij aardig wat moeite gekost om een goede opmaak neer te zetten met FPDF. Dat staat nu verder goed alleen de opzet zoals ik nu heb niet flexibel genoeg. Waarschijnlijk gaat het nu wel gewoon lukken met FPDF :-)
Als voorbeeld: Verhuurdatum: [VERHUURDATUM] moet omgezet worden naar bijboorbeeld Verhuurdatum: 16 juli 2012 maar nu wordt er met onderstaande code van gemaakt Verhuurdatum: [16 juli 2012]. Weet iemand hoe ik dat kan verhelpen?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
$string = $afhaalbasis['bev_standaardtekst'];
$patterns = array();
$patterns[0] = '[VERHUURDATUM]';
$patterns[1] = '[AFHAALDATUM]';
$patterns[2] = '[AFHAALTIJDBEGIN]';
$replacements = array();
$replacements[0] = $dag[$tmp_huurdag[0]]." ".$huurdag." ".$maand[$tmp_huurmaand[0]]." ".$huurjaar;
$replacements[1] = $afhaaldag." ".$maand[$tmp_afhaalmaand[0]]." ".$afhaaljaar;
$replacements[2] = '16:00';
$html = preg_replace($patterns, $replacements, $string);
?>
$string = $afhaalbasis['bev_standaardtekst'];
$patterns = array();
$patterns[0] = '[VERHUURDATUM]';
$patterns[1] = '[AFHAALDATUM]';
$patterns[2] = '[AFHAALTIJDBEGIN]';
$replacements = array();
$replacements[0] = $dag[$tmp_huurdag[0]]." ".$huurdag." ".$maand[$tmp_huurmaand[0]]." ".$huurjaar;
$replacements[1] = $afhaaldag." ".$maand[$tmp_afhaalmaand[0]]." ".$afhaaljaar;
$replacements[2] = '16:00';
$html = preg_replace($patterns, $replacements, $string);
?>
je dient je patterns aan te passen. Je maakt gebruik van regular expressions, waarbij het eerste en het laatste teken altijd genegeerd worden. Hieronder de code zoals het zou moeten werken:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
$string = $afhaalbasis['bev_standaardtekst'];
$patterns = array();
$patterns[0] = '^[VERHUURDATUM]^';
$patterns[1] = '^[AFHAALDATUM]^';
$patterns[2] = '^[AFHAALTIJDBEGIN]^';
$replacements = array();
$replacements[0] = $dag[$tmp_huurdag[0]]." ".$huurdag." ".$maand[$tmp_huurmaand[0]]." ".$huurjaar;
$replacements[1] = $afhaaldag." ".$maand[$tmp_afhaalmaand[0]]." ".$afhaaljaar;
$replacements[2] = '16:00';
$html = preg_replace($patterns, $replacements, $string);
?>
$string = $afhaalbasis['bev_standaardtekst'];
$patterns = array();
$patterns[0] = '^[VERHUURDATUM]^';
$patterns[1] = '^[AFHAALDATUM]^';
$patterns[2] = '^[AFHAALTIJDBEGIN]^';
$replacements = array();
$replacements[0] = $dag[$tmp_huurdag[0]]." ".$huurdag." ".$maand[$tmp_huurmaand[0]]." ".$huurjaar;
$replacements[1] = $afhaaldag." ".$maand[$tmp_afhaalmaand[0]]." ".$afhaaljaar;
$replacements[2] = '16:00';
$html = preg_replace($patterns, $replacements, $string);
?>
Ik heb het even geprobeerd maar het werkt nog niet helemaal. Waarom het fout gaat begrijp ik niet.
Hieronder staat wat ik heb geprobeerd met de bijbehorende resultaten:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$string = "Verhuurdatum: [VERHUURDATUM]<br>
Deze kunt u afhalen op [AFHAALDATUM] tussen [AFHAALTIJDBEGIN] en.....";
$patterns = array();
$patterns[0] = '^[VERHUURDATUM]^';
$patterns[1] = '^[AFHAALDATUM]^';
$patterns[2] = '^[AFHAALTIJDBEGIN]^';
$replacements = array();
$replacements[0] = $dag[$tmp_huurdag[0]]." ".$huurdag." ".$maand[$tmp_huurmaand[0]]." ".$huurjaar;
$replacements[1] = $afhaaldag." ".$maand[$tmp_afhaalmaand[0]]." ".$afhaaljaar;
$replacements[2] = '16:00';
$html = preg_replace($patterns, $replacements, $string);
die($html);
?>
$string = "Verhuurdatum: [VERHUURDATUM]<br>
Deze kunt u afhalen op [AFHAALDATUM] tussen [AFHAALTIJDBEGIN] en.....";
$patterns = array();
$patterns[0] = '^[VERHUURDATUM]^';
$patterns[1] = '^[AFHAALDATUM]^';
$patterns[2] = '^[AFHAALTIJDBEGIN]^';
$replacements = array();
$replacements[0] = $dag[$tmp_huurdag[0]]." ".$huurdag." ".$maand[$tmp_huurmaand[0]]." ".$huurjaar;
$replacements[1] = $afhaaldag." ".$maand[$tmp_afhaalmaand[0]]." ".$afhaaljaar;
$replacements[2] = '16:00';
$html = preg_replace($patterns, $replacements, $string);
die($html);
?>
Resultaat: vrijdag 15 juni 2012erhuurdatum: [vrijdag 15 juni 2012vrijdag 15 juni 2012vrijdag 15 juni 2012vrijdag 15 juni 2012vrijdag 15 juni 2012vrijdag 15 juni 2012vrijdag 15 juni 2012vrijdag 15 juni 2012vrijdag 15 juni 2012vrijdag 15 juni 2012vrijdag 15 juni 2012vrijdag 15 juni 2012]
vrijdag 15 juni 2012eze kunt u afhalen op [vrijdag 15 juni 201214 00:00:00 2012vrijdag 15 juni 2012vrijdag 15 juni 2012vrijdag 15 juni 201214 00:00:00 2012vrijdag 15 juni 2012vrijdag 15 juni 2012vrijdag 15 juni 2012vrijdag 15 juni 2012vrijdag 15 juni 2012] tussen [vrijdag 15 juni 201214 00:00:00 2012vrijdag 15 juni 2012vrijdag 15 juni 2012vrijdag 15 juni 201214 00:00:00 2012vrijdag 15 juni 201216:0016:00vrijdag 15 juni 201216:00vrijdag 15 juni 201216:0016:0016:00] en.....
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$string = "Verhuurdatum: [VERHUURDATUM]<br>
Deze kunt u afhalen op [AFHAALDATUM] tussen [AFHAALTIJDBEGIN] en.....";
$patterns = array();
$patterns[0] = '[VERHUURDATUM]';
$patterns[1] = '[AFHAALDATUM]';
$patterns[2] = '[AFHAALTIJDBEGIN]';
$replacements = array();
$replacements[0] = $dag[$tmp_huurdag[0]]." ".$huurdag." ".$maand[$tmp_huurmaand[0]]." ".$huurjaar;
$replacements[1] = $afhaaldag." ".$maand[$tmp_afhaalmaand[0]]." ".$afhaaljaar;
$replacements[2] = '16:00';
$html = preg_replace($patterns, $replacements, $string);
die($html);
?>
$string = "Verhuurdatum: [VERHUURDATUM]<br>
Deze kunt u afhalen op [AFHAALDATUM] tussen [AFHAALTIJDBEGIN] en.....";
$patterns = array();
$patterns[0] = '[VERHUURDATUM]';
$patterns[1] = '[AFHAALDATUM]';
$patterns[2] = '[AFHAALTIJDBEGIN]';
$replacements = array();
$replacements[0] = $dag[$tmp_huurdag[0]]." ".$huurdag." ".$maand[$tmp_huurmaand[0]]." ".$huurjaar;
$replacements[1] = $afhaaldag." ".$maand[$tmp_afhaalmaand[0]]." ".$afhaaljaar;
$replacements[2] = '16:00';
$html = preg_replace($patterns, $replacements, $string);
die($html);
?>
Resultaat: Verhuurdatum: [vrijdag 15 juni 2012]
Deze kunt u afhalen op [14 00:00:00 2012] tussen [16:00] en.....
Zoals het tweede resultaat zou het uiteraard moeten zijn zonder '[]'. Weet iemand hoe ik dit op kan lossen?
Gewijzigd op 16/06/2012 11:00:14 door Marco ----
gebruik preg_quote('/[VERHUURDATUM]/') enz., [] zijn speciale regex karakters.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$string = "Verhuurdatum: [VERHUURDATUM]<br>
Deze kunt u afhalen op [AFHAALDATUM] tussen [AFHAALTIJDBEGIN] en.....";
$patterns = array();
$patterns[0] = '[VERHUURDATUM]';
$patterns[1] = '[AFHAALDATUM]';
$patterns[2] = '[AFHAALTIJDBEGIN]';
$replacements = array();
$replacements[0] = $dag[$tmp_huurdag[0]]." ".$huurdag." ".$maand[$tmp_huurmaand[0]]." ".$huurjaar;
$replacements[1] = $afhaaldag." ".$maand[$tmp_afhaalmaand[0]]." ".$afhaaljaar;
$replacements[2] = '16:00';
$brackets = array('[', ']');
$replaced = preg_replace($patterns, $replacements, $string);
$html = str_replace($brackets, '', $replaced);
die($html);
?>
$string = "Verhuurdatum: [VERHUURDATUM]<br>
Deze kunt u afhalen op [AFHAALDATUM] tussen [AFHAALTIJDBEGIN] en.....";
$patterns = array();
$patterns[0] = '[VERHUURDATUM]';
$patterns[1] = '[AFHAALDATUM]';
$patterns[2] = '[AFHAALTIJDBEGIN]';
$replacements = array();
$replacements[0] = $dag[$tmp_huurdag[0]]." ".$huurdag." ".$maand[$tmp_huurmaand[0]]." ".$huurjaar;
$replacements[1] = $afhaaldag." ".$maand[$tmp_afhaalmaand[0]]." ".$afhaaljaar;
$replacements[2] = '16:00';
$brackets = array('[', ']');
$replaced = preg_replace($patterns, $replacements, $string);
$html = str_replace($brackets, '', $replaced);
die($html);
?>
Bedankt voor jullie reacties