source: spip-zone/_plugins_/article_pdf/article_pdf.html @ 49023

Last change on this file since 49023 was 49023, checked in by maieul@…, 10 years ago

les codes colorés avec coloration code ne passaient pas dans le PDF. En attendant de trouver comment faire, on décolorie avant de fabriquer le PDF

File size: 6.6 KB
Line 
1#CACHE{0}
2<?php
3
4        //au choix, selon le cas (voir les avantages et les inconvéniants de chaque selon le site):
5//      $path_pdf = sous_repertoire(_DIR_CACHE, "article_PDF"); // stockage dans le cache SPIP
6        $path_pdf = sous_repertoire(_DIR_IMG, "article_PDF"); //stockage sous le dossier IMG
7       
8        // Mode release => $debug=0
9        // Mode debug => $debug=1 (ne fonctionne pas sous Internet Explorer)=> ??? si, ça fonctionne !
10        $debug=1;
11       
12        <B_principale>
13        <BOUCLE_principale(ARTICLES){id_article}>
14       
15        $conf_url_site = '[(#URL_ARTICLE|url_absolue|texte_script)]' ;
16        $conf_nom_site = '[(#NOM_SITE_SPIP|pdf_first_clean|supprimer_tags|texte_script)]' ;
17       
18        // Recuperation et definition des differents elements
19       
20        $site='[(#NOM_SITE_SPIP|pdf_first_clean|supprimer_tags|texte_script)]';
21        $rubrique='<B_rubrique_mere><BOUCLE_rubrique_mere(RUBRIQUES){id_rubrique}>[(#TITRE|supprimer_numero|pdf_first_clean|supprimer_tags|texte_script)]</BOUCLE_rubrique_mere></B_rubrique_mere>[(#NOM_SITE_SPIP|pdf_first_clean|supprimer_tags|texte_script)]<//B_rubrique_mere>';
22        $DateParution='[(#DATE_REDAC|affdate|pdf_first_clean|texte_script)]';
23        $DateMiseEnLigne='[(#DATE|nom_jour|texte_script)] [(#DATE|affdate|pdf_first_clean|texte_script)]';
24       
25        /*$auteur='<BOUCLE_auteurs(AUTEURS){id_article}{", "}>[(#NOM|pdf_first_clean|texte_script)]</BOUCLE_auteurs>';*/
26        $motsclef='<BOUCLE_keywords(MOTS){id_article}{", "}>[(#TITRE|pdf_first_clean|supprimer_tags|texte_script)]</BOUCLE_keywords>';
27        $yahoo='-<BOUCLE_yahoo(HIERARCHIE){id_article}> [(#TITRE|supprimer_numero|pdf_first_clean|supprimer_tags|texte_script)] - </BOUCLE_yahoo>';
28
29        $logo_site='[(#LOGO_SITE_SPIP|extraire_attribut{src}|texte_script)]';
30        $logo_site = preg_replace(',[?][0-9]+$,','',$logo_site);
31        // attention à l'ordre des filtres SPIP
32//      [$logo_fichier='(#LOGO_ARTICLE_RUBRIQUE|extraire_attribut{src}|texte_script)';] ne fonctionne pas
33        $logo_fichier='[(#LOGO_ARTICLE_RUBRIQUE|texte_script|extraire_attribut{src})]'; //fonctionne correctement
34        $logo_fichier = preg_replace(',[?][0-9]+$,','',$logo_fichier);
35//  [$logo_lien="(#URL_ARTICLE)";]
36               
37        [$surtitre='(#SURTITRE|pdf_first_clean|supprimer_tags|texte_script)';]
38        [$titre='(#TITRE|supprimer_numero|pdf_first_clean|supprimer_tags|texte_script)';]
39        [$soustitre='(#SOUSTITRE|pdf_first_clean|supprimer_tags|texte_script)';]
40        [$chapo='(#CHAPO|pdf_first_clean|texte_script)';]
41        [$descriptif='(#DESCRIPTIF|pdf_first_clean|texte_script)';]
42        [$texte= '(#TEXTE*|pdf_first_clean_prepropre|pdf_first_clean|texte_script)';]
43        [$ps='(#PS|pdf_first_clean|texte_script)';]
44        [$notes='(#NOTES|pdf_first_clean|texte_script)';]
45       
46        $copyright = '[(#REM|texte{'Copyright (c) '}|pdf_first_clean|texte_script)][(#NOM_SITE_SPIP|pdf_first_clean|supprimer_tags|texte_script)][(#REM|texte{'\nTous droits réservés'}|pdf_first_clean|texte_script)]';
47       
48        $id_article = "#ID_ARTICLE";
49       
50        $titre_article = translitteration(corriger_caracteres('[(#TITRE|supprimer_numero|pdf_first_clean|supprimer_tags|texte_script)]'));
51        // Reprise du code de urls/propres.php (pourquoi c'est pas une fonction de l'API de SPIP ?)
52       
53        // on va convertir tous les caracteres de ponctuation et espaces
54        // a l'exception de l'underscore (_), car on veut le conserver dans l'url
55        $titre_article = str_replace('_', chr(7), $titre_article);
56        $titre_article = @preg_replace(',[[:punct:][:space:]]+,u', ' ', $titre_article);
57        $titre_article = str_replace(chr(7), '_', $titre_article);
58
59        // S'il reste trop de caracteres non latins, les gerer comme wikipedia
60        // avec rawurlencode :
61        if (preg_match_all(",[^a-zA-Z0-9 _]+,", $titre_article, $r, PREG_SET_ORDER)) {
62                foreach ($r as $regs) {
63                        $titre_article = substr_replace($titre_article, rawurlencode($regs[0]),
64                                strpos($titre_article, $regs[0]), strlen($regs[0]));
65                }
66        }
67
68        // S'il reste trop peu, on retombe sur article12
69        if (strlen($titre_article) == 0 ) {
70                $titre_article = "article";
71        }
72
73        // Sinon couper les mots et les relier par des tirets
74        else {
75                $mots = preg_split(",[^a-zA-Z0-9_%]+,", $titre_article);
76                $titre_article = '';
77                foreach ($mots as $mot) {
78                        if (!strlen($mot)) continue;
79                        $titre_article2 = $titre_article.'-'.$mot;
80
81                        // Si on depasse _URLS_PROPRES_MAX caracteres, s'arreter
82                        // ne pas compter 3 caracteres pour %E9 mais un seul
83                        $long = preg_replace(',%.,', '', $titre_article2);
84                        if (strlen($long) > _URLS_PROPRES_MAX) {
85                                break;
86                        }
87
88                        $titre_article = $titre_article2;
89                }
90                $titre_article = substr($titre_article, 1);
91
92                // On enregistre en utf-8 dans la base
93                $titre_article = rawurldecode($titre_article);
94
95                if (strlen($titre_article) == 0)
96                        $titre_article = "article";
97        }
98
99        $files_pdf = $titre_article."_a".$id_article.".pdf";
100        $file_out = $path_pdf . $files_pdf ;
101       
102        if (file_exists($file_out))
103        {
104                clearstatcache;
105                $damo = date(YmdHi , strtotime("#DATE_MODIF")) ;
106                $dage = date(YmdHi , filemtime($file_out)) ;
107                if ($damo > $dage)
108                {
109                        unlink($file_out);
110                }
111        }
112       
113        </BOUCLE_principale>
114        </B_principale>
115        header("Location: index.php");
116        exit;
117        <//B_principale>
118       
119        if ($debug == 1 && file_exists($file_out))
120        {
121                unlink($file_out);
122        }
123       
124        if (!file_exists($file_out))
125        {
126       
127                //define('FPDF_FONTPATH',_DIR_PLUGIN_ARTICLE_PDF.'/font/');
128                include_spip('pdf/fpdf');
129                include_spip('pdf/lib_pdf_global');
130                include_spip('pdf/lib_pdf_spip');
131       
132                //--------------------------------
133                // Debut génération du PDF
134                //--------------------------------
135                $pdf->debug=$debug;
136                $pdf=new PDF_SPIP();
137               
138                $pdf->SetCompression(false);
139                $pdf->SetDisplayMode(fullpage, single );       
140               
141                // haut, gauche,  bas, droite
142                $pdf->SetAllMargins(12,15,12,10);
143       
144                $pdf->SetTitle($titre);
145                $pdf->SetCreator($site);
146                $pdf->SetCopyright($copyright);
147                $pdf->SetSubject($rubrique);
148                $pdf->SetKeywords($motsclef);
149       
150                $pdf->Build($file_out);
151               
152        }
153
154                // Vous voulez afficher un pdf
155                header("Content-type: application/pdf");
156        //Si on est en mutualisé avec masquages des vraies urls d'images
157        if (stripos($GLOBALS['spip_pipeline']['affichage_final'],'mutualisation_url_img_courtes')){
158                $file_out = str_replace(_DIR_IMG,_DIR_RACINE . _NOM_PERMANENTS_ACCESSIBLES,$file_out);
159        }
160        if ($debug==1)
161        {
162                // Affiche le PDF directement dans l'onglet de Firefox
163                // Ne fonctionne pas sous IE 6 SP2 : le pdf n'est pas reconnu (pris pour un fichier texte)
164                header("location: ". url_de_base() . $file_out);
165        }
166        else
167        {
168                // Il sera nommé $files_pdf
169                // ATTENTION : pour "filename", mettre un nom de fichier court (<nom>.<extension>)
170                // sinon IE 6 SP2 ne reconnaîtra pas le type de fichier
171                // Semble poser problème sous IE6 SP1
172                // Ah,  Microsoft, je vous jure !
173                header('Content-Disposition: attachment; filename=' . $files_pdf);
174
175                // Le source du PDF original.pdf
176                readfile($file_out);
177        }
178
179        exit;
180?>
Note: See TracBrowser for help on using the repository browser.