La Création De Microsoft Word (.docx) documents en Ruby

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 Rail servie à partir d'un serveur Linux.

un bijou semblable à Crevette mais DOCX au lieu de PDF serait génial!

44
demandé sur Srathi00 2009-03-30 18:40:57

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.xmlyour-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.

40
répondu Grant Wagner 2009-03-30 17:01:35

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/

7
répondu Daniel A. White 2009-03-30 14:48:40

Vous pouvez utiliser Apache POI. Il est écrit en Java, mais intègre avec Ruby comme extension

6
répondu ykaganovich 2009-03-30 18:38:10

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.

5
répondu Archonic 2014-09-21 18:14:23

peut-être que cette pierre est intéressante pour vous.

https://github.com/trade-informatics/caracal/

c'est comme la crevette mais avec docx.

5
répondu Théo Capdet 2015-07-28 16:39:30

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

4
répondu Michael Cindric 2013-07-23 01:20:12

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.

3
répondu Nick 2013-08-22 14:30:17

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)

Bibliothèque DocxTemplater

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
3
répondu edi9999 2014-02-21 16:25:03

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).

2
répondu JasonPlutext 2009-04-01 22:52:35

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/

2
répondu Amala 2012-01-30 21:21:08

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.

1
répondu Mike Woodhouse 2009-03-30 15:06:09

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.

1
répondu Kieran Andrews 2013-02-07 01:51:47

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.

0
répondu Mikhail D 2012-06-09 13:02:52