Changeset 65481 in spip-zone
- Timestamp:
- Sep 3, 2012, 3:01:22 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
_plugins_/spipdf/spipdf_fonctions.php
r65480 r65481 121 121 return str_replace('img', 'img style="padding:5px;" class="pdf_img_float_' . $matches[1] . '"', $matches[2]); 122 122 } 123 123 124 function spipdf_remplaceSpan($matches){ 124 125 return str_replace('img', 'img style="padding:5px;" align="' . $matches[1] . '"', $matches[2]); 125 126 } 127 126 128 function spipdf_remplaceSpanCenter($matches){ 127 129 return $matches[1]; 128 130 } 131 129 132 //function spipdf_remplaceDt($matches) { return str_replace('img', 'img style="padding:5px;" style="float:'.$matches[1].'"', $matches[2]); } 130 133 function spipdf_remplaceDt_wfloat($matches){ 131 134 return str_replace('img', 'img style="padding:5px;" class="pdf_img_float_' . $matches[1] . '"', $matches[2]); 132 135 } 136 133 137 function spipdf_remplaceDt($matches){ 134 138 return str_replace('img', 'img style="padding:5px;" align="' . $matches[1] . '"', $matches[2]); 135 139 } 140 136 141 function spipdf_remplaceIdParName($matches){ 137 142 return str_replace('id=\'', 'name=\'', $matches[0]); 138 143 } 144 139 145 function spipdf_remplaceFloatPuce($matches){ 140 146 return str_replace('style=\'', 'style=\'float:left;', $matches[0]); 141 147 } 148 142 149 function spipdf_remplaceDtCenter($matches){ 143 150 return $matches[1]; 144 151 } 152 145 153 function spipdf_remplaceCaption($matches){ 146 154 $table = '<table style="border:none;"' . $matches[1] . '<tr><td style="text-align: center;border:none;">' . $matches[2] . '</td></tr>'; … … 154 162 // supprimer les spans autour des images et récupérer le placement 155 163 $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); 157 165 158 166 // supprimer les spans autour des images … … 162 170 // supprimer les dl autour des images et récupérer le placement 163 171 $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); 165 173 166 174 // replacer id par name pour les notes … … 229 237 function spipdf_html2pdf($html){ 230 238 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; 257 321 } 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; 266 378 } 267 379 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 } 380 389 381 390 return $html; … … 392 401 function spipdf_affichage_final($texte){ 393 402 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); 396 406 } 397 407 return $texte;
Note: See TracChangeset
for help on using the changeset viewer.