Ce tout petit plugin a été créé pour permettre une utilisation de la bibliothèque (library) FPDF par tout autre plugin. En effet, plusieurs plugins, dont Associaspip et AMAP, utilisent déjà cette librairie. Or si deux plugins intègrent séparément le zip, elle serait présente deux fois, peut-être en des versions différentes et incompatibles ; tandis que là on a une seule installation et une mise à jour commune pour tous les plugins utilisant FPDF.
La bibliothèque objet FPDF permet de fabriquer des PDF sur mesure, contrairement aux autres plugins qui ne génèrent que le PDF d’un objet éditorial (l’article) dans un formatage prédéfini. Cette bibliothèque de méthodes s’adresse aux développeurs de plugins : elle permet d’utiliser toutes les tables et filtres de SPIP mais ne fournit pas les pages PHP qu’il faut écrire soit-même !
Contrairement à PDFlib et ClibPDF, qui sont gratuits pour un usage non-commercial, FPDF est vraiment un logiciel libre d’où son choix préférentiel
Installation
De préférence, utiliser la fonction d’installation automatique des
plugins (SPIP 2 & 3). Si STEP est installé et qu’un plugin nécessite FPDF, celui-ci le sera automatiquement.
Pour les versions 1.9 de SPIP, télécharger le zip, dézippez-le, puis suivez la procédure normale d’installation.
Utilisation
- Déclaration dans le plugin
Pour utiliser cette bibliothèque dans vos plugins, il faut le déclarer dans vonte plugin.xml : <necessite id="fpdf" version="[0.0.2;]" /> ou <utilise id="fpdf" version="[0.0.2;]" />
- Utilisation dans les fichiers : niveau 1
Le plugins ne fait que fournir la librairie et ne fournis pas les pages qui affiche le pdf. Il faut donc créer la dite page .php dans le dossier exec/ à la racine du plugin et y appeler la classe : define('FPDF_FONTPATH','font/'); include_spip('fpdf'); À partir de là, vous pouvez utiliser les méthodes de FPDF conjointement à l’API de SPIP.
Pour instancier un objet à tout moment : $nom2l_objet = new FPDF();
- Utilisation dans les fichiers : niveau 2
Vous pouvez étendre la classe FPDP par une classe PDF et y redéfinir certaines méthodes, par exemple dans pdf/extends.php à la racine du plugin.
Comme d’habitude, pour pouvoir générer le PDF, il faut créer une page .php dans le dossier exec à la racine du plugin et y appeler la nouvelle classe définie : include_spip('pdf/extends'); et c’est bon.
Pour instancier un objet avec la classe étendue : $nom2l_objet = new PDF();



Version 0.0.2
Vos commentaires
# Le 5 octobre 2012 à 18:38, par Labisse
En réponse à : FPDF
Vraiment pratique ce plugin je débute sur SPIP après des années sous WP, c’est le genre de plugin qui m’invite a continuer a explorer ce CMS
# Le 6 octobre 2012 à 19:37, par gilcot
En réponse à : FPDF
;-) Et ne pas hésiter à faire remonter tout souci d’utilisation ou suggestion d’amélioration.
Répondre à ce message
# Le 25 septembre 2012 à 15:58, par Mélinda
En réponse à : FPDF
Vous pourriez tout de même mettre en place un espace de test comme le http://demo.spip.net/spip.php ce qui permettrait au débutant comme nous de se faire tout de même une idée.
Merci et bon courage
# Le 6 octobre 2012 à 18:31, par gilcot
En réponse à : FPDF
Bonjour Mélinda.
C’est un plugin pour développeur : une brique pour permettre à d’autres plugins de générer facilement des PDFs. Par conséquent, il ne s’adresse pas vraiment aux débutants d’une part, et il ne peut pas avoir de page de démo tout seul d’autre part (en fait il faudra des démos pour les plugins qui l’utilisent)
Merci et bon week-end.
Répondre à ce message
# Le 25 septembre 2012 à 19:40, par Frank
En réponse à : FPDF
Enfin, ça fait longtemps que je cherche à faire cela. Merci pour les conseils. Spip n’est pas évident mais on peut faire pas mal de chose avec !
# Le 25 septembre 2012 à 19:47, par Pierre KUHN
En réponse à : FPDF
Bonjour
Si tu as dev un site avec, je suis preneur de suggestions
Répondre à ce message
# Le 24 juillet 2012 à 18:20, par Thomas Weiss
En réponse à : FPDF
Bravo ! Je viens de commencer à travailler dessus c’est très utile ! Merci.
# Le 24 juillet 2012 à 18:33, par Pierre KUHN
En réponse à : FPDF
Hésite pas si tu as des questions. une fois ton plugins sur zone, dis nous le quel, qu’on regarde un peu ton utilisation.
# Le 24 juillet 2012 à 18:54, par gilcot
En réponse à : FPDF
Et aussi si tu as quelque remarque permettant d’améliorer cette page de prise en main (documentation serait un bien grand mot comparé au manuel et aux exemples sur le site du projet) ;)
# Le 24 juillet 2012 à 19:05, par Thomas Weiss
En réponse à : FPDF
En fait je ne l’utilise (encore) pas dans le cadre d’un plugin. J’avais simplement besoin de pouvoir créer un pdf très personnalisé dont le contenu provient de plusieurs tables spip. J’avais testé les autres plugins mais cela ne convenait pas à mes besoins.
# Le 24 juillet 2012 à 19:08, par Thomas Weiss
En réponse à : FPDF
Pour améliorer la page de prise en main je propose de mettre des bouts de codes des fichiers tutoriaux, notamment ceux où l’on voit du spipcode. Cela fera peut-être moins peur aux néophytes en php !
# Le 26 juillet 2012 à 12:22, par thomas1
En réponse à : FPDF
J’ai eu des problèmes d’affichage des caractères spéciaux. Après plusieurs tentatives j’ai trouvé comment les afficher correctement (notamment les apostrophes française arrondies qui m’ont donné du fil à retordre)
Voici le code de la fonction WriteHTM où j’ai ajouté deux traitements au début :
function WriteHTML($html)
{
$html = html_entity_decode($html, ENT_QUOTES | ENT_HTML401, "UTF-8");
$html = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $html);
//$html = utf8_decode($html); ligne remplacée par ligne du dessus pour résoudre problème des apostrophe arrondies
// Parseur HTML
$html = str_replace("\n",' ',$html);
$a = preg_split('/<(.*)>/U',$html,-1,PREG_SPLIT_DELIM_CAPTURE);
foreach($a as $i=>$e)
{
if($i%2==0)
{
// Texte
if($this->HREF)
$this->PutLink($this->HREF,$e);
else
$this->Write(5,$e);
}
else
{
// Balise
if($e[0]=='/')
$this->CloseTag(strtoupper(substr($e,1)));
else
{
// Extraction des attributs
$a2 = explode(' ',$e);
$tag = strtoupper(array_shift($a2));
$attr = array();
foreach($a2 as $v)
{
if(preg_match('/([^=]*)=["\']?([^"\']*)/',$v,$a3))
$attr[strtoupper($a3[1])] = $a3[2];
}
$this->OpenTag($tag,$attr);
}
}
}
}
Cela fonctionne encore faut-il que la fonction iconv soit disponible...
# Le 26 juillet 2012 à 14:41, par Pierre KUHN
En réponse à : FPDF
Ah bien, je vais essayer de le faire sur le plugins Amap
Tu pourrais me dire sur quel fichier tu as fait cela ?
# Le 27 juillet 2012 à 09:57, par gilcot
En réponse à : FPDF
Bonjour Thomas.
Je pense qu’il s’agit d’une nouvelle discussion (et donc qu’il fallait faire un nouveau message plutôt que de répondre à un autre, pour qu’on puisse facilement suivre)
D’après ses logs, FPDF a des problème d’encodage qui ont été corrigés et il supporte l’UTF8... Mais (car il reste un « mais ») les polices livrées par défaut ne sont pas Unicode... :-Shtml_entity_decode pour transformer le texte balisé en HTML (avec les entités numériques ou nommées) en texte brute (tel qu’on mettrait directement dans le « bloc notes » et donc avoir des caractères accentués et non les entités).
Pour en revenir à votre solution, c’est quelque chose à faire systématiquement en PHP : il faut utiliser
Pour translittérer les caractères Unicode avant de les afficher avec FPDF il faut utiliser
utf8_decode: qui n’a pas besoin de la présence de iconv ni ne nécessite de faire des remplacements de sous-chaineEn fait
utf8_decodefonctionne aussi avec les entités XML des chaines de langue comme on peut le voir das exec/pdf_activites et exec/pdf_fiscal de Associaspip# Le 28 juillet 2012 à 13:37, par Thomas Weiss
En réponse à : FPDF
Merci Gilcot. En fait, avec utf8_decode, il reste le problème des apostrophes françaises arrondies qui sont remplacées par un point d’interrogation. Il semble que uf8_decode() ne les gèrent pas.
# Le 28 juillet 2012 à 19:19, par gilcot
En réponse à : FPDF
Ah, ok.
C’est vrai que
iconvpeut donner un meilleur résultat, sous réserve qu’il soit disponible sur la machine où le script tourne.Ceci dit, ces problèmes sont dus au fait que les polices libres fournies par défaut ne sont pas Unicode d’une part et encodé en cp1252 par défaut... Vos projets peuvent fournir leur police et les charger avec la méthode
AddFonthttp://fpdf.org/en/tutorial/tuto7.htm http://fpdf.org/en/doc/addfont.htmC’est le prix de la simplicité de la classe FPDF http://stackoverflow.com/questions/6334134/fpdf-utf-8-encoding-how-to
Répondre à ce message
# Le 21 juillet 2012 à 19:55, par ?
En réponse à : FPDF
FPDF ne devrait pas se trouver dans le dossier « lib » à la racine du site, comme les autres librairies externe ?
# Le 21 juillet 2012 à 20:37, par Pierre KUHN
En réponse à : FPDF
Bonjour
Non car une partie des fichiers est du php que SPIP dois pouvoir lire je sais pas si en pib/ ça fonctionnerais.
# Le 21 juillet 2012 à 21:20, par Spipeur débutant
En réponse à : FPDF
Pourquoi n’y a-t-il pas de démonstration (ou site demo) du résultat obtenu avec ce plugin ? Sur tous les plugins de Spip-Contribs, ça fonctionne comme ça...
Merci par avance.
# Le 21 juillet 2012 à 21:47, par Spipeur débutant (suite et fin)
En réponse à : FPDF
Ça permettrait de faire un comparatif avec ce Spipdf (URL : http://plugins.spip.net/spipdf.html)...
# Le 22 juillet 2012 à 00:27, par Maïeul
En réponse à : FPDF
en fait, c’est un plugin pour dev de plugin, et non pas un plugin « clef en main ». Dans ce genre de cas l’administrateur de contrib peut admettre de laisser un article moins didactique, car on suppose que la personne qui va lire est capable de comprendre comment faire.
En gros, ce n’est pas un article pour « spipeur débutant ». C’est un plugin qui sert pour les dev de plugin.
# Le 22 juillet 2012 à 12:40, par Pierre KUHN
En réponse à : FPDF
Et puis spipdf est bridé pour les article hors nous avons monter un plugins qui permets de monter un pdf depuis n’importe qu’elle table et le contenu que tu souhaites, faut maitriser le php et les boucles contrairement à spippdf qui est clef en main.
Démo ? pas jouable car c’est un plugins ’additif’ et pas un plugins dépendant.
Répondre à ce message