DOMPDF, générer des PDF à partir de vos squelettes !

Ce plugin intègre la librairie DOMPDF à SPIP et fourni un API pour exporter directement le résultat d’un squelette SPIP en PDF.

API

Ce plugin fournit une fonction d’exportation du résultat d’un squelette qui s’utilise comme ceci :

// Charger l'API
$exporter_pdf = charger_fonction('exporter_pdf', 'inc');
$exporter_pdf($squelette_ou_html, array $context);

Cette fonction va directement proposer de télécharger le fichier.

Dans certain cas, on peut vouloir générer le PDF pour le manipuler (l’écrire sur le serveur par exemple).
Dans ce cas, on utilisera generer_pdf :

// Charger l'API
$generer_pdf = charger_fonction('generer_pdf', 'inc');
$generer_pdf($squelette_ou_html, array $context);

$squelette_ou_html peut être me chemin d’un squelette SPIP ou directement du HTML.

Exemple d’utilisation.

Intégration avec formidable

Ce plugin fourni par défaut une intégration avec formidable pour exporter des réponses en PDF. Cela fournit un bon exemple d’utilisation et d’intégration dans les pipelines.

Est-ce que mon css va être pris en compte ?

DOMPDF déclare que tout ce qui est CSS 2.1 va fonctionner ainsi que quelques propriétés CSS3
Tout ne va pas fonctionner bien entendu. Il existe une liste non exhaustive.

Discussion

7 discussions

  • Bonjour, si ça intéresse des gens, j’ai tenté un upgrade qui fonctionne sur les libraires :
    -  dompdf-2.0.3
    -  html5-php-2.8.1
    -  php-svg-lib-0.5.0
    -  php-font-lib-0.5.4
    pour SPIP >= 4 et PHP >= 7.1

    Des tests restent à faire ceci-dit.

    Répondre à ce message

  • Jean Billon

    Bonjour,
    j’ai ce retour « Cannot parse upstream response » lorsque j’essaye de faire fonctionner le bouton pour créer le pdf.
    Merci de votre aide

    Répondre à ce message

  • Pour générer le pdf à la volée depuis n’importe quelle page

     * avec des arguments direct
     * <a href='#URL_ACTION_AUTEUR{skl_exporter_pdf,#PAGE-patate-4,#SELF}'>Exporter ce squelette</a>
     * simple '#URL_ACTION_AUTEUR{skl_exporter_pdf,#PAGE,#SELF}'
     * <a href='#URL_ACTION_AUTEUR{skl_exporter_pdf,facture-commande-1,#SELF}'>Exporter la commande N°1 en PDF</a>

    Et avec le #BOUTON_ACTION

    [(#BOUTON_ACTION{<:creer_un_pdf:>,#URL_ACTION_AUTEUR{skl_exporter_pdf,article-#ID_ARTICLE,#GET{redirect}},'valider'})]

    Depuis https://zone.spip.net/trac/spip-zone/changeset/112410/spip-zone

    Répondre à ce message

  • 8
    Jérôme

    Bonjour,

    Ce plugin m’intéresse beaucoup car je galère avec spipdf depuis plusieurs semaines sans obtenir un résultat satisfaisant. Simplement, il y a quelque chose que je ne comprend pas : que dois-je faire de ces trois lignes de code

        // Charger l'API
        $exporter_pdf = charger_fonction('exporter_pdf', 'inc');
        $exporter_pdf($squelette_ou_html, array $context);
    • Jérôme

      Merci d’avance pour votre réponse.

    • Bonjour,

      C’est ligne sont un exemple d’utilisation. de l’API qui est fournie dans le plugin.
      Je ne sais pas exactement ce que tu veux exporter, mais voici quelques exemples d’utilisation :

      Exporter les réponses d’un formulaire formidable
      Exporter une réponse spécifique

      Tu exportes ce que tu veux, il faut juste écrire le code nécessaire.

    • Jérôme

      Merci Phénix. L’idée serait que les utilisateurs de mon site puissent enregistrer une version pdf de l’article qu’ils lisent.

      Si j’ai bien compris, je dois créer moi-même le fichier php qui correspond au type d’exportation que je souhaite ?

    • Oui, l’idéal serait de faire une action SPIP pour exporter ton squelette article :)

    • Jérôme

      D’accord... Comme je suis une bille en code spip c’est très loin d’être gagné.

      Avant de me lancer dans un truc très compliqué et chronophage, est-ce que je peux être sûr que cela me permettra d’inclure dans le pdf les images insérées dans mes articles (mon gros problème avec spipdf) ?

      Merci !

    • Je n’ai personnellement jamais eu de soucis, les balises html IMG sont convertie en PDF sans soucis.

    • Jérome

      Ok.

      Donc, voilà où j’en suis :
      -  j’ai créé dans le dossier « modeles » le squelette « export_article_pdf.html » suivant lequel mon article sera exporté.
      -  j’ai créé dans le dossier « action » un fichier « exporter_article.php ». Est-ce que ce code est valable (je précise que je n’y connais absolument rien !) :

      	$exporter_pdf('modeles/export_article_pdf', array('id_article' => $arg));


      -  j’ai bidouillé une commande dans le fichier « dompdf_pipelines.php » :

      	if ($flux['args']['exec'] == 'formulaires_article') {
      		$url_action = generer_action_auteur('exporter_article', intval($flux['args']['id_article']));
      		$flux['data'] .= dompdf_cadre($url_action, _T('dompdf:pdf'), _T('dompdf:export'));
      	}

      J’ai du rater quelque chose car ça ne marche pas.
      D’autre part, est-ce que le bouton pour exporter en pdf s’affichera uniquement en partie privée (comme pour les formulaires Formidable) ou est-ce qu’il apparaîtra aussi en partie publique ?

      Merci pour ton aide !

    • Jérôme

      Merci. J’ai quand même un problème pour faire fonctionner le plugin. J’ai procédé comme il suit :
      1) j’ai créé un fichier « export_article_pdf.html » dans le dossier « modeles » avec le squelette que je veux.
      2) j’ai créé un fichier « exporter_article.php » dans le dossier « action ». J’ai modifié l’un des fichiers d’exemple comme ceci :

      	$exporter_pdf('modeles/export_article_pdf', array('id_article' => $arg));

      3) dans le fichier « dompdf_pipelines.php », j’ai rajouté ceci :

      	if ($flux['args']['exec'] == 'formulaires_article') {
      		$url_action = generer_action_auteur('exporter_article', intval($flux['args']['id_article']));
      		$flux['data'] .= dompdf_cadre($url_action, _T('dompdf:pdf'), _T('dompdf:export'));
      	}

      Je pense que j’ai du rater quelque chose, mais je ne sais pas quoi.

      Par ailleurs, le bouton pour exporter en pdf s’affichera-t-il uniquement en partie privée, comme pour les formulaires Formidable, ou aussi en partie publique ?

      Merci beaucoup !

    Répondre à ce message

  • 1

    Bonjour Phenix

    Juste une question, comment utilise-t-on le plugin avec Formidable ? J’ai installer dompdf, j’ai aussi formidable.
    Je souhaiterai qu’une fois le formulaire en ligne rempli par l’internaute, au moment de la validation par ce dernier :
    soit un fichier PDF de ses réponses soit envoyé sur son mail
    soit le fichier PDF s’affiche directement et il le télécharge

    Est-ce possible avec dompdf ? si oui, je ne suis pas sûre d’avoir compris comment...

    merci d’avance de ton aide !
    A+

    Répondre à ce message

  • 1

    Bonjour,

    La comparaisons avec http://contrib.spip.net/FPDF-4185 serait plus logique non ?
    Dompdf c’est pour les utilisateur et fpdf pour les développeur ?

    • 2 commentaires, 2 comparateurs de plugins. Je ne comprends pas cette obsession de la comparaison.

      La description du plugin n’est pas assez clair ?

      fourni un API pour exporter directement le résultat d’un squelette SPIP en PDF.

      J’ai fait ce plugin car ceux qui était proposé ailleurs ne me convenait pas : je voulais exporter facilement des PDF sans avoir à me battre avec un plugin.

      spiPDF ne fait pas vraiment de choix dans la librairie, ce qui fait qu’il fonctionne « aléatoirement » bien, d’autant qu’il ce permet d’altérer le html qu’on lui passe.
      Quand à FPDF, la syntaxte de création des PDF est des plus laborieuse (voir l’étape 4 du tutoriel : http://contrib.spip.net/Realiser-un-PDF-personnalise-avec-FPDF)

      Je suis le seul qui vois l’avantage de ce plugin si par rapport au 2 autres ?

    Répondre à ce message

  • 1

    Quelles sont les différences par rapport à spiPDF : générer des contenus sur mesure en PDF ?

    • Déjà, ça fonction out of the box.

      Ensuite, c’est beaucoup plus souple pour un développeur : cela fourni un API qui gère des PDF, à toi de faire le reste. C’est inspirer des fonctions csv de spip_bonux.

    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