La Création De Microsoft Word (.docx) les documents en Ruby
Est-il un moyen facile de créer des documents Word (.docx) dans une application Ruby? En fait, dans mon cas il s'agit d'une application Rails servi à partir d'un serveur Linux.
Un bijou similaire à Crevette mais pour DOCX au lieu de PDF serait génial!
Comme il a été noté, il ne semble pas du tout bibliothèques de manipuler des documents Open XML en Ruby, mais OpenXML Développeur a une documentation complète sur le format des documents Open XML.
Si ce que vous voulez est d'envoyer une copie d'un document standard (comme une lettre) adaptés à chaque utilisateur, il devrait être assez simple étant donné qu'un DOCX est un fichier ZIP qui contient plusieurs parties dans une hiérarchie de répertoires. Avoir un DOCX "modèle" qui contient toutes les pièces et la structure de l'arbre que vous souhaitez envoyer à all utilisateurs (sans contenu réel), puis il suffit de créer de nouveaux (ou modifier) des morceaux qui contiennent de l'utilisateur du contenu spécifique que vous voulez et à l'injecter dans le ZIP (fichier DOCX) avant de l'envoyer à l'utilisateur.
Par exemple: Vous pourriez avoir document-template.xml qui contient Cher [UTILISATEUR-espace RÉSERVÉ]:. Lorsqu'un utilisateur demande le document, vous remplacez [USER-PLACEHOLDER] avec le nom de l'utilisateur, puis ajouter le résultant document.xml à la your-template.docx fichier ZIP (qui contient toutes les images et d'autres parties que vous voulez dans le document Word) et d'envoyer ce document résultant de l'utilisateur.
Notez que si vous renommez un .docx fichier à .zip il est trivial d'explorer la structure et le format des pièces à l'intérieur. Vous pouvez retirer ou remplacer des images ou d'autres pièces très facilement avec n'importe quel ZIP outils de manipulation ou par programmation avec code.
La génération d'un Mot nouveau document avec tout le contenu personnalisé à partir de matières XML serait très difficile sans l'accès à une API pour rendre le travail plus facile. Si vous avez vraiment besoin de le faire, vous pouvez envisager d'installer Mono, puis utilisez VB.NET, C# ou IronRuby pour créer vos documents Open XML à l'aide de la Format Open XML SDK 1.0. Puisque vous avez juste à être à l'aide de la Microsoft.Bureau de.DocumentFormat.OpenXml.L'Emballage De L'Espace De Noms pour manipuler des documents Open XML, il doit travailler bien en Mono, ce qui semble à l'appui de tout le SDK exige.
J'ai écrit un petit utilitaire pour le tranchage est quelque peu complexe docx modèles et la construction d'un document personnalisé à l'aide de l'tranches: github.com/bagilevi/docx_builder
nice toujours essayer d'obtenir ma tête autour d'une table de boucle à l'aide de cette méthode
J'ai ajouté une autre option pour générer un fichier docx à partir d'un modèle github.com/jawspeak/ruby-docx-templater Il utilise zipruby et des processus en mémoire. (En fait, il utilise un fork de la version qui ne sont pas en collision avec rubyzip du Zip:: module).
Je sais que si vous servez un document HTML dans un document word avec le .doc extension, il va ouvrir dans Word amende juste. Il suffit de ne pas faire quelque chose de compliqué.
Merci, mais cela sonne un peu comme un sale hack, n'est-ce pas? 🙂 D'ailleurs que: Quelles sont les préoccupations en matière de sécurité lors de l'utilisation de RTF?
C'est une vieille question, mais il y a une nouvelle réponse. Si vous souhaitez convertir HTML en doc en Word (docx) doc, il suffit d'utiliser le "htmltoword" gem:
Je ne suis pas sûr de savoir pourquoi il y avait de la réponse de fluage et tout le monde a commencé à poster des gabarits des solutions, mais cela répond à l'OP de la question. Tout comme la Crevette, à l'exception de Word au lieu de PDF.
Mise à JOUR:
Il y a aussi pandoc et une API wrapper pour pandoc appelé docverter. Les deux ont un peu compliqué installe depuis pandoc est une bibliothèque haskell.
J'ai utilisé htmltoword et ne peux pas le recommander. Il ne peut gérer que les paragraphes et les en-têtes. Si vous voulez puissant de conversion de documents dans votre application Ruby, je vous suggère de Pandoc, si un rubis wrapper comme docverter ou pandoc-ruby. PDF conversion nécessite de LaTeX bibliothèques que - c'est près de 2 go de bibliothèques. Fair warning 🙂
C'est une façon Doccy (doccyapp.com) a une api qui ne fonctionne tout simplement celui que vous pouvez utiliser. Prend en charge docx, odt et les pages et les convertit au format PDF si vous le souhaitez
À l'aide d'une technique très similaire à celui qui est proposé par Grant Wagner, j'ai créé un Ruby, html to word bijou qui devrait vous permettre de facilement de sortie Word docx fichiers à partir de votre application ruby. Vous pouvez le vérifier sur http://github.com/nickfrandsen/htmltoword - il suffit de passer une chaîne html et il va créer un mot correspondant de fichier docx.
def show
respond_to do|format|
format.docx do
file =Htmltoword::Document.create params[:docx_html_source],"file_name.docx"
send_file file.path,:disposition =>"attachment"endendend
Espère que vous le trouverez utile. Si vous avez des problèmes avec elle, n'hésitez pas à ouvrir un github question.
Un grand merci, vous avez sauvé ma vie à faire ce Joyau @Nick...
Une fois que j'utilise create_and_save méthode qu'Il a sauvé à donné le chemin d'accès au fichier compressé, mais incapable de le trouver".docx format de fichier ..Veuillez en Informer !!!
Ne ce joyau vous permettent de contrôler l'orientation de la page?
Divulgation: je suis le leader de la docxtemplater projet.
Je sais que vous êtes à la recherche d'un rubis solution, mais parce que toutes les autres solutions que de vous dire comment le faire à l'échelle mondiale, sans vous donner une bibliothèque qui fait exactement ce que vous voulez, voici une solution à base de JS ou NodeJS (fonctionne dans les deux)
Vous pouvez aussi l'utiliser en ligne de commande:
npm install docxtemplater -g
docxtemplater <configFile>----config.docxFile:The input file in docx format
----config.outputFile:The outputfile of the document
donner un js exemple pour un rubis question est de mauvais goût.
Il y a également une interface de ligne de commande, alors peut-être que cela pourrait être utile pour les projets à l'aide de node.js
Plus de Subvention de la réponse, vous pouvez également envoyer un Mot "Plat " OPC" du fichier, qui est essentiellement le docx décompressé et concaténées pour créer un seul fichier xml. De cette façon, vous pouvez remplacer [UTILISATEUR-espace RÉSERVÉ] dans un fichier, et être fait avec elle (c'est à dire pas de compression ou de décompression).
Certaines des plus récentes applications de Bureau (2002/XP et 2003, au moins) avait leurs propres formats XML qui peut également être utilisables.
Je ne suis pas au courant de tout Ruby outils pour faciliter le processus, malheureusement.
Si elle peut être acceptable, je pense que je serais enclin à aller en bas de la renommée-fichier html itinéraire. Je venez d'enregistrer un document au format HTML à partir de WordXP, renommé à un .doc et l'ouvrit sans problème.
Le renommé fichier html parcours que vous décrivez, cela ne fonctionnerait pas pour mon cas. Je ne peux pas pré-construire les fichiers html dans un bureau de l'application word et de le renommer .doc et si je fais cela avec html-fichiers sur mon serveur, ils ne sont pas reconnus par IE doc-files.
Je ne suis pas fan de Win32OLE qu'il utilise le mot moteur de manipuler le fichier.
J'ai rencontré le même problème. Je ne pourrais malheureusement pas manipuler le xml, car mes clients doivent eux-mêmes à remplir dans les modèles. Et pour ce faire n'est pas toujours possible (par exemple, office pour mac ne le permet pas).
Comme une solution à ce problème, j'ai fait un simple bijou, qui peut être utilisé comme un document rtf modèle avec embedded ruby: https://github.com/eicca/rtf-templater
Je l'ai testé et il fonctionne bien pour remplir les rapports et les documents. Toutefois, le formatage de mal les affiche de complexe de boucles et de conditions.
Comme il a été noté, il ne semble pas du tout bibliothèques de manipuler des documents Open XML en Ruby, mais OpenXML Développeur a une documentation complète sur le format des documents Open XML.
Si ce que vous voulez est d'envoyer une copie d'un document standard (comme une lettre) adaptés à chaque utilisateur, il devrait être assez simple étant donné qu'un DOCX est un fichier ZIP qui contient plusieurs parties dans une hiérarchie de répertoires. Avoir un DOCX "modèle" qui contient toutes les pièces et la structure de l'arbre que vous souhaitez envoyer à
all
utilisateurs (sans contenu réel), puis il suffit de créer de nouveaux (ou modifier) des morceaux qui contiennent de l'utilisateur du contenu spécifique que vous voulez et à l'injecter dans le ZIP (fichier DOCX) avant de l'envoyer à l'utilisateur.Par exemple: Vous pourriez avoir
document-template.xml
qui contient Cher [UTILISATEUR-espace RÉSERVÉ]:. Lorsqu'un utilisateur demande le document, vous remplacez[USER-PLACEHOLDER]
avec le nom de l'utilisateur, puis ajouter le résultantdocument.xml
à layour-template.docx
fichier ZIP (qui contient toutes les images et d'autres parties que vous voulez dans le document Word) et d'envoyer ce document résultant de l'utilisateur.Notez que si vous renommez un
.docx
fichier à.zip
il est trivial d'explorer la structure et le format des pièces à l'intérieur. Vous pouvez retirer ou remplacer des images ou d'autres pièces très facilement avec n'importe quel ZIP outils de manipulation ou par programmation avec code.La génération d'un Mot nouveau document avec tout le contenu personnalisé à partir de matières XML serait très difficile sans l'accès à une API pour rendre le travail plus facile. Si vous avez vraiment besoin de le faire, vous pouvez envisager d'installer Mono, puis utilisez VB.NET, C# ou IronRuby pour créer vos documents Open XML à l'aide de la Format Open XML SDK 1.0. Puisque vous avez juste à être à l'aide de la Microsoft.Bureau de.DocumentFormat.OpenXml.L'Emballage De L'Espace De Noms pour manipuler des documents Open XML, il doit travailler bien en Mono, ce qui semble à l'appui de tout le SDK exige.
Vous pouvez utiliser Apache POI. Il est écrit en Java, mais s'intègre avec Ruby comme une extension
Je sais que si vous servez un document HTML dans un document word avec le .doc extension, il va ouvrir dans Word amende juste. Il suffit de ne pas faire quelque chose de compliqué.
Edit: Voici un exemple d'utilisation de l'ASP classique. http://www.aspdev.org/asp/asp-export-word/
C'est une vieille question, mais il y a une nouvelle réponse. Si vous souhaitez convertir HTML en doc en Word (docx) doc, il suffit d'utiliser le "htmltoword" gem:
https://github.com/nickfrandsen/htmltoword
Je ne suis pas sûr de savoir pourquoi il y avait de la réponse de fluage et tout le monde a commencé à poster des gabarits des solutions, mais cela répond à l'OP de la question. Tout comme la Crevette, à l'exception de Word au lieu de PDF.
Mise à JOUR:
Il y a aussi pandoc et une API wrapper pour pandoc appelé docverter. Les deux ont un peu compliqué installe depuis pandoc est une bibliothèque haskell.
htmltoword
et ne peux pas le recommander. Il ne peut gérer que les paragraphes et les en-têtes. Si vous voulez puissant de conversion de documents dans votre application Ruby, je vous suggère de Pandoc, si un rubis wrapper comme docverter ou pandoc-ruby. PDF conversion nécessite de LaTeX bibliothèques que - c'est près de 2 go de bibliothèques. Fair warning 🙂Peut-être que ce petit bijou est intéressant pour vous.
https://github.com/trade-informatics/caracal/
Comme la crevette, mais avec docx.
C'est une façon Doccy (doccyapp.com) a une api qui ne fonctionne tout simplement celui que vous pouvez utiliser. Prend en charge docx, odt et les pages et les convertit au format PDF si vous le souhaitez
À l'aide d'une technique très similaire à celui qui est proposé par Grant Wagner, j'ai créé un Ruby, html to word bijou qui devrait vous permettre de facilement de sortie Word docx fichiers à partir de votre application ruby. Vous pouvez le vérifier sur http://github.com/nickfrandsen/htmltoword - il suffit de passer une chaîne html et il va créer un mot correspondant de fichier docx.
Espère que vous le trouverez utile. Si vous avez des problèmes avec elle, n'hésitez pas à ouvrir un github question.
create_and_save
méthode qu'Il a sauvé à donné le chemin d'accès au fichier compressé, mais incapable de le trouver".docx format de fichier ..Veuillez en Informer !!!Divulgation: je suis le leader de la docxtemplater projet.
Je sais que vous êtes à la recherche d'un rubis solution, mais parce que toutes les autres solutions que de vous dire comment le faire à l'échelle mondiale, sans vous donner une bibliothèque qui fait exactement ce que vous voulez, voici une solution à base de JS ou NodeJS (fonctionne dans les deux)
DocxTemplater Bibliothèque
Démonstration de la bibliothèque
Vous pouvez aussi l'utiliser en ligne de commande:
Plus de Subvention de la réponse, vous pouvez également envoyer un Mot "Plat " OPC" du fichier, qui est essentiellement le docx décompressé et concaténées pour créer un seul fichier xml. De cette façon, vous pouvez remplacer [UTILISATEUR-espace RÉSERVÉ] dans un fichier, et être fait avec elle (c'est à dire pas de compression ou de décompression).
Si quelqu'un est toujours à la recherche à de cette, ce post explique comment utiliser une source de données XML. Cela fonctionne bien pour moi.
http://seroter.wordpress.com/2009/12/23/populating-word-2007-templates-through-open-xml/
Si vous êtes en cours d'exécution sur Windows, bien sûr, c'est une question de WIN32OLE et de la douleur avec la Parole des objets COM.
Les Chances sont que votre portion d'un *nix environnement, cependant. Word 2007 utilise le "Microsoft Office Open XML" format (*.docx) qui peut être ouvert à l'aide de la pack de compatibilité Microsoft.
Certaines des plus récentes applications de Bureau (2002/XP et 2003, au moins) avait leurs propres formats XML qui peut également être utilisables.
Je ne suis pas au courant de tout Ruby outils pour faciliter le processus, malheureusement.
Si elle peut être acceptable, je pense que je serais enclin à aller en bas de la renommée-fichier html itinéraire. Je venez d'enregistrer un document au format HTML à partir de WordXP, renommé à un .doc et l'ouvrit sans problème.
Découvrez ce dépôt github: https://github.com/jawspeak/ruby-docx-templater
Il vous permet de créer un document à partir d'un modèle word.
J'ai rencontré le même problème. Je ne pourrais malheureusement pas manipuler le xml, car mes clients doivent eux-mêmes à remplir dans les modèles. Et pour ce faire n'est pas toujours possible (par exemple, office pour mac ne le permet pas).
Comme une solution à ce problème, j'ai fait un simple bijou, qui peut être utilisé comme un document rtf modèle avec embedded ruby: https://github.com/eicca/rtf-templater
Je l'ai testé et il fonctionne bien pour remplir les rapports et les documents. Toutefois, le formatage de mal les affiche de complexe de boucles et de conditions.