Existe-t-il un moyen facile de créer des documents Word (.docx) dans une application Ruby? En fait, dans mon cas, c'est une application Rails servie depuis un serveur Linux) .
Un bijou similaire à Prawn mais pour DOCX au lieu de PDF serait génial!
Comme cela a été noté, il ne semble pas y avoir de bibliothèques pour manipuler les documents Open XML dans Ruby, mais OpenXML Developer possède une documentation complète sur le format des documents Open XML.
Si vous voulez envoyer une copie d'un document standard (comme une lettre type) personnalisée pour chaque utilisateur, cela devrait être assez simple étant donné qu'un DOCX est un fichier Zip qui contient diverses parties dans une hiérarchie de répertoires. Avoir un "modèle" DOCX qui contient toutes les parties et la structure arborescente que vous souhaitez envoyer aux utilisateurs de all
(sans contenu réel), puis créez simplement de nouvelles pièces (ou modifiez des pièces existantes) qui contiennent les spécificités de l'utilisateur le contenu que vous souhaitez 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 [USER-PLACEHOLDER]: . Lorsqu'un utilisateur demande le document, vous remplacez [USER-PLACEHOLDER]
Par le nom de l'utilisateur, puis ajoutez le document.xml
Résultant au fichier Zip your-template.docx
(Qui contiendrait toutes les images et autres parties que vous voulez dans le document Word) et envoyez ce document résultant à l'utilisateur.
Notez que si vous renommez un fichier .docx
En .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 quel outil de manipulation Zip ou par programme avec du code.
La génération d'un tout nouveau document Word avec un contenu entièrement personnalisé à partir de XML brut serait très difficile sans accès à une API pour faciliter la tâche. 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 en utilisant Ouvrir SDK au format XML 1. . Étant donné que vous utilisez simplement Microsoft.Office.DocumentFormat.OpenXml.Packaging Namespace pour manipuler les documents Open XML, cela devrait fonctionner correctement en Mono, qui semble prendre en charge tout ce dont le SDK a besoin.
Vous pouvez utiliser Apache POI . Il est écrit en Java, mais s'intègre avec Ruby en tant qu'extension
C'est une vieille question mais il y a une nouvelle réponse. Si vous souhaitez transformer un document HTML en un document Word (docx), utilisez simplement le joyau 'htmltoword':
https://github.com/nickfrandsen/htmltoword
Je ne sais pas pourquoi il y a eu un fluage de réponse et tout le monde a commencé à publier des solutions de modèles, mais cela répond à la question du PO. Tout comme Prawn, sauf Word au lieu de PDF.
MISE À JOUR:
Il y a aussi pandoc et un wrapper API pour pandoc appelé docverter . Les deux ont des installations légèrement compliquées car pandoc est une bibliothèque haskell.
Peut-être que ce joyau est intéressant pour vous.
https://github.com/trade-informatics/caracal/
C'est comme la crevette mais avec docx.
Je sais que si vous servez un document HTML en tant que document Word avec l'extension .doc, il s'ouvrira très bien dans Word. Ne fais rien d'extraordinaire.
Edit: Voici un exemple utilisant ASP classique. http://www.aspdev.org/asp/asp-export-Word/
C'est une façon dont Doccy ( doccyapp.com ) a une API qui fait juste ce que vous pouvez utiliser. Prend en charge docx, odt et pages et convertit en PDF également si vous le souhaitez
Divulgation: je suis le chef de file du projet docxtemplater.
Je sais que vous recherchez une solution Ruby, mais parce que toutes les autres solutions ne vous disent que comment le faire globalement, sans vous donner une bibliothèque qui fait exactement ce que vous voulez, voici une solution basée sur sur JS ou NodeJS (fonctionne dans les deux)
Vous pouvez également 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
En utilisant une technique très similaire à celle suggérée par Grant Wagner, j'ai créé un Ruby html vers Word gem qui devrait vous permettre de sortir facilement des fichiers docx Word à partir de votre Ruby = app. Vous pouvez le vérifier sur http://github.com/nickfrandsen/htmltoword - Passez-lui simplement une chaîne html et il créera un fichier docx Word correspondant.
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, n'hésitez pas à ouvrir un problème de github.
Suite à la réponse de Grant, vous pouvez également envoyer à Word un fichier "Flat OPC", qui est essentiellement le 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 en finir avec lui (c'est-à-dire sans zipper ou décompresser).
Si quelqu'un regarde toujours cela, cet article 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 utilisez Windows, bien sûr, c'est une question de WIN32OLE et de problèmes avec les objets Word COM.
Il y a de fortes chances pour que votre portion à partir d'un environnement * nix, cependant. Word 2007 utilise le format " Microsoft Office Open XML " (* .docx) qui peut être ouvert à l'aide du format approprié pack de compatibilité de Microsoft .
Certaines des applications Office les plus récentes (2002/XP et 2003 au moins) avaient leurs propres formats XML qui peuvent également être utilisables.
Je ne connais aucun outil Ruby pour rendre le processus plus facile, malheureusement.
Si cela peut être rendu acceptable, je pense que je serais enclin à descendre la route des fichiers renommés-html. Je viens d'enregistrer un document au format HTML à partir de WordXP, de le renommer en .doc et de l'ouvrir 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 n'ai pas pu manipuler le xml car mes clients devraient eux-mêmes remplir des modèles. Et ce n'est pas toujours possible (par exemple, Office pour Mac ne le permet pas).
Pour résoudre ce problème, j'ai créé une gemme simple, qui peut être utilisée comme modèle de document rtf avec Ruby intégré: https://github.com/eicca/rtf-templater
Je l'ai testé et cela fonctionne bien pour remplir des rapports et des documents. Cependant, le formatage s'affiche mal pour les boucles et les conditions complexes.