HTML5 vers PDF côté serveur
Je suis à la recherche d'une solution pour générer un PDF à partir d'un HTML5/CSS3 document, serverside.
Je sais il y a plein de solution pour la création d'un PDF (comme FOP, iText...), mais j'en ai besoin pour s'assurer qu'il look 100% la même que celle de la page HTML. Donc, je ne veux pas créer un fichier PDF à l'élément par élément comme FOP ou iText.
En fait, quelque chose existe parce que c'est ce que vous faites lorsque vous imprimez au format PDF à partir de votre Navigateur.
Idéalement, la solution doit intégrer un navigateur web (moteur de webkit ou gecko). J'ai essayé wkHtmlToPdf... mais le résultat n'est pas bon du tout (le HTML5 canvas n'est même pas imprimé...)
Si quelqu'un a une idée de solution, gratuit ou pas, n'importe quelle langue... je les apprécie BEAUCOUP!
Merci!!
source d'informationauteur Olivier
Vous devez vous connecter pour publier un commentaire.
J'ai utilisé PhantomJS pour générer des images png à partir de pages web et il peut produire des PDF ainsi que la qualité est bonne en général. La propriété est appelé capture d'écran et décrit ici. Les prises en charge sont les formats PNG, JPEG, GIF et PDF.
Lors de la conversion au format PDF, les textes des pages de retenir que les textes.
Après l'essai de quelques autres bibliothèques ou des programmes, trouvé PhantomJS la plus parfaite solution. PhantomJS utilise WebKit, une vraie mise en page et le moteur de rendu.
Quelques exemples sont dans https://github.com/ariya/phantomjs/wiki/Examples. Dans la section Rendu/tramage il y est mentionné le script suivant qui vous aide dans le processus:
PhantomJS QuicStart Guide dit:
La production de PDF de sortie est possible, par exemple, d'un article de Wikipédia:
ou lors de la création d'imprimante-prêt feuille de triche:
J'ai testé pdf-génération de quelques pages et si la page qui suit les normes, il donne de bons résultats. Le texte est sélectionnable et imprimable de haute qualité, mais sur certaines pages de mise en page en pdf n'est pas le même que dans png. Ci-dessous deux captures d'écran qui sont générés à l'aide de commandes:
J'ai testé aussi http://lab.simurai.com/buttons/. Le format pdf et le format png a été très identiques et ci-dessous est un échantillon de pdf que j'ai tramé à 5641px de large et de recadrer une région de celui-ci. Comme dans le précédent exemple PDF, le texte est sélectionnable dans les PDF et comme vous le voyez, le texte est clair (pas de lisser!).
INSTALLATION
J'ai essayé d'abord d'installer la bibliothèque Qt et PhantomJS sur Centos5 compilation à partir des sources, mais pas de chance. Puis sur Ubuntu 11.10 et le processus est indolore:
J'ai téléchargé http://phantomjs.googlecode.com/files/phantomjs-1.7.0-linux-x86_64.tar.bz2 et extrait à l'aide de
Puis copié phantomjs exécutable bin dir de système:
et phantomjs est prêt à fonctionner.
Si le PDF généré est pas bonne, vous pouvez essayer de mettre à jour Webkit, mais je suppose que le résultat devrait être suffisant. Le PhantomJS a d'excellentes cycle de mise à jour, afin de bugs devrait être corrigé dans un délai raisonnable.
PhantomJS FAQ a également une bonne information de possibilités.
En fonction de la complexité du code HTML, vous pouvez utiliser XmlWorkerqui est un projet de la iText les développeurs et les utilisations de la bibliothèque iText.
Quelle langue utilisez-vous du côté serveur?
La création d'une capture d'écran de la page puis la conversion de l'image en pdf serait probablement vous donner les meilleurs résultats. Il serait montrer la page exactement le même qu'il serait affiché par un navigateur.
Il y a quelques Capture d'écran-comme-un-Service d'outils, comme browshot.com. Jetez un oeil à la API et langues prises en charge.
Ou vous pouvez utiliser votre outil. Pour node.js existe un beau projet sur github.