114 votes

Est-il possible d'enregistrer une page HTML au format PDF en utilisant JavaScript ou jquery ?

Est-il possible d'enregistrer une page HTML au format PDF en utilisant JavaScript ou jquery ?

En détail :

J'ai généré une page HTML qui contient un tableau. Elle comporte un bouton "Enregistrer en PDF". Si l'utilisateur clique sur ce bouton, la page HTML doit être convertie en fichier PDF.

Est-ce possible en utilisant JavaScript ou jquery ?

3 votes

Pour autant que je sache, Javascript ne peut pas créer de documents pdf.

2 votes

De nos jours, beaucoup de gens peuvent imprimer en PDF. On peut donc dire que cette fonctionnalité n'est pas nécessaire.

4 votes

Le PDF est un langage basé sur le texte. Vous auriez du mal à trouver un langage de programmation à partir duquel vous ne pourriez pas le générer.

6voto

Kumar Points 2152

Voici comment je m'y prendrais, c'est une idée mais pas une conception à toute épreuve, vous devez la modifier.

  • L'utilisateur clique sur le bouton "Enregistrer en PDF
  • Le serveur reçoit un appel par ajax
  • Le serveur répond avec une URL pour le PDF généré à l'aide de HTML. J'ai utilisé Apache FOP avec beaucoup de succès.
  • Le js qui traite la réponse ajax fait un location.href pour pointer l'URL envoyée par le JS et dès que cette URL se charge, il envoie le fichier en utilisant l'en-tête content disposition comme pièce jointe forçant l'utilisateur à télécharger le fichier.

3voto

Matej Janovčík Points 1224

Il est beaucoup plus facile et fiable de convertir le html en pdf côté serveur. Nous utilisons Google Puppeteer. Il est bien maintenu avec des wrappers pour n'importe quel langage côté serveur de votre choix. Puppeteer utilise Chrome headless pour générer des captures d'écran et/ou des fichiers PDF. Il vous évitera bien des maux de tête, surtout si vous devez générer des fichiers PDF complexes avec des tableaux, des images, des graphiques, des pages multiples, etc.

https://developers.google.com/web/tools/puppeteer/

1voto

Mark Redman Points 10816

Vous ne pouvez pas le faire sans un composant côté serveur qui génère des PDF.

Autre option/contournement : vous pouvez lancer une impression, puis enregistrer en utilisant un pilote PDF.

1voto

Andre Borges Points 489

Il existe un autre moyen très évident de convertir du HTML en PDf à l'aide de JavaScript : utiliser une API en ligne pour cela. Cela fonctionnera parfaitement si vous n'avez pas besoin d'effectuer la conversion lorsque l'utilisateur est hors ligne.

PdfMage est une option qui dispose d'une API intéressante et propose des comptes gratuits. Je suis sûr que vous pouvez trouver de nombreuses alternatives (par exemple, aquí )

Pour l'API PdfMage, vous auriez quelque chose comme ceci :

 $.ajax({
    url: "https://pdfmage.org/pdf-api/v1/process",
    type: "POST",
    crossDomain: true,
    data: { Html:"<html><body>Hi there!</body></html>" },
    dataType: "json",
    headers: {
        "X-Api-Key": "your-key-here" // not very secure, but a valid option for non-public domains/intranet
    },
    success: function (response) {
        window.location = response.Data.DownloadUrl;
    },
    error: function (xhr, status) {
        alert("error");
    }
});

3 votes

Freehtmltopdf.com ne semble plus exister.

1 votes

PDFMage n'est plus gratuit, malheureusement.

1voto

Wainaina Nik Points 99

J'ai eu un problème similaire, je ne pouvais pas utiliser jspdf car mon ancien code contenait plusieurs tableaux avec plusieurs colspan à l'intérieur. Dans Jspdf, les thad > th doivent correspondre à tbody > tr > td.

J'ai fini par utiliser le paquet html2pdf qui a fonctionné pour moi.

sur votre fichier, ajoutez la bibliothèque

<script src="https://cdnjs.cloudflare.com/ajax/libs/html2pdf.js/0.8.1/html2pdf.bundle.min.js" integrity="sha512-vDKWohFHe2vkVWXHp3tKvIxxXg0pJxeid5eo+UjdjME3DBFBn2F8yWOE0XmiFcFbXxrEOR1JriWEno5Ckpn15A==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

Obtenez le contenu que vous souhaitez sauvegarder au format pdf

var pdf_content = document.getElementById("pdf_body");

Ajouter une option ou une configuration à votre fichier

var options = {
      margin:       1,
      filename:     'isolates.pdf',
      image:        { type: 'jpeg', quality: 0.98 },
      html2canvas:  { scale: 2 },
      jsPDF:        { unit: 'in', format: 'letter', orientation: 'portrait' }
    };

Sauvegarder le fichier

html2pdf(pdf_content, options);

0 votes

Je suis curieux de savoir pourquoi jsPDF n'a pas fonctionné pour vous quand html2pdf s'appuie sur jsPDF ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X