Técharger un bloc div sous pdf en javascript

Résolu/Fermé
Aissata - 1 déc. 2021 à 17:42
 Aissata - 4 déc. 2021 à 20:22
Bonjour.
J'aimerais savoir comment fait-on pour télécharger un bloc sous format pdf s'il vous plaît ?

En dehors du div qui s'affiche dans ma page, je dois également y ajouter d'autres éléments qui doivent apparaître uniquement dans le fichier téléchargé

Voici mon code :


$("#FormulaireModal").on("click", "#ImprimerFormulaire", function (){
var bloc_to_print = $("#FormulaireModal #modal-body-to-print");
var actifVal = $("#Actif").is(":checked") === true ? "OUI" : "NON"

bloc_to_print.print({
title: "Formulaire",
prepend: "<h2 style='width: 100%; text-align: center;'>" + "Formulaire " + "</h2>" +
"<div>" +
"<p> Nom : " + $("#Nom").val() + " </p>" +
"<p> Description : " + $("#Description").val() + " </p>" +
"<p> Actif : " + actifVal + "</p>" +
"</div>"
})

});


Je voudrais ajouter dans mon code la fonctionnalité télécharger

Merci d'avance !
A voir également:

7 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
2 déc. 2021 à 21:53
Bonjour
var bloc_to_print = $("#FormulaireModal #modal-body-to-print").html();

1
Merci beaucoup !
Certains éléments s'affichent, mais pas les input et la mise en forme de ma page n'est pas prise en compte.
D'après mes recherches jsPDF() ne tient pas compte du css, et n'affiche que les textes.

Si vous avez d'autres alternatives à me proposer, je suis preneur.

Merci !
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
2 déc. 2021 à 13:00
Bonjour,

Est-ce que ton code actuel fonctionne ? Des erreurs dans la console js du navigateur ?
En plus de jQuery, est-ce que tu utilises un plugin pour pouvoir appeler la fonction print() sur un élément html (normalement la méthode print() en javascript ne peut être appelé sur l'objet window) ?

Si tu pouvais également partager le code html de la page et préciser un peu plus le résultat que tu souhaites (un exemple si possible), cela serait plus facile pour t'aider.

Bonne journée,
0
Bonjour.
Oui, le code actuel fonctionne. Seulement en dehors du print() , je dois également ajouter à l'évènement, la fonctionnalité télécharger. Une fois qu'on clique sur l'évènement, un pdf avec le div doit être téléchargé aussi.

Voici le html du bouton :

<button id="ImprimerFormulaire" data-dismiss="modal" type="button" Class="btn btn-default imprimer">Imprimer</button>



J'ai essayé avec jsPDF en suivant ce tutoriel : https://jsfiddle.net/user2314737/z437nxaq/
mais ça ne marche pas

Voici mon code jQuery


var docPDF = new jsPDF();
$("#FormulaireModal").on("click", "#ImprimerFormulaire", function (){
var bloc_to_print = $("#FormulaireModal #modal-body-to-print");
var nomFichier = $("#Nom").val() + ".pdf";
var actifVal = $("#Actif").is(":checked") === true ? "OUI" : "NON"

doc.fromHTML(
"<h1>Formulaire</h1>" +
"<h2 style='width: 100%; text-align: center;'>" + "Formulaire " + "</h2>" +
"<div>" +
"<p> Nom : " + $("#Nom").val() + " </p>" +
"<p> Description : " + $("#Description").val() + " </p>" +
"<p> Actif : " + actifVal + "</p>" +
bloc_to_print +
"</div>"
);

docPDF.save(nomFichier);
})


Et la librairie


<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
0
Petite mise à jour. Maintenant je peux utiliser la libraire jsPDF. Il me manquait les installations nécessaire.
Le pdf est bien créee, et les premières lignes sont biens ajoutés. Seulement le bloc principal que j'avais mis dans la variable "bloc_to_print" ne s'affiche pas dans le pdf. Ça m'affiche [object object] à la place.


Merci de votre aide !
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
3 déc. 2021 à 12:01
Actuellement tu utilises le code
 doc.fromHTML(
        "<h1>Formulaire</h1>" +
        "<h2 style='width: 100%; text-align: center;'>" + "Formulaire " + "</h2>" +
        "<div>" +
        "<p> Nom : " + $("#Nom").val() + " </p>" +
        "<p> Description : " + $("#Description").val() + " </p>" +
        "<p> Actif : " + actifVal + "</p>" +
        bloc_to_print +
        "</div>"
    );


avec : bloc_to_print le contenu HTML d'en élément de ta page....

Par contre, si tu as dedans des input, des select, des boutons ... il faut, comme pour tes champs "nom", "description", "actifVal", récupérer leur contenu pour les insérer dans ce que tu veux imprimer...
0
Le problème avec le bloc "bloc_to_print" est que c'est un formulaire dynamique. En fait, c'est l'utilisateur lui même qui crée son formulaire, ensuite visualise puis télécharge ou imprime à partir d'un bouton le formulaire.
Donc on ne peux pas savoir à l'avance le contenu de "bloc_to_print". Avec la fonction print () j'arrive à imprimer comme il se doit, mais je ne trouve pas un moyen de faire le téléchargement
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
Modifié le 3 déc. 2021 à 12:25
La fonction "print" lance l'impression à travers le gestionnaire d'imprimante de l'ordinateur.

Pour générer le formulaire en PDF et le proposer au téléchargement, tu n'as pas d'autres choix que de générer le rendu toi même...

Si le formulaire est dynamique, il te suffit de boucler sur tous les éléments qu'il contient pour en récupérer le contenu..
par exemple :

$('input, select').each(
    function(index){  
        var input = $(this);
        alert('Type: ' + input.attr('type') + 'Name: ' + input.attr('name') + 'Value: ' + input.val());
    }
);
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Merci ! Je viens de l'essayer.
Il me semble que les inputs sont ignorés par jsPDF. Même quand j'entre manuellement le input, il n'apparaît pas dans le pdf. Idem pour le css et bootstrap. De ce que j'ai compris il ne convertit que les textes dans le fichier. Les tables, input et css sont ignorés lors de la création.

Donc on ne peut pas auto-télécharger le pdf qu'on doit imprimer ?
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
3 déc. 2021 à 15:24
D'où l'exemple que je t'ai donné...( qu'il faut adapter bien entendu ) pour aller récupérer le CONTENU de tes inputs ( le "VALUE" ) pour l'inclure dans la STRING que tu envoies à ta lib..
0
D'accord. Je ne pense pas qu'on se comprends. En réalité, je ne souhaites pas récupérer le contenu du input. Je souhaites afficher le input lui-même. Afficher exactement le formulaire que l'utilisateur voit à l'écran avec les labels, boutons et les champs de texte.

Quand je debug, on voit que le code pour créer les champs de textes avec les valeurs souhaitées sont là. Mais lors du téléchargement, ils sont ignorés car jsPDF n'affiche que du texte dans le pdf.
0
Petite mise à jour.
J'ai pu résoudre le problème en utilisant html2canvas, qui va faire une capture d'écran du div ou de la page souhaitée, ensuite l'ajoute dans le pdf.

Merci à tous pour votre aide !
0