Le 26 août 09 à 17:28, marcimat@free.fr a écrit :
Author: marcimat@free.fr
Date: Wed Aug 26 17:28:17 2009
New Revision: 31115Log:
Un générateur de doc PDF pour le squelette «documentation» qui fonctionne avec Prince (qui doit donc être installé - attention, la licence de Prince mis à disposition parle d'utilisation en «single computer», mais est payant si utilisé sur un serveur. Il faudra trouver un vrai logiciel libre, si un jour ça existe.).
Effectivement, $3800 par an, ça peut faire un peu mal...
Sinon, ce qui a été fait pour Drupal (utiliser le moteur de rendu de Webkit, pour simplifier) semble intéressant, même si cela nécessite du boulot au niveau de l'OS :
http://drupal.org/node/419296
Ce plugin stocke les fichiers par défaut dans IMG/documentation_pdf, crée un livre par langue et aussi un par chapitre. Les fichiers ont la date de dernière mise à jour de la rubrique, pratique pour voir ce qui a changé.
Des constantes permettent de modifier des choses dans le fichier génie.
L'actualisation se réalise toutes les semaines, ou est forcée par ?page=tests/generer_documentation_pdf pour les auteurs webmestres
Ce plugin est-il appelé à s'émanciper de programmer.spip.org ?
Added:
_galaxie_/programmer.spip.org/plugin_pdf/
_galaxie_/programmer.spip.org/plugin_pdf/documentation_pdf_pipelines.php
_galaxie_/programmer.spip.org/plugin_pdf/genie/
_galaxie_/programmer.spip.org/plugin_pdf/genie/generer_documentation_pdf.php
_galaxie_/programmer.spip.org/plugin_pdf/lib/
_galaxie_/programmer.spip.org/plugin_pdf/lib/prince/
_galaxie_/programmer.spip.org/plugin_pdf/lib/prince/prince.php
_galaxie_/programmer.spip.org/plugin_pdf/lib/prince/readme.html
_galaxie_/programmer.spip.org/plugin_pdf/plugin.xml
_galaxie_/programmer.spip.org/plugin_pdf/tests/
_galaxie_/programmer.spip.org/plugin_pdf/tests/generer_documentation_pdf.htmlAdded: _galaxie_/programmer.spip.org/plugin_pdf/documentation_pdf_pipelines.php
--- _galaxie_/programmer.spip.org/plugin_pdf/documentation_pdf_pipelines.php (added)
+++ _galaxie_/programmer.spip.org/plugin_pdf/documentation_pdf_pipelines.php Wed Aug 26 17:28:17 2009
@@ -0,0 +1,8 @@
+<?php
+
+# taches periodiques (cron, genie)
+function documentation_pdf_taches_generales_cron($taches_generales) {
+ $taches_generales['generer_documentation_pdf'] = 7 * 24 * 60 * 60; // toutes les semaines
+ return $taches_generales;
+}
+?>Added: _galaxie_/programmer.spip.org/plugin_pdf/genie/generer_documentation_pdf.php
--- _galaxie_/programmer.spip.org/plugin_pdf/genie/generer_documentation_pdf.php (added)
+++ _galaxie_/programmer.spip.org/plugin_pdf/genie/generer_documentation_pdf.php Wed Aug 26 17:28:17 2009
@@ -0,0 +1,104 @@
+<?php
+
+define('_NOM_FICHIER_PDF', 'documentation');
+define('_NOM_DOCUMENTATION_PDF', 'documentation_pdf');
+define('_DIR_DOCUMENTATION_PDF', _DIR_IMG . _NOM_DOCUMENTATION_PDF . '/');
+
+#define('_BIN_PRINCE', '/usr/local/bin/prince');
+define('_BIN_PRINCE', '/usr/bin/prince');
+
+define('_SKEL_DOCUMENTATION', 'integrale');
+define('_DOCUMENTATION_PDF_ECHO', false);
+
+function docpdf_log($texte) {
+ if (!_DOCUMENTATION_PDF_ECHO) {
+ spip_log($texte, 'pdf');
+ } else {
+ print_r($texte);
+ echo "\n<br />\n";
+ }
+}
+
+function genie_generer_documentation_pdf_dist($t, $echo=false) {
+ docpdf_log('Genie documentation pdf en marche !');
+
+ // creer le repertoire d'accueil
+ sous_repertoire(_DIR_DOCUMENTATION_PDF);
+
+ // supprimer les anciens fichiers
+ docpdf_log('Suppression des pdf !');
+ foreach (preg_files(_DIR_DOCUMENTATION_PDF, '.*\.pdf') as $fichier) {
+ supprimer_fichier($fichier);
+ }
+
+ // appeler le Grand Prince a la rescousse
+ include_spip('lib/prince/prince');
+
+ // lister les langues, si utile (1 secteur par langue) :
+ if (lire_config('documentation/secteur_langue') == 'on') {
+ docpdf_log('Creation des pdf par secteur de langue.');
+ // selection des secteurs de langue
+ $secteurs = sql_allfetsel(array('lang', 'id_rubrique','date'), 'spip_rubriques', 'id_parent='.sql_quote(0));
+ foreach ($secteurs as $secteur) {
+ generer_chapitres_et_livre_pdf($secteur['id_rubrique'], $secteur['lang'], $secteur['date']);
+ }
+ } else {
+ // juste les secteurs
+ docpdf_log('Creation des pdf (racine).');
+ generer_chapitres_et_livre_pdf();
+ }
+
+ return true;
+
+}
+
+function generer_chapitres_et_livre_pdf($id_rubrique=0, $lang='', $date = '') {
+ static $url_doc = null;
+ if (is_null($url_doc)) {
+ // preparation de l'url
+ include_spip('inc/filtres_mini');
+ $url_doc = url_absolue(generer_url_public(_SKEL_DOCUMENTATION));
+ }
+
+ // on boucle sur les chapitres
+ $chapitres = sql_allfetsel(array('id_rubrique','date'), 'spip_rubriques', 'id_parent='.sql_quote($id_rubrique));
+ foreach ($chapitres as $num=>$chapitre) {
+ $fichier = _DIR_DOCUMENTATION_PDF . _NOM_FICHIER_PDF;
+ $url = $url_doc;
+ if ($lang) {
+ $url = parametre_url($url, 'lang', $lang, '&');
+ $fichier .= '_' . $lang;
+ }
+ $url = parametre_url($url, 'id_rubrique', $chapitre['id_rubrique'], '&');
+ $fichier .= '_chapitre_' . ($num + 1) . '.pdf';
+
+ // on genere de pdf des chapitres
+ docpdf_log('Chapitre ' . ($num + 1) . " (rubrique $chapitre[id_rubrique])");
+ generer_documentation_pdf($url, $fichier, $chapitre['date']);
+ }
+
+ // on genere de pdf integral du secteur
+ $fichier = _DIR_DOCUMENTATION_PDF . _NOM_FICHIER_PDF;
+ $url = $url_doc;
+ if ($lang) {
+ $url = parametre_url($url, 'lang', $lang, '&');
+ $fichier .= '_' . $lang;
+ }
+ $fichier .= '.pdf';
+ docpdf_log('Livre ' . ($lang ? " ($lang)" : ''));
+ generer_documentation_pdf($url, $fichier, $date);
+}
+
+function generer_documentation_pdf($url, $fichier, $date_modif) {
+ if (!$date) $date = time();
+ docpdf_log("Creation de : $fichier, date : $date_modif");
+ $err = array();
+ $Prince = new Prince(_BIN_PRINCE);
+ $Prince->convert_file_to_file($url, $fichier, $err);
+ touch($fichier, strtotime($date_modif));
+ # if ($err) docpdf_log($err);
+}
+
+?>Added: _galaxie_/programmer.spip.org/plugin_pdf/lib/prince/prince.php
--- _galaxie_/programmer.spip.org/plugin_pdf/lib/prince/prince.php (added)
+++ _galaxie_/programmer.spip.org/plugin_pdf/lib/prince/prince.php Wed Aug 26 17:28:17 2009
@@ -0,0 +1,417 @@
+<?php
+
+// Prince - PHP interface
+// Copyright 2005-2008 YesLogic Pty. Ltd.
+// http://www.princexml.com
+
+class Prince
+{
+ private $exePath;
+ private $styleSheets;
+ private $isHTML;
+ private $baseURL;
+ private $doXInclude;
+ private $httpUser;
+ private $httpPassword;
+ private $logFile;
+ private $embedFonts;
+ private $compress;
+ private $encrypt;
+ private $encryptInfo;
+
+ public function __construct($exePath)
+ {
+ $this->exePath = $exePath;
+ $this->styleSheets = '';
+ $this->isHTML = false;
+ $this->baseURL = '';
+ $this->doXInclude = true;
+ $this->httpUser = '';
+ $this->httpPassword = '';
+ $this->logFile = '';
+ $this->embedFonts = true;
+ $this->compress = true;
+ $this->encrypt = false;
+ $this->encryptInfo = '';
+ }
+
+ // Add a CSS style sheet that will be applied to each document.
+ // cssPath: The filename of the CSS style sheet.
+ public function addStyleSheet($cssPath)
+ {
+ $this->styleSheets .= '-s "' . $cssPath . '" ';
+ }
+
+ // Clear all of the CSS style sheets.
+ public function clearStyleSheets()
+ {
+ $this->styleSheets = '';
+ }
+
+ // Specify whether documents should be parsed as HTML or XML/XHTML.
+ // html: True if all documents should be treated as HTML.
+ public function setHTML($html)
+ {
+ $this->isHTML = $html;
+ }
+
+ // Specify a file that Prince should use to log error/warning messages.
+ // logFile: The filename that Prince should use to log error/warning
+ // messages, or '' to disable logging.
+ public function setLog($logFile)
+ {
+ $this->logFile = $logFile;
+ }
+
+ // Specify the base URL of the input document.
+ // baseURL: The base URL or path of the input document, or ''.
+ public function setBaseURL($baseURL)
+ {
+ $this->baseURL = $baseURL;
+ }
+
+ // Specify whether XML Inclusions (XInclude) processing should be applied
+ // to input documents. XInclude processing will be performed by default
+ // unless explicitly disabled.
+ // xinclude: False to disable XInclude processing.
+ public function setXInclude($xinclude)
+ {
+ $this->doXInclude = $xinclude;
+ }
+
+ // Specify a username to use when fetching remote resources over HTTP.
+ // user: The username to use for basic HTTP authentication.
+ public function setHttpUser($user)
+ {
+ $this->httpUser = $user;
+ }
+
+ // Specify a password to use when fetching remote resources over HTTP.
+ // password: The password to use for basic HTTP authentication.
+ public function setHttpPassword($password)
+ {
+ $this->httpPassword = $password;
+ }
+
+ // Specify whether fonts should be embedded in the output PDF file. Fonts
+ // will be embedded by default unless explicitly disabled.
+ // embedFonts: False to disable PDF font embedding.
+ public function setEmbedFonts($embedFonts)
+ {
+ $this->embedFonts = $embedFonts;
+ }
+
+ // Specify whether compression should be applied to the output PDF file.
+ // Compression will be applied by default unless explicitly disabled.
+ // compress: False to disable PDF compression.
+ public function setCompress($compress)
+ {
+ $this->compress = $compress;
+ }
+
+ // Specify whether encryption should be applied to the output PDF file.
+ // Encryption will not be applied by default unless explicitly enabled.
+ // encrypt: True to enable PDF encryption.
+ public function setEncrypt($encrypt)
+ {
+ $this->encrypt = $encrypt;
+ }
+
+ // Set the parameters used for PDF encryption. Calling this method will
+ // also enable PDF encryption, equivalent to calling setEncrypt(true).[... 714 lines stripped ...]
_______________________________________________
Spip-zone-commit@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone-commit
-Nicolas
--
Nicolas HOIZEY
Blog : http://www.gasteroprod.com/
Photos : http://flic.kr/nicolas-hoizey/