FPDF

Ce plugin sert à générer des pdfs via la librairie fpdf

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

La version 0.0.3 inclut aussi la libraire complémentaire FPDI permettant l’éditer, de fusionner des pdfs existants. Par exemple, on peut ainsi créer des pdfs personnalisés en partant d’un pdf patron.

Voir Réaliser un PDF personnalisé avec FPDF

Installation

De préférence, utiliser la fonction d’installation automatique des
plugins (pour SPIP 2 & 3).

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 votre plugin.xml :
<necessite id="fpdf" version="[1.0.0;]" />
ou
<utilise id="fpdf" version="[1.0.0;]" />

Utilisation dans les fichiers : niveau 1
Pour charger la librairie, dans vos plugins, utliser le code :

define('FPDF_FONTPATH','font/'); 
include_spip('fpdf');
// include_spip('fpdi');  // pour charger FPDI

À partir de là, vous pouvez utiliser les méthodes de FPDF conjointement à l’API de SPIP.

Pour instancier un objet à tout moment :

$mon_pdf = 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.

Ensuite il faudra appeler cette classe via

include_spip('pdf/extends');

.

Pour instancier un objet avec la classe étendue :

$mon_pdf = new PDF();

Discussion

7 discussions

  • 1

    Bonjour les écureuils. C’est une bonne idée que de mutualiser cette librairie par l’usage de ce plugin de développement.

    Mais, le plugin a une librairie très ancienne. La nouvelle (pas si nouvelle, 2015 je crois) apporte quelques nouvelles options. Notamment il devient inutile de préciser le chemin des fontes s’il est bien dans le repertoire de la librairie (define(’FPDF_FONTPATH’,’font/’) ; est inutile).

    J’ai mis à jour pour moi-même le plugin mais comment vérifier que les plugins qui utiliseront le plugin fpdf ont une librairie à jour ? En effet, on ne peut pas se baser sur la version du plugin fpdf pour connaitre la version de la librairie...

    Des suggestions ?

    Répondre à ce message

  • 1

    svp j’ai un problème mon fpdf génère la 1er page mais les autres nn :p

    Répondre à ce message

  • 1

    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

    •  ;-) Et ne pas hésiter à faire remonter tout souci d’utilisation ou suggestion d’amélioration.

    Répondre à ce message

  • 1

    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

    • 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

  • 1

    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 !

    Répondre à ce message

  • 9

    Bravo ! Je viens de commencer à travailler dessus c’est très utile ! Merci.

    • 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.

    • 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) ;)

    • 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.

    • 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 !

    • 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...

    • Ah bien, je vais essayer de le faire sur le plugins Amap
      Tu pourrais me dire sur quel fichier tu as fait cela ?

    • 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... :-S
      Pour en revenir à votre solution, c’est quelque chose à faire systématiquement en PHP : il faut utiliser html_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 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-chaine
      En fait utf8_decode fonctionne 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

    • 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.

    • Ah, ok.
      C’est vrai que iconv peut 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 AddFont http://fpdf.org/en/tutorial/tuto7.htm http://fpdf.org/en/doc/addfont.htm
      C’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

  • 5

    FPDF ne devrait pas se trouver dans le dossier « lib » à la racine du site, comme les autres librairies externe ?

    • Bonjour

      Non car une partie des fichiers est du php que SPIP dois pouvoir lire je sais pas si en pib/ ça fonctionnerais.

    • Spipeur débutant

      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.

    • Spipeur débutant (suite et fin)

      Ça permettrait de faire un comparatif avec ce Spipdf (URL : http://plugins.spip.net/spipdf.html)...

    • 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.

    • 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

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom