From 6f151df6dd16113de817645a9f296b3a7bcc0e04 Mon Sep 17 00:00:00 2001 From: rmbinder Date: Thu, 9 Jun 2016 14:53:31 +0200 Subject: [PATCH] Formatting in labels, issue options and drop-down boxes, closes #1 --- createpdf.php | 163 ++++++++++++++++++++++++------------------- languages/de.xml | 2 +- languages/de_sie.xml | 2 +- languages/en.xml | 2 +- 4 files changed, 95 insertions(+), 74 deletions(-) diff --git a/createpdf.php b/createpdf.php index ee836e5..1cf19c8 100644 --- a/createpdf.php +++ b/createpdf.php @@ -21,6 +21,8 @@ * * Hinweis: Abhängig vom aufrufenden Programm wird * entweder user_id oder (lst_id und rol_id und show_members) übergeben + * + * Mit Änderungen zur Formatierung von kossihh (Juni 2016) *********************************************************************************************** */ @@ -176,11 +178,8 @@ // nur zur Info: FPDI kann auch die Größe einer PDF-Datei auslesen //$arr_size = $pdf->getTemplateSize($tplIdx); - // zuerst mal Standardschriftfarbe festlegen (falls nichts definiert wurde) - $pdf->SetTextColor(0,0,0); - - // und Standardschrift, -stil und -größe festlegen (falls nichts definiert wurde) - $pdf->SetFont('Arial','BI',10); + // zuerst mal Standardschrift, -stil, -größe und -farbe festlegen (falls nichts definiert wurde) + $attributes = array('font' => 'Arial', 'style' => 'BI', 'size' => 10, 'color' => '0,0,0'); // jetzt alle Felder durchlaufen //foreach($gProfileFields->mProfileFields as $field ) @@ -194,15 +193,15 @@ $formdata = $pPreferences->config['Formular']['positions'][$getpostFormID][$key]; - // Textfarbe mit den Daten der jeweiligen Konfiguration überschreiben - $color = explode(',',$pPreferences->config['Formular']['color'][$getpostFormID]); - $pdf->SetTextColor($color[0],$color[1],$color[2]); + // Textattribute mit den Daten der jeweiligen Konfiguration überschreiben, falls vorhanden + foreach(array('color', 'font', 'style', 'size') as $attribute) + { + //if isset($pPreferences->config['Formular'][$attribute][$getpostFormID]) + { + $attributes[$attribute] = $pPreferences->config['Formular'][$attribute][$getpostFormID]; + } + } - // Font mit den Daten der jeweiligen Konfiguration überschreiben - $pdf->SetFont($pPreferences->config['Formular']['font'][$getpostFormID], - $pPreferences->config['Formular']['style'][$getpostFormID], - $pPreferences->config['Formular']['size'][$getpostFormID] ); - if(!empty($formdata)) { //zuerst mal sehen, ob Schrift-Parameter angefügt sind (wenn sich ein ';' darin befindet) @@ -233,9 +232,8 @@ if ( array_key_exists ( 'C', $fontData ) ) { // jetzt mit den konfigurierten Daten überschreiben - $color = explode(',',$fontData['C']); $key = true; - foreach ($color as $data) + foreach (explode(',',$fontData['C']) as $data) { if(!(is_numeric($data))) { @@ -245,33 +243,27 @@ } if ($key) { - $pdf->SetTextColor($color[0],$color[1],$color[2]); + $attributes['color'] = $fontData['C']; } } - // wurde eine abweichende Schriftgröße definiert? -> prüfen und bei Syntaxfehler ggf. löschen - if ( array_key_exists ( 'S', $fontData ) && !(is_numeric($fontData['S']))) + // wurde eine abweichende Schriftgröße definiert? -> prüfen und ggf. setzen + if ( array_key_exists ( 'S', $fontData ) && is_numeric($fontData['S'])) { - unset($fontData['S']); + $attributes['size'] = $fontData['S']; } - // wurde ein abweichender Schrifttyp definiert? -> prüfen und bei Syntaxfehler ggf. löschen - if ( array_key_exists ( 'F', $fontData ) && !(in_array($fontData['F'],array('Courier','Arial','Times','Symbol','ZapfDingbats' )))) + // wurde ein abweichender Schrifttyp definiert? -> prüfen und ggf. setzen + if ( array_key_exists ( 'F', $fontData ) && in_array($fontData['F'], array('Courier','Arial','Times','Symbol','ZapfDingbats' ))) { - unset($fontData['F']); + $attributes['font'] = $fontData['F']; } - // wurden abweichende Schriftattribute definiert? -> prüfen und bei Syntaxfehler ggf. löschen - if ( array_key_exists ( 'A', $fontData ) && !(strstr_multiple('BIU',$fontData['A'])) ) + // wurden abweichende Schriftattribute definiert? -> prüfen und ggf. setzen + if ( array_key_exists ( 'A', $fontData ) && strstr_multiple('BIU',$fontData['A'])) { - unset($fontData['A']); + $attributes['style'] = $fontData['A']; } - - // wurden abweichende Schriftart, Schriftstil oder Schriftgröße definiert? -> überschreiben - $pdf->SetFont( - ((array_key_exists ( 'F', $fontData )) ? $fontData['F'] : $pPreferences->config['Formular']['font'][$getpostFormID]), - ((array_key_exists ( 'A', $fontData )) ? $fontData['A'] : $pPreferences->config['Formular']['style'][$getpostFormID]), - ((array_key_exists ( 'S', $fontData )) ? $fontData['S'] : $pPreferences->config['Formular']['size'][$getpostFormID]) ); switch ($fieldtype) { @@ -355,47 +347,69 @@ break; case 'p': - if($gProfileFields->getPropertyById($fieldid, 'usf_name_intern')=='GENDER') - { - if ( array_key_exists ( 'T', $fontData ) ) // wurden Werte für das Geschlecht definiert? - { - $gender = explode(',',$fontData['T']); - if(!isset($gender[0])) + switch ($gProfileFields->getPropertyById($fieldid, 'usf_type')) + { + case 'RADIO_BUTTON': + case 'DROPDOWN': + + $pos = $user->getValue($gProfileFields->getPropertyById($fieldid, 'usf_name_intern'), 'database') - 1; + + if ( array_key_exists ( 'T', $fontData ) ) // Nehme n-ten Text aus Konfiguration { - $gender[0]='x'; + $textarray = explode(',',$fontData['T']); + if(isset($textarray[$pos])) // Wenn Text für diese Stelle definiert + { + $text = $textarray[$pos]; + } + else // sonst nimm letzten definierten Text + { + $text = $textarray[Count($textarray)-1]; + } } - if(!isset($gender[1])) + else // lese Wert aus Datenbank { - $gender[1]=$gender[0]; + $text = $user->getValue($gProfileFields->getPropertyById($fieldid, 'usf_name_intern')); + if ( (substr($text, 0, 4) == '') ) + { + // Option wurde mit Icon definiert, wir müssen aus dem HTML Tag das Title-Attribut auslesen + $doc = new DOMDocument(); + $doc->loadXML($text); + $nodeList = $doc->getElementsByTagName('img'); + $nodes=iterator_to_array($nodeList); + $node=$nodes[0]; + if ($node->getattribute('title') == $gProfileFields->getPropertyById($fieldid, 'usf_name')) + { + // Kein Tooltip in der Option, nehme Icon-Name als Wert + $text = $node->getattribute('src'); + $text = substr($text, strrpos($text, '/') + 1); + $texttemp = explode('.', $text, 2); + $text = $texttemp[0]; + } + else + { + $text = $node->getattribute('title'); + } + } } - } - - if(strstr($user->getValue($gProfileFields->getPropertyById($fieldid, 'usf_name_intern')),'female')) - { - //female - if (isset($xyKoord[2]) && isset($xyKoord[3])) - { - $pdf->SetXY($xyKoord[2], $xyKoord[3]); - } - $text = $gender[1]; - } - elseif(strstr($user->getValue($gProfileFields->getPropertyById($fieldid, 'usf_name_intern')),'male')) - { - $text = $gender[0]; - } - } - elseif($gProfileFields->getPropertyById($fieldid, 'usf_type') == 'CHECKBOX') - { - if($user->getValue($gProfileFields->getPropertyById($fieldid, 'usf_name_intern'))) - { - $text = 'x'; - } - } - else - { - $text= $user->getValue($gProfileFields->getPropertyById($fieldid, 'usf_name_intern')); - } - break; + + if ($pos > 0) // Wenn nicht erstes Auswahlelement und weitere Positionen definiert + { + if (isset($xyKoord[$pos * 2]) && isset($xyKoord[$pos * 2 + 1])) + { + $pdf->SetXY($xyKoord[$pos * 2], $xyKoord[$pos * 2 + 1]); + } + } + break; + case 'CHECKBOX': + if($user->getValue($gProfileFields->getPropertyById($fieldid, 'usf_name_intern'))) + { + $text = 'x'; + } + break; + default: + $text= $user->getValue($gProfileFields->getPropertyById($fieldid, 'usf_name_intern')); + } + break; } // wurde optionaler Text angegeben? (von lagro) @@ -411,11 +425,15 @@ //über ein Hilfsarray gehen, falls mit Etiketten gearbeitet wird if (count($etiketten)>0) { - $etikettenText[$pdf->GetY()][$pdf->GetX()]=$text; + $attributes['text'] = $text; + $etikettenText[$pdf->GetY()][$pdf->GetX()] = $attributes; } else { - $pdf->Write(0,utf8_decode($text)); + $color = explode(',', $attributes['color']); + $pdf->SetTextColor($color[0],$color[1],$color[2]); + $pdf->SetFont($attributes['font'], $attributes['style'], $attributes['size']); + $pdf->Write(0,utf8_decode($text)); } } } // zum naechsten Profilfeld @@ -436,8 +454,11 @@ $text = ''; foreach($zeileData as $spalteText => $spalteData) { - $text .= $spalteData.' '; + $text .= $spalteData['text'].' '; } + $color = explode(',', $zeileData[$xKoord]['color']); + $pdf->SetTextColor($color[0],$color[1],$color[2]); + $pdf->SetFont($zeileData[$xKoord]['font'], $zeileData[$xKoord]['style'], $zeileData[$xKoord]['size']); $pdf->Write(0,utf8_decode($text)); } diff --git a/languages/de.xml b/languages/de.xml index 577488f..0e255aa 100644 --- a/languages/de.xml +++ b/languages/de.xml @@ -36,7 +36,7 @@ FEHLER: In jeder Konfiguration muss mindestens ein Feld mit Inhalt und Position angegeben sein! Feld Feldwahl - Hier werden die Profil- und Zusatzfelder ausgewählt, die in das PDF-Dokument gedruckt werden sollen. An "Position" werden die X- und Y-Koordinaten angegeben.\n\nZusätzlich kann für jedes Feld eine, gegenüber den Standardeinstellungen abweichende, Konfiguration erstellt werden.\n\nSyntax:\nSchriftart: F=Text (z.B. F=Arial)\nSchriftstil: A=B oder I oder U (z.B. A=B)\nSchriftgröße: S=Wert in pt (z.B. S=20)\nSchriftfarbe:C=RGB-Wert (z.B. C=0,0,255)\nGeschlecht: T=Text für männlich,Text für weiblich (z.B. T=Herrn,Frau)\nVortext: {=Text vor einem Feld (z.B. {=Hallo )\nNachtext: {=Text nach einem Feld (z.B. {=,)\n\nSyntax der Zusatzfelder:\nDatum: D=Formatparameter der Funktion date() (z.B. D=d.m.y), Standardeinstellung ist d.m.Y\nText: V=beliebiger Text (z.B. V=Hinweis)\nProfilfoto: L=Dateiname (z.B. L=logo.jpg), ohne Angabe eines Parameters wird ein evtl. vorhandenes Profilfoto angezeigt\n\n Beispiel:\nBezeichnung: Beitrittserklärung\nNachname: 10,20 (-> bedeutet Nachname auf Position 10,20) \nVorname: 10,40;S=7;F=Arial (-> bedeutet Vorname auf Position 10,40 mit Schriftart Arial in 7pt) \nAdresse: 40,20;C=255,102,255;A=B (-> bedeutet Adresse auf Position 40,20 mit Schriftfarbe rosa in Fettschrift)\nGeschlecht: 40,20,60,20;T=Herrn,Frau (-> bedeutet, abhängig vom Geschlecht, den Text Herrn an Position 40,20 oder den Text Frau an Position 60,20 + Hier werden die Profil- und Zusatzfelder ausgewählt, die in das PDF-Dokument gedruckt werden sollen. An "Position" werden die X- und Y-Koordinaten angegeben.\n\nZusätzlich kann für jedes Feld eine, gegenüber den Standardeinstellungen abweichende, Konfiguration erstellt werden.\n\nSyntax:\nSchriftart: F=Text (z.B. F=Arial)\nSchriftstil: A=B oder I oder U (z.B. A=B)\nSchriftgröße: S=Wert in pt (z.B. S=20)\nSchriftfarbe:C=RGB-Wert (z.B. C=0,0,255)\nOptions-/Dropdownfelder: T=Text für 1. Wert,Text für 2. Wert, usw. (z.B. T=Herrn,Frau; gibt man keinen Text über T= an, wird der Text des Options- bzw. Dropdownfeldes genommen)\nVortext: {=Text vor einem Feld (z.B. {=Hallo )\nNachtext: {=Text nach einem Feld (z.B. {=,)\n\nSyntax der Zusatzfelder:\nDatum: D=Formatparameter der Funktion date() (z.B. D=d.m.y), Standardeinstellung ist d.m.Y\nText: V=beliebiger Text (z.B. V=Hinweis)\nProfilfoto: L=Dateiname (z.B. L=logo.jpg), ohne Angabe eines Parameters wird ein evtl. vorhandenes Profilfoto angezeigt\n\n Beispiel:\nBezeichnung: Beitrittserklärung\nNachname: 10,20 (-> bedeutet Nachname auf Position 10,20) \nVorname: 10,40;S=7;F=Arial (-> bedeutet Vorname auf Position 10,40 mit Schriftart Arial in 7pt) \nAdresse: 40,20;C=255,102,255;A=B (-> bedeutet Adresse auf Position 40,20 mit Schriftfarbe rosa in Fettschrift)\nGeschlecht: 40,20,60,20;T=Herrn,Frau (-> bedeutet, abhängig vom Geschlecht, den Text Herrn an Position 40,20 oder den Text Frau an Position 60,20 Schriftart Schriftfarbe Hier wird die Standardschriftfarbe eingestellt. diff --git a/languages/de_sie.xml b/languages/de_sie.xml index 2379d02..e65ccee 100644 --- a/languages/de_sie.xml +++ b/languages/de_sie.xml @@ -36,7 +36,7 @@ FEHLER: In jeder Konfiguration muss mindestens ein Feld mit Inhalt und Position angegeben sein! Feld Feldwahl - Hier werden die Profil- und Zusatzfelder ausgewählt, die in das PDF-Dokument gedruckt werden sollen. An "Position" werden die X- und Y-Koordinaten angegeben.\n\nZusätzlich kann für jedes Feld eine, gegenüber den Standardeinstellungen abweichende, Konfiguration erstellt werden.\n\nSyntax:\nSchriftart: F=Text (z.B. F=Arial)\nSchriftstil: A=B oder I oder U (z.B. A=B)\nSchriftgröße: S=Wert in pt (z.B. S=20)\nSchriftfarbe:C=RGB-Wert (z.B. C=0,0,255)\nGeschlecht: T=Text für männlich,Text für weiblich (z.B. T=Herrn,Frau)\nVortext: {=Text vor einem Feld (z.B. {=Hallo )\nNachtext: {=Text nach einem Feld (z.B. {=,)\n\nSyntax der Zusatzfelder:\nDatum: D=Formatparameter der Funktion date() (z.B. D=d.m.y), Standardeinstellung ist d.m.Y\nText: V=beliebiger Text (z.B. V=Hinweis)\nProfilfoto: L=Dateiname (z.B. L=logo.jpg), ohne Angabe eines Parameters wird ein evtl. vorhandenes Profilfoto angezeigt\n\n Beispiel:\nBezeichnung: Beitrittserklärung\nNachname: 10,20 (-> bedeutet Nachname auf Position 10,20) \nVorname: 10,40;S=7;F=Arial (-> bedeutet Vorname auf Position 10,40 mit Schriftart Arial in 7pt) \nAdresse: 40,20;C=255,102,255;A=B (-> bedeutet Adresse auf Position 40,20 mit Schriftfarbe rosa in Fettschrift)\nGeschlecht: 40,20,60,20;T=Herrn,Frau (-> bedeutet, abhängig vom Geschlecht, den Text Herrn an Position 40,20 oder den Text Frau an Position 60,20 + Hier werden die Profil- und Zusatzfelder ausgewählt, die in das PDF-Dokument gedruckt werden sollen. An "Position" werden die X- und Y-Koordinaten angegeben.\n\nZusätzlich kann für jedes Feld eine, gegenüber den Standardeinstellungen abweichende, Konfiguration erstellt werden.\n\nSyntax:\nSchriftart: F=Text (z.B. F=Arial)\nSchriftstil: A=B oder I oder U (z.B. A=B)\nSchriftgröße: S=Wert in pt (z.B. S=20)\nSchriftfarbe:C=RGB-Wert (z.B. C=0,0,255)\nOptions-/Dropdownfelder: T=Text für 1. Wert,Text für 2. Wert, usw. (z.B. T=Herrn,Frau; gibt man keinen Text über T= an, wird der Text des Options- bzw. Dropdownfeldes genommen)\nVortext: {=Text vor einem Feld (z.B. {=Hallo )\nNachtext: {=Text nach einem Feld (z.B. {=,)\n\nSyntax der Zusatzfelder:\nDatum: D=Formatparameter der Funktion date() (z.B. D=d.m.y), Standardeinstellung ist d.m.Y\nText: V=beliebiger Text (z.B. V=Hinweis)\nProfilfoto: L=Dateiname (z.B. L=logo.jpg), ohne Angabe eines Parameters wird ein evtl. vorhandenes Profilfoto angezeigt\n\n Beispiel:\nBezeichnung: Beitrittserklärung\nNachname: 10,20 (-> bedeutet Nachname auf Position 10,20) \nVorname: 10,40;S=7;F=Arial (-> bedeutet Vorname auf Position 10,40 mit Schriftart Arial in 7pt) \nAdresse: 40,20;C=255,102,255;A=B (-> bedeutet Adresse auf Position 40,20 mit Schriftfarbe rosa in Fettschrift)\nGeschlecht: 40,20,60,20;T=Herrn,Frau (-> bedeutet, abhängig vom Geschlecht, den Text Herrn an Position 40,20 oder den Text Frau an Position 60,20 Schriftart Schriftfarbe Hier wird die Standardschriftfarbe eingestellt. diff --git a/languages/en.xml b/languages/en.xml index b167fed..ad7f6a9 100644 --- a/languages/en.xml +++ b/languages/en.xml @@ -36,7 +36,7 @@ ERROR: In each configuration, at least one field with content and position must be specified! Field Field selection - Here the profile and additional fields can be selected to be printed in the PDF document. On "position" the X and Y coordinates are specified.\n\nYou can also specify for each field one, compared to the standard settings deviating configuration.\n\nSyntax:\nFont: F=Text (e.g. F=Arial)\nFont style: A=B or I or U (e.g. A=B)\nFont size: S=size in pt (e.g. S=20)\nFont color:C=RGB value (e.g. C=0,0,255)\nGender: T=Text for male,text for female (e.g. T=Mr.,Mrs.)\nBefore text: {=Text in front of a field (e.g. {=Hallo )\nSuffix text: {=Text behind a field (e.g. {=,)\n\nSyntax of the additional fields:\nDate: D=Format parameter of the function date() (e.g. D=d.m.y), standard setting is d.m.Y\nText: V=any text (z.B. V=Attention)\nProfilephoto: L=Filename (z.B. L=logo.jpg), without a parameter, an existing profile photo is displayed\n\n Example:\nDescription: Declaration\nLast name: 10,20 (-> means last name at position 10,20) \nFirst name: 10,40;S=7;F=Arial (-> means first name at position 10,40 with font Arial 7pt) \nAddress: 40,20;C=255,102,255;A=B (-> means address at position 40,20 with font color pink in bold)\nGender: 40,20,60,20;T=Mr.,Mrs. (-> means, depending on the gender, the text Mr. at position 40,20 or the text Mrs. at position 60,20) + Here the profile and additional fields can be selected to be printed in the PDF document. On "position" the X and Y coordinates are specified.\n\nYou can also specify for each field one, compared to the standard settings deviating configuration.\n\nSyntax:\nFont: F=Text (e.g. F=Arial)\nFont style: A=B or I or U (e.g. A=B)\nFont size: S=size in pt (e.g. S=20)\nFont color:C=RGB value (e.g. C=0,0,255)\nRadio Button/Drop-down Box: T=Text for 1. value,text for 2. value, etc (e.g. T=Mr.,Mrs.; is not a given text on T =, the text of the option or drop-down field is taken)\nBefore text: {=Text in front of a field (e.g. {=Hallo )\nSuffix text: {=Text behind a field (e.g. {=,)\n\nSyntax of the additional fields:\nDate: D=Format parameter of the function date() (e.g. D=d.m.y), standard setting is d.m.Y\nText: V=any text (z.B. V=Attention)\nProfilephoto: L=Filename (z.B. L=logo.jpg), without a parameter, an existing profile photo is displayed\n\n Example:\nDescription: Declaration\nLast name: 10,20 (-> means last name at position 10,20) \nFirst name: 10,40;S=7;F=Arial (-> means first name at position 10,40 with font Arial 7pt) \nAddress: 40,20;C=255,102,255;A=B (-> means address at position 40,20 with font color pink in bold)\nGender: 40,20,60,20;T=Mr.,Mrs. (-> means, depending on the gender, the text Mr. at position 40,20 or the text Mrs. at position 60,20) Font Font color Here, the default font color is set.