Articles SPIP au format PDF avec support des liens

Ceci est une ARCHIVE, peut-être périmée. Vérifiez bien les compatibilités !

Gérer correctement les liens dans les PDF générés grâce à FPDF. Tous les types de liens sont supportés (liens externes, lien internes, notes).

Cette contribution est basée sur celle de Fabrice et Jérôme Fenal (2 octobre 2005) : http://www.spip-contrib.net/Articles-SPIP-au-format-PDF

Elle a pour objet de gérer correctement les liens dans les PDF générés. Tous les types de liens sont pris en charge, à savoir :

-  Lien externe : par exemple un site Web ou une adresse courriel.
Exemple : [SPIP-http://www.spip.net/]

-  Liens internes de note (note dans le texte vers le bas de page, et note de bas de page vers le texte).

-  Lien interne vers un article de votre site. Ces liens sont transformés en lien externe avec la syntaxe suivante :

http://votre nom de domaine/article.php3?id_article=identifiant de l'article

J’ai essayé d’inclure dans un article de test (en local, avec EasyPHP) tous les raccourcis typographiques SPIP possibles. Voici, à titre de démonstration, le fichier pdf correspondant :

Démo

Attention : Pour générer les liens de note, je n’ai pas trouvé d’autre solution que d’effectuer deux itérations dans le parsing de l’article. Attendez-vous donc à ce que la génération d’un PDF prenne deux fois plus de temps qu’avec les contributions précédentes.



Installation

Vous trouverez en pièce-jointe (PDFAvecLiens.zip), les fichiers nécessaires à la génération des articles au format PDF :

-  Copiez article_pdf.php3 à la racine de votre site SPIP.

-  Copiez le fichier mes _fonctions.php3 à la racine de votre site SPIP. Attention, si le fichier mes_fonctions.php3 existe déjà, recopiez le code contenu dans notre fichier mes_fonctions.php3 entre les balises ?php et ? dans votre fichier mes_fonctions.php3.

-  Copiez le répertoire pdf dans le répertoire de SPIP contenant vos squelettes ou à la racine de SPIP si vos squelettes se trouvent... à la racine de SPIP.

-  Créez un dossier nommé : _article_PDF dans le répertoire IMG et de lui attribuer les permissions à 777 (comme vous l’aviez fait lors de l’installation de SPIP pour le répertoire IMG par exemple).

-  Faites un lien dans votre squelette article.html vers article_pdf.php3. Mon lien ressemble à ceci :

<a href="article_pdf.php3?id_article=#ID_ARTICLE">
<img src="#DOSSIER_SQUELETTE/images/pdf.gif"/>
Télécharger</a>

Evidemment, dans mon répertoire de squelettes, j’ai un sous-répertoire nommé images contenant un image pdf.gif.

-  Dans article_pdf.html, mettez des valeurs correctes pour les variables $path_pdf (chemin du répertoire où seront sauvés les fichiers pdf), $class_path (emplacement des classes PHP servant à générer les pdf) et $site_logo_path (chemin vers le logo de votre site, si vous en avez un).

-  N’oubliez pas d’activer l’extension PHP php_gd2 sur votre serveur, si ce n’est déjà fait.

-  Dans le répertoire Code SPIP Demo, vous trouverez aussi le code SPIP ayant servi à générer le PDF de démo. Vous pouvez le réutiliser en local pour vos tests (attention aux numéros des images dans le texte SPIP, qui ne seront probablement pas les mêmes chez vous, par exemple : img07|left).

Explications


Parsing des liens

Le point d’entrée pour construire le PDF se trouve dans article_pdf.html. Il s’agit de Build :

$pdf-Buid($file_out) ;

Build est défini dans la classe PDF du fichier lib_pdf_global.php. On fait deux itérations par des PDF_SPIP::BuildDocument() et ce n’est qu’à la fin qu’on enregistre le document en appelant FPDF::Output().

PDF_SPIP::BuildDocument() appelle PDF_SPIP::GenerateText() qui appelle plusieurs fois PDF::WriteHTML. C’est dans cette dernière méthode que l’on détecte la présence de liens (’HREF’ est positionné à true) et que l’on fait la distinction entre les différents types de liens évoqués au début de ce document.

Les notes de bas de page nécessitent deux itérations. Pourquoi ? Parce que lorsque vous rencontrez le raccourci typographique de note (format SPIP : 2 crochets ouvrants et 2 crochets fermants), vous devez créer deux liens dans la page html générée (et donc le PDF basé sur la page) : celui dans le texte et celui en bas de page. Or, lors du parsing, vous ne connaissez pas l’emplacement de ce dernier lien de bas de page, puisque vous n’avez pas fini de parcourir le texte. On utilise deux tableaux BottomLinkIDArray et TopLinkIDArray pour sauver les identifiants de liens. A la première itération, on ajoute un lien bidon. A la seconde itération, on met un vrai lien en allant chercher son identifiant dans les tableaux.


Modèle de PDF

C’est la classe PDF_SPIP, définie dans le fichier lib_pdf_spip.php qui détermine l’aspect de la page de garde ainsi que les en-têtes et pieds de page. Mon modèle est une version légèrement modifiée du modèle d’origine :

L’entête est simplement constituée du titre.

En haut, on reprend le logo du site auquel on accole son nom et son URL. Attention : dans ce modèle, on ignore les logos de la rubrique et de l’article.

Au centre, le surtitre, le titre et le chemin des rubriques.

Plus bas, les dates de mise en ligne et parution.

En bas, le descriptif suivi d’une notice de copyright.

Le pied de page est constitué d’un copyright avec le nom du site et du numéro de la page sur le nombre total de page.

Problèmes avec Internet Explorer

Dans article_pdf.php3 ont été définis deux modes : Release et Debug.

Le mode Debug force la regénération du fichier pdf, quelque soit la date du fichier préexistant. Il affiche également le pdf directement dans le navigateur. Ce navigateur doit être Firefox. En effet, l’affichage direct semble poser problème sous IE6 (même SP2) : au lieu de lancer l’affichage du contenu du pdf, il affiche un dump du fichier !
Le mode Release, lui fonctionne sous IE (SP2) et Firefox. Il produit une boîte de dialogue demandant à l’internaute s’il souhaite lancer un lecteur de PDF externe ou sauver le pdf sur son disque. Le pdf n’est recréé que si la date de mise à jour dépasse celle du fichier pdf préexistant (ou si aucun fichier pdf n’existe, bien sûr).


Ce qu’il reste à faire

(pour les perfectionnistes...)

-  Habillage correct des images avec le texte et les placer correctement sur la page (à gauche, à droite, ou centrée)

-  Gestion étendue des tableaux : permettre l’insertion de liens (ignorés pour le moment) et d’images (placées à l’extérieur du tableau pour le moment) à l’intérieur d’une cellule de tableau.

-  Quand on insère une ancre dans le texte, créer dans le pdf un lien qui pointe directement vers cette ancre, sans passer par un lien HTTP externe.

-  Prendre en compte les citations, pour le moment ignorées.

-  Afficher une puce différente par niveau de hiérarchie en cas de puces imbriquées.

-  Afficher correctement du code informatique. Actuellement, la première ligne est ignorée.

-  Refactoring du code (par exemple, ne garder qu’une classe ou deux classes parmi les trois classes PDF, FPDF et PDF_SPIP)

Archive génération PDF avec liens

Discussion

15 discussions

  • tres bonne contrib
    j’ai cependant un chti probleme,
    tout fonctionne sauf pour « Date de mise en ligne : vendredi 24 aot 2007 »,
    comme vous pouvez le constater pour le mois d’août le « û » est mangé,le mode choisi est utf-8, j’ai essayé avec les iso, mais dans ces cas c’est tout le reste du pdf qui apparait mal

    Pouvez vous me donner la solution pour faire apparaitre la date en chiffre du type 24/08/2007 ou encore mieux avec le « û » ?

    Encore bravo pour ce code et d’une maniere generale pour cet open-source !!!!
    Indepedenza !!

    Répondre à ce message

  • 1

    Merci pour cette merveilleuse contrib.
    J’ai un problème :
    FPDF error : GIF parser : unable to open file IMG/siteon0.gif

    alors que j’Ai placé :
    $path_pdf = « /IMG/_article_PDF/ » ;
    $class_path = $GLOBALS[’dossier_squelettes’] . « #DOSSIER_SQUELETTE/pdf/ » ;
    $site_logo_path = $GLOBALS[’dossier_squelettes’] . « IMG/(#LOGO_SITE_SPIP » ;

    une idée ?

    • Par rapport a l’ erreur FPDF error : GIF parser : unable to open file j’ai eu le meme probleme. Ca venait du passage a php5. En effet, dans la librairie gif.php il y a un certain nombre d’ appels de fonction avec une initialisation de variable dans l’ appel : ex :$this->m_img->load($this->m_lpData, $imgLen = 0) Or, ces fonctions doivent retourner une valeur de ce parametre en sortie (passage par reference). En php4, il semble que l’ affectation de la variable se fasse AVANT l’ appel de la fonction alors qu’ en php5 elle se fait APRES... conclusion, $imgLen est remise a zero. Qui plus est, ces affectations dans l’ appel sont inutiles car les fonctions appellees font deja l’ initialisation.

      Il suffit donc de supprimer l’ affectation dans l’ appel. Ca revient a modifier comme suit le fichier gif.php :

      612c614
      <                               if(!$this->skipExt($data, $len)) {
      ---
      >  
                                  if(!$this->skipExt($data, $len = 0)) {
      620c622
      <                               if(!$this->m_gih->load($data, $len)) {
      ---
      >
                                    if(!$this->m_gih->load($data, $len = 0)) {
      627c629
      <                               if(!($this->m_data = $this->m_lzw->deCompress($data, $len))) {
      ---
      >                               if(!($this->m_data = $this->m_lzw->deCompress($data, $len = 0))) {
      
      778c780
      <               if(!$this->m_gfh->load($this->m_lpData, $len)) {
      ---
      >               if(!$this->m_gfh->load($this->m_lpData, $len = 0)) {
      
      784c786
      <                       if(!$this->m_img->load($this->m_lpData, $imgLen)) {
      ---
      >                       if(!$this->m_img->load($this->m_lpData, $imgLen = 0)) {
      
      806c808
      <               if(!$gfh->load($data, $len)) {
      ---
      >               if(!$gfh->load($data, $len = 0)) {

    Répondre à ce message

  • corentin garrault

    Bonjour à toutes et à tous,

    Je n’arrive pas à faire fonctionner le plugin. Si quelqu’un pouvait m’aider ?

    Je suis sous SPIP 1.9.1, avec GD2 activée.
    Le plugin est installé dans MON_SITE/plugin/article_pdf_1_9
    Il est reconnu et activé sous SPIP
    J’ai placé la balise : #ARTICLE_PDF dans le fichier squelette article.htm
    Je vois sur mon site en visite dans les articles le logo cliquable du pdf...
    Je clique et je reviens à ma page d’acceuil !
    Je précise que le dossier sous /IMG/article_pdf est en 777...

    OS COURT !

    Répondre à ce message

  • Sylvain

    Bonjour,

    j’utilise cette contrib pour générer les pdf et je trouve cela trés bien. En revanche je rencontre un probleme avec les carractères accentués ou spéciaux.

    J’utilise SPIP 1.9.1 avec codage UTF-8 .

    J’ai tenté de remplacer la contrib par le plugin, mais là c’est page blanche ... En même temps le plugin semble etre conçu pour la 1.9 donc je peux comprendre. Peut-être y a t-il quelques modifs à apporter mais cela n’est pas dans mes comptétences.

    En tous cas merci aux nombreux contributeurs bénévoles et salariés qui démocratisent l’informatique.

    Répondre à ce message

  • Bonjour,
    J’ai plusieurs questions et interrogations :
    -  dans ’votre’ classe PDF vous faites référence aux fonctions SetCopyright et ResetBuffer qui ne figurent pas dans la classe ’originale’ située sur www.fpdf.org. Pourquoi ne pas les mettre dans la classe dérivée ?
    -  pourquoi la variable $this->PDFVersion est initialisée à 1.3 alors que c’est la version 1.53 ?
    -  dans « article_pdf.html », vous appelez $pdf->debug = $debug ; avant d’instancier la classe par $pdf = new PDF_SPIP() ; et de plus la variable $debug n’existe dans aucune classe ? Est-ce normal ?

    L’utilisation (en local, désolé pour l’exemple) me génère bien un pdf, mais à l’ouverture, Acrobat (7.0) affiche une fenêtre d’erreur avec la message « Le nouveau format de ce fichier n’est pas pris en charge par ......... » puis affiche les pages 1 et 2. Par contre Acrobat (5.0) n’affiche pas la page 1 ( Zoom 1600% !!!!) et la page 2 est incomplète.

    Est-ce que j’ai mélangé des librairies ?

    Help !

    Cordialement,

    Répondre à ce message

  • 5

    Les intertitres dans mes articles, h2 ou h3, ne sont pas pris en compte lors de la generation PDF.

    Je suis allé dans le code du fichier lib_pdf_global.php au niveau des fonctions ’open_tag’ et ’clos_tag’ où tout semble pourtant normal.
    Quelque chose m’échappe...
    Quelqu’un a-t-il déjà eu ce problème ?
    Merci d’avance

    PS : j’ai modifié la mise en page du document généré (plus de page de garde, nom du site & hierarchie dans l’entete, titre de l’article en haut de page).
    Si cela peut intéresser quelqu’un contactez-moi, je vous la ferais parvenir.
    Pour la voir >>> ici

    • desole pour le lien precedent... (??)

      Voici le bon >>>

    • Problème inexistant lorsque le plugin « barre typo enrichie » est desinstallé.
      De là à ce qu’il y’ait un lien... ;-)

    • Je serais intéresser par la suppression de la page de garde

      Merci

      Pierre Lo Cicero

    • Désolé pour le retard...
      Voici le code modifié du fichier ’lib_pdf_spip.php’ (squelette/pdf) pour enlever la page de garde (et quelques modifs de formattage... voir le lien precedent) :

      <?
      
      /**
       * class PDF_SPIP extends PDF : 
       */
       
       
      class PDF_SPIP extends PDF
      {
      
      
      // haut, gauche,  bas, droite
      function SetAllMargins($TopMargin, $LeftMargin, $BottomMargin, $RightMargin)
      {
      	// gauche, haut, droite
      	$this->SetMargins($LeftMargin,$TopMargin,$RightMargin);
      	
      	// bas
      	$this->SetAutoPageBreak(auto, $BottomMargin*3/2);
      }
      
      
      function Header()
      {
      	global $site, $titre, $yahoo, $conf_url_site;
      	
      	$this->SetY($this->tMargin/2);
      	$this->SetLineWidth(0.3);
      	$this->Line($this->lMargin - 3, $this->tMargin, $this->w - $this->rMargin + 3, $this->tMargin);
      	
      	//Extrait du site xxx
      	$this->SetFont('times','',12);
      	$this->SetTextColor(0,0,0);
      
      	$this->Cell(0,$this->tMargin/2, "Extrait du site  ' ".$site." '",0,0,'L',0,$conf_url_site );
      		
      	//hierarchie
      	$this->SetFont('times','',9);
      	$this->SetTextColor(0,0,0);
      	$this->SetX($this->w-$this->rMargin*2-5);
      	$this->Cell(0,$this->tMargin/2, $yahoo." >> ".$titre,0,0,'R',0 );
      
      
      	
      	// $this->tMargin = marge du haut, définie dans FPDF
      	$this->Ln(9);
      }
      
      
      /* /// Pied de page du document) 
      /* ///////////////////////////// */
      function Footer()
      {
      	global $conf_nom_site , $conf_url_site  ;
      	
      	$this->SetY(-$this->bMargin/2);	
      	$this->SetLineWidth(0.3);
      	$this->Line($this->lMargin - 3, $this->GetY(), $this->w - $this->rMargin + 3, $this->GetY());
      	
      	
      	//Police helvetica 8	
      	$this->SetFont('helvetica','I',8);
      	$this->SetTextColor(0,0,0);
      
      	// Copyright
      	$this->Cell(0,6,"Copyright © ".$conf_nom_site ,0,0,'L',0,$conf_url_site );
      	
      	//Numéro de page
      	$this->SetX($this->w-$this->rMargin*2-5);
      	$this ->Cell(0,6,'Page '.$this->PageNo().'/{nb}', 0, 1, 'C');
      }
      
      function GenerateTitlePage()
      {
      	global $site, $rubrique, $yahoo, $surtitre, $titre, $soustitre;
      	global $logo_site, $auteur, $descriptif;
      	global $copyright;
      	global $conf_url_site;
      	global $DateParution,$DateMiseEnLigne;
      	
      	
      	// En-tête
      	if (file_exists($logo_site))
      	{
      		$this->Image($logo_site,$this->rMargin+3,$this->tMargin+2,20,20);
      	}
      	
      	$this->SetFont('times','',12);
      	$this->SetXY($this->rMargin+10,$this->tMargin+6);
      	$this->MultiCell(0,5,"Extrait du site  ' ".$site." '");
      
      	
      	$this->SetXY($this->rMargin+130,$this->tMargin+6);
      	$this->PutLink($conf_url_site,$conf_url_site);
      	
      	
      	
      	//Surtitre (type du document)
      	$this->unhtmlentities($surtitre);
      	$this->SetXY(20,92);
      	$this->SetFont('courier','B',14);
      	$this->MultiCell(170,6,$surtitre,0,'C',0);
      	
      	
      	//Titre centré
      	$this->SetXY(20,100);
      	$this->SetFont('helvetica','B',32);
      	$this->unhtmlentities($titre);
      	$this->MultiCell(170,20,$titre,0,'C',0);
      	
      	
      	// Rubriques
      	$this->Ln(2);
      	$this->SetFont('helvetica','',8);
      	$this->MultiCell(0,5,$yahoo,0,'C',0);
      	
      	
      	//Dates
      	$this->SetFont('times','',10);
      	
      	if ($DateMiseEnLigne) 
      	{
      		$this->SetXY(110,184);
      		$this->unhtmlentities($DateMiseEnLigne);
      		$this->MultiCell(0,6,"Date de mise en ligne : $DateMiseEnLigne",0,'L',0);
      	}
      	
      	if ($DateParution) 
      	{
      		$this->SetXY(110,190);
      		$this->unhtmlentities($DateParution);
      		$this->MultiCell(0,6,"Date de parution : $DateParution",0,'L',0);
      	}
      
      
      	// Descriptif 	
      	if ($descriptif)
      	{
      		
      		$this->SetFont('helvetica','B',10) ;
      		$this->SetXY($this->rMargin+5,220);
      		$this->SetFont('helvetica', 'BU', 10);
      		$this->Write(5, 'Description :');
      		$this->Ln();
      		$this->SetFont('times', '', 8);
      		$this->WriteHTML($descriptif,5) ;
      	}
      	
      	if ($copyright)
      	{
      		$this->SetXY(45,250);
      		$this->SetFont('times', 'B', 10);
      		$this->MultiCell(120,8,$copyright,'TB','C',0);
      	}
      }
      
      function GenerateText()
      {
       	global $titre, $texte, $chapo, $ps, $notes ;
      		
      		//Titre centré
      	$this->SetXY(20,20);
      	$this->SetFont('helvetica','B',22);
      	$this->unhtmlentities($titre);
      	$this->MultiCell(170,20,$titre,0,'C',0);
      
      		
      	$this->SetFont('helvetica');
      	if ($chapo)
      	{
      		// Chapeau
      		$this->SetFont('times','B',13);
      		$this->WriteHTML($chapo,5);
      		$this->Ln(12);
      	}
      	
      	//Texte - justifie
         		$this->SetFont('helvetica','',10);
      		$this->WriteHTML($texte,5);
      		$this->Ln(12);
      	if ($ps) 
      	{
      		//ps
      		$this->SetFont('','I',8);
      		$this->WriteHTML("Post-scriptum : ",4);
      		$this->WriteHTML($ps,4);
      		$this->Ln(8);
      	}
      	if ($notes) {
      		//notes
      		$this->SetFont('','',8);
      		$this->WriteHTML($notes,3);
      		$this->Ln();
      	}
      }
      
      function BuildDocument()
      {
      	/*$this->AddPage();
      	$this->GenerateTitlePage(); <-- page de garde */
      	$this->AddPage();
      	$this->GenerateText();
      	
      	// On repasse en police à la bonne taille pour le nombre de pages.
      	$this->SetFont('helvetica','I',8);
      	$this->AliasNbPages();
      }
      //
      }
      
      ?>

      Voili voilou

    • Y a t’il une solution existante pour ce problème d’inter-titres ?

    Répondre à ce message

  • 6

    Bonjour,

    Excellent travail pour les version antérieures à la 1.9, mais vu les chamboulement de cette dernières version serait-il possible d’envisager une mise à jour de cette contrib (si un peu de temps ce qui n’est pas toujours facile...).

    Merci quand même pour ce beau boulot ;-)

    • C’est fait, le plugin existe pour la 1.9

    • elle se trouve ou ? .. Merci pr tt !

    • ici :

      http://zone.spip.org/files/spip-zone/

      Télécharge plugins.zip, il y a plusieurs plugins dont celui qui t’interesse (je connais pas d’adresse où télécharger le plugin seul).

      Par contre j’ai essayer de l’utiliser, mais je n’y suis pas parvenu... j’ai eu des erreurs faisant réference a des .php3. Mais mon spip 1.9, il a plus de .php3... j’ai du me planter, mais où ...?

    • ça marche pas... l’activation du plug in a pour effet... la venue d’une superbe page blanche sur la page d’accueil du site, les autres pages, au mieux, s’affichent partiellement...

      le plug in n’est donc pas prêt pour la 1.9, dommage...

    • Salut, j’ai exactement le même problème que toi une fois le plug in activé, j’ai que des pages blanches ce qui m’a un peu apeuré :( par ce que je voyais ou plutôt ce que je ne voyais plus. C’est dommage mais je vais garder l’ancien méthode qui consisté à tout installer à la main mais mon problème n’est toujours pas résolu car fpdf ne prend pas en compte l’utf-8.

      A+

    • Salut,

      Il semblerait que tu aies un conflit avec mes_fonctions ; dans mon cas le plugin est devenu fonctionnel après que j’aie supprimé toute référence au pdf dans la précédente versions de mes_fonctions. En effet, mes_fonctions et mes_options sont maintenant inclues avace le plugin.

      A+
      Cyril

    Répondre à ce message

  • je suis sur la 1.9 et je voudrais vous feliciter pour ce plugin car il marche super

    j’aurais une question est til possible d’associer l’envoi d’un mail au plugin pdf

    c’est a dire generer le pdf pour qu’il l’envoi par mail

    ou bien faire un mailto du pdf ?

    encore bravo et merci

    Répondre à ce message

  • Bonjour,

    j’essaye d’integrer le logo de l’article dans la génération de mon pdf, mais sans succès j’ai bien déclaré une variable $logo_article= « (#LOGO_ARTICLE|pdf_first_clean) » ; dans mon fichier _article_pdf mais j’obtient toujours une erreur de squelette sur ma page. quand c’est une image intégrée a l’article ça passe. Est ce un probleme due a la génération des LOgo par GD() ?? quelqu’un as-t’il essayé d’inclure ce type de fonction et pourrais m’éclairé un peut ;-)

    merci pour la contrib en tous cas et les réponsses si il y en a.

    Répondre à ce message

  • 3

    Bonsoir,

    Je viens de tester votre contrib et je la trouve pas mal du tout. J’ai toutefois un problème de taille : l’utf-8 dans lequel mon site est encodé n’est pas reconnu, les pdf générés sont remplis de signes cabalistiques à la place des caractères accentués et autres caractères spéciaux.

    Par ailleurs, j’aurais vraiment besoin de pouvoir gérer des citations dans mon texte. Avez-vous prévu d’ajouter le support du raccourci <quote> dans un avenir proche ?

    Un grand merci

    François

    PS : Est-ce que ça ne voudrait pas le peine de mettre ce code sur la zone (éventuellement sous forme de plugin pour faciliter l’installation par les utilisateurs ?) pour permettre son amélioration collective. C’est vraiment quelque chose d’essentiel pour SPIP que de disposer d’une fonctionnalité de génération de pdf.

    • Encore moi. L’idée de mettre le truc en plugin est vraiment intéressante, parce qu’elle permettrait en plus de gérer un panneau de config, dans lequel on pourrait notamment :

      -  Définir la présente du copyright ou pas (c’est franchement pas nécessaire dans tous les cas).

      -  Définir la présence d’une page de garde ou d’un simple titre. En LaTeX, on dispose de différents modes (livre, article, etc). Est-ce qu’il serait possible de faire quelque chose de ce genre ?

      -  Choisir la police de caractères utilisées. SPIP permet depuis la version 1.9 de gérer un dossier de polices personnelles (pour le filtre image_typo). Ca pourrait être intéressant de brancher la contrib sur ce répertoire aussi.

      -  Vider le cache. Par exemple après avoir modifié une option.

      Si c’est utile, je veux bien donner un coup de main pour tout ça (même si je ne connais pas grand chose à pdf) ; j’ai un usage immédiat du truc (un site sur lequel les étudiants de ma fac encodent leurs notes de cours pour les partager ; il est évidemment hyper utile de pouvoir disposer de ces fichiers dans un format imprimable de bonne qualité).

      Par ailleurs, j’ai encore une série de remarques/demandes, que je me permets de noter ici :

      -  Les semi-cadratins semblent ignorés par votre contrib, on se retrouve avec des &mdash;.

      -  Est-ce qu’il est possible de personnaliser les styles. J’aimerais par exemple avoir du texte en mode justified, définir l’alignement de mes intertitres, ce genre de choses,...

      -  J’aimerais pouvoir concaténer tous les articles d’une même rubrique dans un même fichier pdf (pour générer un syllabus pour chaque cours, en reprenant simplement tous les articles qui composent ce cours). Possible avec votre contrib ?

      Un grand merci pour votre travail et, j’espère, pour vos réponses à mes nombreuses questions :)

      François

    • Cela tient sûrement à l’encodage des polices voir ici : http://www.fpdf.org/fr/tutorial/tuto7.htm

      Les polices sont encodées apparemment par défaut en cp1252, pour la 1.9 il faudrait de l’UTF-8.

      Mais je n’ai pas encore testé...

      En tout cas c’est une excellente contrib. Merci à l’auteur.

    • Merci pour ces commentaires et remerciements.

      L’intégration de cette contrib n’est pas de mon ressort, mais des auteurs SPIP. A eux de voir si elle peut faire l’objet d’un « plug-in ».

      Par ailleurs, j’aurais vraiment besoin de pouvoir gérer des citations dans mon texte. Avez-vous prévu d’ajouter le support du raccourci ’quote’ dans un avenir proche ?

      Non, je ne l’ai pas prévu. En fait, ça peut être résolu en introduisant un style (voir plus bas).

      Les semi-cadratins semblent ignorés par votre contrib, on se retrouve avec des —.

      Rajoutez ce caractère dans la fonction « 
      pdf_first_clean($texte) » du fichier « mes_fonctions.php3 » (voir le tableau « $trans »)

      Est-ce qu’il est possible de personnaliser les styles. J’aimerais par exemple avoir du texte en mode justified, définir l’alignement de mes intertitres, ce genre de choses,...

      Oui, dans le principe, c’est faisable ; mais je n’ai pas prévu de le faire. Avis aux amateurs qui ont le temps pour ça ! Ca nécessite d’enrichir pas mal la logique de l’appli...

      J’aimerais pouvoir concaténer tous les articles d’une même rubrique dans un même fichier pdf (pour générer un syllabus pour chaque cours, en reprenant simplement tous les articles qui composent ce cours). Possible avec votre contrib ?

      Je n’ai pas prévu de le faire non plus, mais ça me semble plus simple que le point précédent. Dans le fichier « article_pdf.html », il faut faire une boucle permettant de concaténer les différents éléments des articles à transformer en PDF :

      [$surtitre=« (#SURTITRE|pdf_first_clean) » ;]

      [$titre=« (#TITRE|supprimer_numero|pdf_first_clean) » ;]

      [$soustitre=« (#SOUSTITRE|pdf_first_clean) » ;]

      [$chapo=« (#CHAPO|pdf_first_clean) » ;]

      [$descriptif=« (#DESCRIPTIF|pdf_first_clean) » ;]

      [$texte= « (#TEXTE|pdf_first_clean) » ;]

      [$ps=« (#PS|pdf_first_clean) » ;]

      [$notes=« (#NOTES|pdf_first_clean) » ;]

      J’espère vous avoir donné des pistes utiles.

      Cordialement,

    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