Rev 703 | Rev 1005 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/*** Classe PdfExport, réalise des exportations pdf des fiches de taxons.* Les fonctionnalités proposées sont l'export de toutes les parties de la fiche pdf* ou bien des parties choisies.* (voir le squelette fiche_pdf_lien.tpl.html pour le formulaire dans le module fiche.)** manuel wkhtmltopdf : http://madalgo.au.dk/~jakobt/wkhtmltoxdoc/wkhtmltopdf_0.10.0_rc2-doc.html* pour changer de librairie : changer la fonction transformerHtmlEnPdf()** @category php 5.2* @package eflore-consultation* @author Mathilde Salthun-Lassalle <mathilde@tela-botanica.org>* @copyright 2012 Tela-Botanica* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL* @version $Id$***/class PdfExport extends aControleur {private $Conteneur;private $parametres = array();private $chemin_pdf;private $html;private $wkhtml;private $piedepage;private $fichier_pdf;private $blocs = array();private $Desc;private $Ecolo;private $Ethno;private $Classi;private $Illus;private $Nomen;private $Reparti;private $Stat;private $Biblio;public function initialiser() {spl_autoload_register(array($this, 'chargerClassesOnglets'));$this->capturerParametres();$this->conteneur = new Conteneur($this->parametres);$this->chemin_pdf = Config::get('dossier_pdf');$this->wkhtml = Config::get('WKHTMLTOPDF');$this->Desc = new Description($this->conteneur);$this->Ecolo = new Ecologie($this->conteneur);$this->Ethno = new Ethnobotanique($this->conteneur);$this->Classi = new Classification($this->conteneur);$this->Illus = new Illustrations($this->conteneur);$this->Nomen = new Nomenclature($this->conteneur);$this->Stat = new Statut($this->conteneur);$this->Biblio = new Bibliographie($this->conteneur);$this->Reparti = new Repartition($this->conteneur);$this->piedepage = Config::get('chemin_modules').'pdf_export/squelettes/footer.html';}private function chargerClassesOnglets($classe) {$base = dirname(__FILE__).DS;$cheminFormateurs = $base.'../fiche/formateurs'.DS;$dossiers = array($base, $cheminFormateurs);foreach ($dossiers as $chemin) {$fichierATester = $chemin.$classe.'.php';if (file_exists($fichierATester)) {include_once $fichierATester;return null;}}}private function getNomRetenu() {$nom_retenu = $this->conteneur->getNomCourant()->getNomRetenu()->get('nom_sci');return $nom_retenu;}private function getNomRetenuHTML() {$nom_retenu = '<span class="italique">'.$this->conteneur->getNomCourant()->getNomRetenu()->get('nom_sci').'</span> '.$this->conteneur->getNomCourant()->getNomRetenu()->get('auteur');return $nom_retenu;}private function getNomFichierValide(){$nom_retenu = $this->conteneur->getNomCourant()->getNomRetenu()->get('nom_sci');$nom_retenu = str_replace(' ','_',$nom_retenu );$nom_retenu = preg_replace('/[\(\)\.\[\]]/','',$nom_retenu );return $nom_retenu;}private function capturerParametres() {if (isset($_GET['num_nom'])) {$this->parametres['num_nom'] = $_GET['num_nom'];}if (isset($_GET['nom'])) {$this->parametres['nom'] = $_GET['nom'];}if (isset($_GET['type_nom'])) {$this->parametres['type_nom'] = $_GET['type_nom'];}if (isset($_GET['referentiel'])) {$this->parametres['referentiel'] = $_GET['referentiel'];}if (isset($_GET['niveau'])) {Registre::set('parametres.niveau', $_GET['niveau']);}if (isset($_GET['onglet'])) {$this->onglet = $_GET['onglet'];}}private function capturerParametresFormulaire() {if (!empty($_POST['bloc'])) {$this->blocs = $_POST['bloc'];} else {$this->blocs = array('description', 'ecologie', 'ethnobotanique','statuts', 'illustrations', 'bibliographie','classification', 'repartition', 'nomenclature');}}public function executerActionParDefaut() {$this->executerPdfExport();}public function executerPdfExport(){$this->capturerParametresFormulaire();$donnees = $this->obtenirDonnees();$this->construireHtml($donnees);$this->transformerHtmlEnPdf();$this->envoyerPdfAuNavigateur();}private function construireHtml($donnees) {$this->html = $this->getVue('pdf_header', $donnees);foreach ($this->blocs as $bloc) {$this->ajouterHtml($bloc, $donnees);}$this->html .= '</body></html>';}private function ajouterHtml($bloc, $donnees) {if (!empty($donnees[$bloc])) {$this->html .= $this->getVue('pdf_'.$bloc, $donnees);}}//++-------------------------------------récupération des données-----------------------------------++private function obtenirDonnees() {$donnees = array();$version = $this->Nomen->obtenirVersionDonnees();$donnees['donnees_pdf'] = array('nom' => $this->getNomRetenuHTML(),'chemin_css' => Config::get('url_css_pdf'),'version' => $version['version']);$donnees['description'] = $this->Desc->obtenirDonneesExport();$donnees['ecologie'] = $this->Ecolo->obtenirDonneesExport();$donnees['statuts'] = $this->Stat->obtenirDonnees();$donnees['ethnobotanique'] = $this->Ethno->obtenirDonnees();$donnees['classification'] = $this->Classi->obtenirDonnees();$donnees['illustrations'] = $this->Illus->obtenirDonneesExport();$donnees['nomenclature'] = $this->Nomen->obtenirDonnees();$donnees['repartition'] = $this->Reparti->obtenirDonneesExport();$donnees['bibliographie'] = $this->Biblio->obtenirDonnees();$donnees['premier'] = $this->blocs[0];// pour page-break : éviter 1ere page vide si bloc trop longreturn $donnees;}//++ ------------------------------------------------export en pdf--------------------------------------++private function envoyerPdfAuNavigateur() {$nom_fichier = $this->getNomFichierValide();header('Content-type: application/pdf');header('Content-Disposition: attachment; filename='.$nom_fichier.'.pdf');readfile($this->fichier_pdf);unlink($this->fichier_html);unlink($this->fichier_pdf);}//version WKHTMLtoPDF en ligne de commandeprivate function transformerHtmlEnPdf() {$nom_fichier = $this->getNomFichierValide();$time = $_SERVER['REQUEST_TIME'] ;$this->fichier_html = $this->chemin_pdf.''.$nom_fichier.'-'.$time.'.html';$this->fichier_pdf = $this->chemin_pdf.''.$nom_fichier.'-'.$time.'.pdf';$nom = $this->getNomRetenu();file_put_contents($this->fichier_html, $this->html);$commande = "{$this->wkhtml} --replace 'nom' '$nom' --encoding utf-8 --footer-html {$this->piedepage} {$this->fichier_html} {$this->fichier_pdf}";$debug = exec($commande);//echo $debug;}}?>