web-dev-qa-db-fra.com

Approche la plus utilisée pour générer un rapport PDF (JavaScript, node.js)?

Quelqu'un qui a travaillé sur quelque chose comme ça peut-il décrire le processus général? Je suis très confus en ce moment. Par rapport, je veux dire un document visuellement attrayant avec logo, tableaux, en-têtes et pieds de page, et les données seront récupérées dynamiquement.

Les approches que j'ai examinées sont les suivantes:

  1. Utilisez une bibliothèque côté serveur (module node.js) qui génère le PDF. Envoyez la représentation sous forme de réponse avec Content-Type: application/pdf. Problème: j'ai choisi PDFKit, mais cela ne fonctionne pas et aucun contenu n'apparaît. Il utilise PDF 1.3, qui est ancien.

  2. Générer PDF côté client. Problème: la bibliothèque la plus populaire semble être jsPDF, mais elle n'est pas très capable de produire des documents d'aspect sophistiqué.

  3. Écrivez le modèle en PDF code source et remplissez les données côté serveur. Problème: L'encodage est bizarre, par exemple si je fais juste doc.text("1"), beaucoup de caractères méconnaissables n'apparaissent que pour la chaîne "1". Je suis très confus à ce sujet.

Enfin, ce sera super utile si quelqu'un fournit un lien qui peut m'aider à comprendre l'encodage! C'est super déroutant pour moi.

Toute expérience avec des tâches similaires est très appréciée!

17
Erica Xu

Je ne l'ai pas fait personnellement, mais la première chose que j'essaierais serait:

  1. Côté serveur, créez dynamiquement le document HTML et CSS appropriés
  2. Utilisez phantomJS pour rendre ce document
  3. Dites à phantomJS de convertir ce document en PDF, enregistré dans un fichier temporaire
  4. Renvoyez le PDF comme réponse HTTP en écrivant le fichier temp PDF dans le corps de la réponse)
  5. Supprimer le fichier temporaire

Si vous rencontrez des difficultés avec le type de contenu, la disposition du contenu, etc., vous ne devriez pas vous en soucier si vous avez un fichier pdf valide sur le disque et écrivez simplement ces données dans la réponse HTTP. Avec les bons en-têtes, vous devriez être en mesure de demander au navigateur d'afficher le PDF ou de le traiter comme un fichier à enregistrer en téléchargement.

17
Peter Lyons

En tant que membre de l'équipe jsreport, je lui donnerais une chance.

jsreport la plate-forme fournit plusieurs façons de générer des rapports pdf. Le plus commun inclus est de transformer le html en pdf en utilisant phantomjs. jsreport compilera et restituera également les guidons ou les modèles HTML jsrender si cela est spécifié, il peut incorporer des images, ajouter des en-têtes/pieds de page, exécuter des javascripts personnalisés et plus encore.

Vous pouvez jouer avec l'exemple "Hello World Phantom Pdf" et voir les options dont vous disposez https://playground.jsreport.net

Lorsque vous avez fini de jouer, vous pouvez utiliser jsreport online ou télécharger et installer jsreport server pour votre entreprise. Ensuite, vous êtes prêt à appeler son REST API et à générer des rapports.

Plus à votre question

  • jsreport fournira le type de contenu correct dans la réponse pour pdf ou html. Vous pouvez simplement laisser le navigateur afficher le résultat
  • les données peuvent être envoyées à jsreport api ou récupérées par un script personnalisé
10
Jan Blaha

Je ne sais pas quelle est l'approche la plus courante, mais personnellement, j'aime créer un modèle HTML, le remplir dans mon code côté serveur, puis utiliser wkhtmltopdf pour convertir le HTML en PDF. Si vous utilisez .NET, vous devriez vérifier WkHtmlToXSharp (qui est un wrapper .NET pour wkhtmltopdf.)

3
AlliterativeAlice