Changeset 65481 in spip-zone


Ignore:
Timestamp:
Sep 3, 2012, 3:01:22 PM (7 years ago)
Author:
cedric@…
Message:

Indentation

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/spipdf/spipdf_fonctions.php

    r65480 r65481  
    121121        return str_replace('img', 'img style="padding:5px;" class="pdf_img_float_' . $matches[1] . '"', $matches[2]);
    122122}
     123
    123124function spipdf_remplaceSpan($matches){
    124125        return str_replace('img', 'img style="padding:5px;" align="' . $matches[1] . '"', $matches[2]);
    125126}
     127
    126128function spipdf_remplaceSpanCenter($matches){
    127129        return $matches[1];
    128130}
     131
    129132//function spipdf_remplaceDt($matches) { return str_replace('img', 'img style="padding:5px;" style="float:'.$matches[1].'"', $matches[2]); }
    130133function spipdf_remplaceDt_wfloat($matches){
    131134        return str_replace('img', 'img style="padding:5px;" class="pdf_img_float_' . $matches[1] . '"', $matches[2]);
    132135}
     136
    133137function spipdf_remplaceDt($matches){
    134138        return str_replace('img', 'img style="padding:5px;" align="' . $matches[1] . '"', $matches[2]);
    135139}
     140
    136141function spipdf_remplaceIdParName($matches){
    137142        return str_replace('id=\'', 'name=\'', $matches[0]);
    138143}
     144
    139145function spipdf_remplaceFloatPuce($matches){
    140146        return str_replace('style=\'', 'style=\'float:left;', $matches[0]);
    141147}
     148
    142149function spipdf_remplaceDtCenter($matches){
    143150        return $matches[1];
    144151}
     152
    145153function spipdf_remplaceCaption($matches){
    146154        $table = '<table style="border:none;"' . $matches[1] . '<tr><td style="text-align: center;border:none;">' . $matches[2] . '</td></tr>';
     
    154162        // supprimer les spans autour des images et récupérer le placement
    155163        $patterns_float = '/<span class=\'spip_document_.*spip_documents.*float:(.*);.*>(.*)<\/span>/iUms';
    156         $html = preg_replace_callback($patterns_float, !empty($params_pdf['float'])?'spipdf_remplaceSpan':'spipdf_remplaceSpan_wfloat', $html);
     164        $html = preg_replace_callback($patterns_float, !empty($params_pdf['float']) ? 'spipdf_remplaceSpan' : 'spipdf_remplaceSpan_wfloat', $html);
    157165
    158166        // supprimer les spans autour des images
     
    162170        // supprimer les dl autour des images et récupérer le placement
    163171        $patterns_float = '/<dl class=\'spip_document_.*spip_documents.*float:(.*);.*<dt>(.*)<\/dt>.*<\/dl>/iUms';
    164         $html = preg_replace_callback($patterns_float, !empty($params_pdf['float'])?'spipdf_remplaceDt':'spipdf_remplaceDt_wfloat', $html);
     172        $html = preg_replace_callback($patterns_float, !empty($params_pdf['float']) ? 'spipdf_remplaceDt' : 'spipdf_remplaceDt_wfloat', $html);
    165173
    166174        // replacer id par name pour les notes
     
    229237function spipdf_html2pdf($html){
    230238
    231                 // les librairies possibles
    232                 $possible_librairies = array(
    233                         'mpdf' => array( // gére le float d'image mais pas les captions de tableau
    234                                 'float' => true,
    235                                 'caption' => true,
    236                                 'traite_balise_page' => true
    237                         ),
    238                         'html2pdf' => array( // ne gére pas le float d'image et les captions
    239                                 'float' => false,
    240                                 'caption' => true
    241                         ),
    242                         'dompdf' => array( // domPDF beta 0.6 EXPERIMENTAL
    243                                 'float' => false,
    244                                 'caption' => true,
    245                                 'traite_balise_page' => true
    246                         ),
    247                 );
    248 
    249                 // choix de la classe de génération via la balise <page lib>
    250                 if (preg_match('/\<page*.lib_pdf=["|\'](.*)["|\']/iUms', $html, $match_librairie)
    251                         && !empty($match_librairie[1])
    252                         && array_key_exists(strtolower($match_librairie[1]), $possible_librairies)
    253                 ){
    254                         $librairie_pdf = strtolower($match_librairie[1]);
    255                 } else {
    256                         $librairie_pdf = 'mpdf';
     239        // les librairies possibles
     240        $possible_librairies = array(
     241                'mpdf' => array( // gére le float d'image mais pas les captions de tableau
     242                        'float' => true,
     243                        'caption' => true,
     244                        'traite_balise_page' => true
     245                ),
     246                'html2pdf' => array( // ne gére pas le float d'image et les captions
     247                        'float' => false,
     248                        'caption' => true
     249                ),
     250                'dompdf' => array( // domPDF beta 0.6 EXPERIMENTAL
     251                        'float' => false,
     252                        'caption' => true,
     253                        'traite_balise_page' => true
     254                ),
     255        );
     256
     257        // choix de la classe de génération via la balise <page lib>
     258        if (preg_match('/\<page*.lib_pdf=["|\'](.*)["|\']/iUms', $html, $match_librairie)
     259                && !empty($match_librairie[1])
     260                && array_key_exists(strtolower($match_librairie[1]), $possible_librairies)
     261        ){
     262                $librairie_pdf = strtolower($match_librairie[1]);
     263        } else {
     264                $librairie_pdf = 'mpdf';
     265        }
     266
     267        // tester si la librairie est dans /lib à la racine du spip ou dans le répertoire du plugin
     268        if (is_dir(_DIR_LIB . $librairie_pdf)){
     269                $dir_librairie_pdf = _DIR_LIB . $librairie_pdf . '/';
     270        } elseif (is_dir(dirname(__FILE__) . '/lib/' . $librairie_pdf)) {
     271                $dir_librairie_pdf = dirname(__FILE__) . '/lib/' . $librairie_pdf . '/';
     272        } else {
     273                die('Impossible de trouver la librairie de génération de PDF ' . $librairie_pdf . '. vérifiez que vous l\'avez bien téléchargée et installée dans /lib');
     274        }
     275
     276        // nettoyer le HTML et gérer les placements d'image en fonction de la librairie utilisée
     277        $html = spipdf_nettoyer_html($html, $possible_librairies[$librairie_pdf]);
     278
     279        // Debug = voir le html sans génération de PDF
     280        if (isset($_GET['debug_spipdf'])){
     281                echo $html;
     282                exit;
     283        }
     284
     285        // du A4 par defaut
     286        $format_page = _SPIPDF_FORMAT;
     287
     288        // traiter la balise page pour les librairies qui ne la comprennent pas
     289        if (!empty($possible_librairies[$librairie_pdf]['traite_balise_page'])){
     290
     291                $html = traite_balise_page($html);
     292
     293                // dans balise_page, on ne récupère que quelques possibilité dont le format
     294                if (!empty($GLOBALS['valeurs_page'])){
     295                        if (!empty($GLOBALS['valeurs_page']['format']))
     296                                $format_page = $GLOBALS['valeurs_page']['format'];
     297                        if (!empty($GLOBALS['valeurs_page']['backtop']))
     298                                $backtop = $GLOBALS['valeurs_page']['backtop'];
     299                        else
     300                                $backtop = _SPIPDF_MARGIN_TOP;
     301                        if (!empty($GLOBALS['valeurs_page']['backbottom']))
     302                                $backbottom = $GLOBALS['valeurs_page']['backbottom'];
     303                        else
     304                                $backbottom = _SPIPDF_MARGIN_BOTTOM;
     305                        if (!empty($GLOBALS['valeurs_page']['backleft']))
     306                                $backleft = $GLOBALS['valeurs_page']['backleft'];
     307                        else
     308                                $backleft = _SPIPDF_MARGIN_LEFT;
     309                        if (!empty($GLOBALS['valeurs_page']['backright']))
     310                                $backright = $GLOBALS['valeurs_page']['backright'];
     311                        else
     312                                $backright = _SPIPDF_MARGIN_RIGHT;
     313                        if (!empty($GLOBALS['valeurs_page']['margin_header']))
     314                                $margin_header = $GLOBALS['valeurs_page']['margin_header'];
     315                        else
     316                                $margin_header = _SPIPDF_MARGIN_HEADER;
     317                        if (!empty($GLOBALS['valeurs_page']['margin_footer']))
     318                                $margin_footer = $GLOBALS['valeurs_page']['margin_footer'];
     319                        else
     320                                $margin_footer = _SPIPDF_MARGIN_FOOTER;
    257321                }
    258 
    259                 // tester si la librairie est dans /lib à la racine du spip ou dans le répertoire du plugin
    260                 if (is_dir(_DIR_LIB . $librairie_pdf)){
    261                         $dir_librairie_pdf = _DIR_LIB . $librairie_pdf . '/';
    262                 } elseif (is_dir(dirname(__FILE__) . '/lib/' . $librairie_pdf)) {
    263                         $dir_librairie_pdf = dirname(__FILE__) . '/lib/' . $librairie_pdf . '/';
    264                 } else {
    265                         die('Impossible de trouver la librairie de génération de PDF ' . $librairie_pdf . '. vérifiez que vous l\'avez bien téléchargée et installée dans /lib');
     322        }
     323
     324        if ($librairie_pdf=='mpdf'){ // la librairie mPDF
     325
     326                // si il y a des options dans la balise page
     327                // http://mpdf1.com/manual/index.php?tid=307
     328
     329                // le chemin relatif vers mPDF
     330                define('_MPDF_PATH', $dir_librairie_pdf);
     331                include_once(_MPDF_PATH . 'mpdf.php');
     332
     333                // la classe mPDF
     334                $mpdf = new mPDF(SPIPDF_CHARSET, $format_page, 0, "", $backleft, $backright, $backtop, $backbottom, $margin_header, $margin_footer);
     335                $mpdf->WriteHTML($html);
     336
     337                $html = $mpdf->Output('', 'S'); // envoyer le code binaire du PDF dans le flux
     338                $echap_special_pdf_chars = true;
     339
     340        } elseif ($librairie_pdf=='dompdf') { // la librairie dompdf beta 0.6 // EXPERIMENTAL
     341
     342                // le chemin relatif vers mPDF
     343                require_once(_DIR_LIB . 'dompdf/dompdf_config.inc.php');
     344
     345                $dompdf = new DOMPDF();
     346                $dompdf->load_html($html, SPIPDF_CHARSET);
     347                $dompdf->set_paper($format_page);
     348                $dompdf->render();
     349
     350                $html = $dompdf->output(); // envoyer le code binaire du PDF dans le flux
     351                $echap_special_pdf_chars = true;
     352
     353        } else { // la librairie HTML2PDF par défaut
     354
     355                // appel de la classe HTML2pdf
     356                require_once($dir_librairie_pdf . 'html2pdf.class.php');
     357                try {
     358                        // les paramétres d'orientation et de format son écrasé par ceux défini dans la balise <page> du squelette
     359                        $html2pdf = new HTML2PDF('P', $format_page, $flux['args']['contexte']['lang'], SPIPDF_UNICODE, SPIPDF_CHARSET);
     360
     361                        // mode debug de HTML2PDF
     362                        if (defined('SPIPDF_DEBUG_HTML2PDF')){
     363                                $html2pdf->setModeDebug();
     364                        }
     365                        // police différente selon unicode ou latin
     366                        if (SPIPDF_UNICODE){
     367                                $police_caractere = 'FreeSans';
     368                        } else {
     369                                $police_caractere = 'Arial';
     370                        }
     371                        $html2pdf->setDefaultFont($police_caractere);
     372                        $html2pdf->writeHTML($html);
     373
     374                        $html = $html2pdf->Output('', true); // envoyer le code binaire du PDF dans le flux
     375                        $echap_special_pdf_chars = true;
     376                } catch (HTML2PDF_exception $e) {
     377                        echo $e;
    266378                }
    267379
    268                 // nettoyer le HTML et gérer les placements d'image en fonction de la librairie utilisée
    269                 $html = spipdf_nettoyer_html($html, $possible_librairies[$librairie_pdf]);
    270 
    271                 // Debug = voir le html sans génération de PDF
    272                 if (isset($_GET['debug_spipdf'])){
    273                         echo $html;
    274                         exit;
    275                 }
    276 
    277                 // du A4 par defaut
    278                 $format_page = _SPIPDF_FORMAT;
    279 
    280                 // traiter la balise page pour les librairies qui ne la comprennent pas
    281                 if (!empty($possible_librairies[$librairie_pdf]['traite_balise_page'])){
    282 
    283                         $html = traite_balise_page($html);
    284 
    285                         // dans balise_page, on ne récupère que quelques possibilité dont le format
    286                         if (!empty($GLOBALS['valeurs_page'])){
    287                                 if (!empty($GLOBALS['valeurs_page']['format']))
    288                                         $format_page = $GLOBALS['valeurs_page']['format'];
    289                                 if (!empty($GLOBALS['valeurs_page']['backtop']))
    290                                         $backtop = $GLOBALS['valeurs_page']['backtop'];
    291                                 else
    292                                         $backtop = _SPIPDF_MARGIN_TOP;
    293                                 if (!empty($GLOBALS['valeurs_page']['backbottom']))
    294                                         $backbottom = $GLOBALS['valeurs_page']['backbottom'];
    295                                 else
    296                                         $backbottom = _SPIPDF_MARGIN_BOTTOM;
    297                                 if (!empty($GLOBALS['valeurs_page']['backleft']))
    298                                         $backleft = $GLOBALS['valeurs_page']['backleft'];
    299                                 else
    300                                         $backleft = _SPIPDF_MARGIN_LEFT;
    301                                 if (!empty($GLOBALS['valeurs_page']['backright']))
    302                                         $backright = $GLOBALS['valeurs_page']['backright'];
    303                                 else
    304                                         $backright = _SPIPDF_MARGIN_RIGHT;
    305                                 if (!empty($GLOBALS['valeurs_page']['margin_header']))
    306                                         $margin_header = $GLOBALS['valeurs_page']['margin_header'];
    307                                 else
    308                                         $margin_header = _SPIPDF_MARGIN_HEADER;
    309                                 if (!empty($GLOBALS['valeurs_page']['margin_footer']))
    310                                         $margin_footer = $GLOBALS['valeurs_page']['margin_footer'];
    311                                 else
    312                                         $margin_footer = _SPIPDF_MARGIN_FOOTER;
    313                         }
    314                 }
    315 
    316                 if ($librairie_pdf=='mpdf'){ // la librairie mPDF
    317 
    318                         // si il y a des options dans la balise page
    319                         // http://mpdf1.com/manual/index.php?tid=307
    320 
    321                         // le chemin relatif vers mPDF
    322                         define('_MPDF_PATH', $dir_librairie_pdf);
    323                         include_once(_MPDF_PATH . 'mpdf.php');
    324 
    325                         // la classe mPDF
    326                         $mpdf = new mPDF(SPIPDF_CHARSET, $format_page, 0, "", $backleft, $backright, $backtop, $backbottom, $margin_header, $margin_footer);
    327                         $mpdf->WriteHTML($html);
    328 
    329                         $html = $mpdf->Output('', 'S'); // envoyer le code binaire du PDF dans le flux
    330                         $echap_special_pdf_chars = true;
    331 
    332                 } elseif ($librairie_pdf=='dompdf') { // la librairie dompdf beta 0.6 // EXPERIMENTAL
    333 
    334                         // le chemin relatif vers mPDF
    335                         require_once(_DIR_LIB . 'dompdf/dompdf_config.inc.php');
    336 
    337                         $dompdf = new DOMPDF();
    338                         $dompdf->load_html($html, SPIPDF_CHARSET);
    339                         $dompdf->set_paper($format_page);
    340                         $dompdf->render();
    341 
    342                         $html = $dompdf->output(); // envoyer le code binaire du PDF dans le flux
    343                         $echap_special_pdf_chars = true;
    344 
    345                 } else { // la librairie HTML2PDF par défaut
    346 
    347                         // appel de la classe HTML2pdf
    348                         require_once($dir_librairie_pdf . 'html2pdf.class.php');
    349                         try {
    350                                 // les paramétres d'orientation et de format son écrasé par ceux défini dans la balise <page> du squelette
    351                                 $html2pdf = new HTML2PDF('P', $format_page, $flux['args']['contexte']['lang'], SPIPDF_UNICODE, SPIPDF_CHARSET);
    352 
    353                                 // mode debug de HTML2PDF
    354                                 if (defined('SPIPDF_DEBUG_HTML2PDF')){
    355                                         $html2pdf->setModeDebug();
    356                                 }
    357                                 // police différente selon unicode ou latin
    358                                 if (SPIPDF_UNICODE){
    359                                         $police_caractere = 'FreeSans';
    360                                 } else {
    361                                         $police_caractere = 'Arial';
    362                                 }
    363                                 $html2pdf->setDefaultFont($police_caractere);
    364                                 $html2pdf->writeHTML($html);
    365 
    366                                 $html = $html2pdf->Output('', true); // envoyer le code binaire du PDF dans le flux
    367                                 $echap_special_pdf_chars = true;
    368                         } catch (HTML2PDF_exception $e) {
    369                                 echo $e;
    370                         }
    371 
    372                 }
    373 
    374                 // On échappe les suites de caractères <? pour éviter des erreurs d'évaluation PHP (seront remis en place avec affichage_final)
    375                 // l'erreur d'évaluation est liée à la directive short_open_tag=On dans la configuration de PHP
    376                 if (!empty($echap_special_pdf_chars)
    377                   AND strpos($html,"<"."?")!==false){
    378                         $html = str_replace("<"."?", "<\2\2?", $html);
    379                 }
     380        }
     381
     382        // On échappe les suites de caractères <? pour éviter des erreurs d'évaluation PHP (seront remis en place avec affichage_final)
     383        // l'erreur d'évaluation est liée à la directive short_open_tag=On dans la configuration de PHP
     384        if (!empty($echap_special_pdf_chars)
     385                AND strpos($html, "<" . "?")!==false
     386        ){
     387                $html = str_replace("<" . "?", "<\2\2?", $html);
     388        }
    380389
    381390        return $html;
     
    392401function spipdf_affichage_final($texte){
    393402        if ($GLOBALS['html']==false
    394                 AND strpos($texte,"<\2\2?")!==false){
    395                 $texte = str_replace("<\2\2?", "<"."?", $texte);
     403                AND strpos($texte, "<\2\2?")!==false
     404        ){
     405                $texte = str_replace("<\2\2?", "<" . "?", $texte);
    396406        }
    397407        return $texte;
Note: See TracChangeset for help on using the changeset viewer.