La Création De Microsoft Word (.docx) documents en Ruby
13 réponses
comme il a été noté, il ne semble pas y avoir de bibliothèques pour manipuler les documents XML ouverts dans Ruby, mais OpenXML Developer possède une documentation complète sur le format des documents XML ouverts.
Si vous voulez 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 "modèle" DOCX qui contient toutes les parties et la structure de l'arbre que vous voulez envoyer à all
utilisateurs (sans contenu réel), il suffit alors de créer de nouvelles pièces (ou de modifier des pièces existantes) qui contiennent le contenu spécifique à l'utilisateur que vous voulez et de l'injecter dans le ZIP (fichier DOCX) avant de l'Envoyer à l'utilisateur.
Par exemple: Vous pourriez avoir document-template.xml
qui contient Dear [USER-PLACEHOLDER]:. Lorsqu'un utilisateur demande le document, vous remplacez [USER-PLACEHOLDER]
avec le nom de l'utilisateur, puis ajouter le résultant document.xml
your-template.docx
ZIP fichier (qui contiendrait toutes les images et autres parties que vous voulez dans le document Word) et envoyer ce document résultant à l'utilisateur.
Notez que si vous renommez un .docx
le fichier .zip
il est trivial d'explorer la structure et le format des pièces à l'intérieur. Vous pouvez supprimer ou remplacer des images ou d'autres parties très facilement avec n'importe quels outils de manipulation de ZIP ou programmatically avec le code.
générer un tout nouveau document Word avec un contenu entièrement personnalisé à partir de XML brut ce serait très difficile sans accès à une API pour faciliter le travail. Si vous avez vraiment besoin de faire cela, vous pourriez envisager d'installer Mono, puis utiliser VB.NET, C # or IronRuby pour créer vos documents XML ouverts en utilisant le Open XML Format SDK 1.0. Puisque vous avez juste à être à l'aide de la Microsoft.Bureau.DocumentFormat.OpenXml.L'Emballage De L'Espace De Noms pour manipuler les documents XML ouverts, cela devrait fonctionner correctement en Mono, ce qui semble supporter tout ce dont le SDK a besoin.
je sais si vous servez un document HTML comme document word avec le .doc extension, il s'ouvrira dans le mot très bien. Il suffit de ne pas faire quelque chose de compliqué.
Edit: voici un exemple d'utilisation de Classic ASP. http://www.aspdev.org/asp/asp-export-word/
Vous pouvez utiliser Apache POI. Il est écrit en Java, mais intègre avec Ruby comme extension
C'est une vieille question, mais il y a une nouvelle réponse. Si vous souhaitez transformer un HTML doc en un mot (docx) doc, utilisez simplement le 'htmltoword' gem:
https://github.com/nickfrandsen/htmltoword
Je ne sais pas pourquoi il y a eu glissement de réponse et tout le monde a commencé à poster des solutions de templating, mais cela répond à la question de L'OP. Comme la crevette, sauf le mot au lieu du PDF.
mise à jour:
Il y a aussi pandoc et un conteneur API pour pandoc appelé docverter. Les deux ont des installations un peu compliquées puisque pandoc est une bibliothèque de haskell.
peut-être que cette pierre est intéressante pour vous.
https://github.com/trade-informatics/caracal/
c'est comme la crevette mais avec docx.
C'est une façon Doccy (doccyapp.com) est une api qui ne fonctionne tout simplement celui que vous pouvez utiliser. Prend en charge docx, odt et les pages et convertit en PDF ainsi si vous aimez
en utilisant une technique très similaire à celle suggérée par Grant Wagner, j'ai créé un Ruby html to word gem qui devrait vous permettre de facilement produire des fichiers Word docx à 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"
end
end
end
J'espère que vous le trouverez utile. Si vous avez des problèmes avec elle, n'hésitez pas à ouvrir un github question.
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)
Démonstration de la bibliothèque
Vous pouvez aussi l'utiliser dans la ligne de commande:
npm install docxtemplater -g
docxtemplater <configFile>
----config.docxFile: The input file in docx format
----config.outputFile: The outputfile of the document
suite à la réponse de Grant, vous pouvez également envoyer à Word un fichier "Flat OPC", qui est essentiellement le fichier docx décompressé et concaténé pour créer un seul fichier xml. De cette façon, vous pouvez remplacer [user-PLACEHOLDER] dans un fichier et vous en servir (c.-à-d. pas de fermeture éclair ou de décompression).
si quelqu'un est encore en train de regarder ceci, ce message 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 courez sur Windows, Bien sûr, c'est une question de WIN32OLE et de douleur avec le mot objets COM.
les Chances sont que votre portion d'un *nix environnement. Word 2007 utilise le "Microsoft Office Open XML " format (*.docx) qui peut être ouvert en utilisant le compatibilité pack from Microsoft.
certaines des applications de bureau les plus récentes (2002/XP et 2003 au moins) avaient leurs propres formats XML qui peut également être utilisables.
Je n'ai pas connaissance d'outils Ruby pour faciliter le processus, malheureusement.
si cela peut être rendu acceptable, je pense que je serais enclin à suivre la route du fichier-html renommé. Je viens de sauvegarder un document en HTML à partir de WordXP, renommé en a.doc et l'a ouvert 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. Malheureusement je ne pouvais pas manipuler le xml parce que mes clients devraient eux-mêmes remplir des gabarits. Et faire cela n'est pas toujours possible (par exemple, office for mac ne le permet pas).
comme solution à ce problème, j'ai fait un simple gem, qui peut être utilisé comme un modèle de document rtf avec Ruby intégré:https://github.com/eicca/rtf-templater
je l'ai testé et il fonctionne bien pour remplir les rapports et les document. Cependant, le formatage affiche mal pour les boucles et les conditions complexes.