Réponses:
Je viens d'écrire une bibliothèque appelée jsPDF qui génère des PDF en utilisant uniquement Javascript. Il est encore très jeune et j'ajouterai bientôt des fonctionnalités et des corrections de bugs. Vous avez également quelques idées de solutions de contournement dans les navigateurs qui ne prennent pas en charge les URI de données. Il est sous licence libérale MIT.
Je suis tombé sur cette question avant de commencer à l'écrire et j'ai pensé revenir et vous le faire savoir :)
Exemple de création d'un fichier PDF "Hello World".
// Default export is a4 paper, portrait, using milimeters for units
var doc = new jsPDF()
doc.text('Hello world!', 10, 10)
doc.save('a4.pdf')
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.5/jspdf.debug.js"></script>
Une autre bibliothèque javascript qui mérite d'être mentionnée est pdfmake .
La prise en charge du navigateur ne semble pas être aussi solide que jsPDF, ni semble-t-il y avoir une option pour les formes, mais les options de mise en forme du texte sont plus avancées que les options actuellement disponibles dans jsPDF.
Je maintiens PDFKit , qui alimente également pdfmake (déjà mentionné ici). Il fonctionne à la fois dans Node et dans le navigateur, et prend en charge un tas de choses que les autres bibliothèques ne font pas:
Consultez http://pdfkit.org/ pour un tutoriel complet pour voir par vous-même ce que PDFKit peut faire. Et pour un exemple des types de documents qui peuvent être produits, consultez les documents en tant que PDF généré à partir de certains fichiers Markdown à l'aide de PDFKit lui-même: http://pdfkit.org/docs/guide.pdf .
Vous pouvez également l'essayer de manière interactive dans le navigateur ici: http://pdfkit.org/demo/browser.html .
Un autre projet intéressant est texlive.js .
Il vous permet de compiler (La) TeX en PDF dans le navigateur.
Vous pouvez utiliser ce service gratuit en ajoutant un lien qui crée un pdf à partir de n'importe quelle URL (par exemple http://www.phys.org ):
Même si vous pouviez générer le PDF en mémoire en JavaScript, vous auriez toujours la question de savoir comment transférer ces données à l'utilisateur. Il est difficile pour JavaScript de simplement envoyer un fichier à l'utilisateur.
Pour envoyer le fichier à l'utilisateur, vous voudriez faire une soumission de serveur afin que le navigateur affiche la boîte de dialogue d'enregistrement.
Cela dit, il n'est vraiment pas trop difficile de générer des PDF. Il suffit de lire les spécifications.