50 votes

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

Existe-t-il un moyen simple de créer des documents Word (.docx) dans une application Ruby ? En fait, dans mon cas, il s'agit d'une application Rails servie par un serveur Linux.

Une pierre précieuse semblable à Crevettes mais pour DOCX au lieu du PDF serait génial !

43voto

Grant Wagner Points 14085

Comme on l'a noté, il ne semble pas y avoir de bibliothèques permettant de manipuler des documents Open XML en Ruby, mais Développeur OpenXML possède une documentation complète sur le format des documents Open XML.

Si ce que vous voulez, c'est 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. Disposez d'un "modèle" DOCX contenant toutes les parties et l'arborescence que vous souhaitez envoyer à all (sans contenu réel), il suffit alors de créer de nouveaux éléments (ou de modifier les éléments existants) contenant le contenu spécifique à l'utilisateur que vous souhaitez 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 Cher [USER-PLACEHOLDER] : . Lorsqu'un utilisateur demande le document, vous remplacez [USER-PLACEHOLDER] avec le nom de l'utilisateur, puis ajoutez le résultat de la commande document.xml à la your-template.docx (qui contiendrait toutes les images et autres parties que vous voulez dans le document Word) et envoyez le document résultant à l'utilisateur.

Notez que si vous renommez un .docx pour .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 de manière programmatique avec du code.

Il serait très difficile de générer un tout nouveau document Word avec un contenu entièrement personnalisé à partir du XML brut sans avoir accès à une API pour faciliter la tâche. Si vous avez vraiment besoin de faire cela, vous pouvez envisager d'installer Mono alors utilisez VB.NET, C# ou IronRuby pour créer vos documents Open XML en utilisant le SDK du format Open XML 1.0 . Puisque vous n'utiliserez que le Espace de nom Microsoft.Office.DocumentFormat.OpenXml.Packaging pour manipuler des documents Open XML, cela devrait fonctionner correctement dans Mono, qui semble supporter tout ce que le SDK requiert.

0 votes

J'ai écrit un petit utilitaire pour découper en tranches des modèles docx assez complexes et construire un document personnalisé en utilisant les tranches : github.com/bagilevi/docx_builder

0 votes

J'essaie toujours de me faire à l'idée d'une boucle de table utilisant cette méthode.

0 votes

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 traite en mémoire. (En fait, il utilise une version bifurquée qui n'entre pas en collision avec le module Zip: : de rubyzip).

11voto

Théo Capdet Points 596

Peut-être que cette perle est intéressante pour vous.

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

C'est comme une crevette mais avec du docx.

8voto

ykaganovich Points 8497

Vous pouvez utiliser POI Apache . Il est écrit en Java, mais s'intègre à Ruby en tant qu'extension

2 votes

Merci pour votre contribution ! Connaissez-vous une implémentation où Apache POI a été utilisé pour créer réellement un document Word (et pas seulement pour l'analyser) ?

0 votes

Désolé, je ne sais pas grand-chose à part qu'il existe.

0 votes

Docx4j (mon projet) est axé sur l'utilisation de fichiers docx (par opposition aux xlsx, bien qu'il les traite également).

8voto

Archonic Points 1476

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), il suffit d'utiliser la gemme 'htmltoword' :

https://github.com/karnov/htmltoword

Je ne sais pas pourquoi il y a eu une dérive des réponses et que tout le monde a commencé à poster des solutions de templating, mais cela répond à la question de l'OP. Comme Prawn, mais avec Word au lieu de PDF.

UPDATE :

Il y a aussi pandoc et un wrapper API pour pandoc appelé docverter . Les deux ont des installations légèrement compliquées puisque pandoc est une bibliothèque haskell.

7voto

Daniel A. White Points 91889

Je sais que si vous servez un document HTML comme un document Word avec l'extension .doc, il s'ouvrira très bien dans Word. Ne faites rien d'extraordinaire.

Edit : Voici un exemple utilisant l'ASP classique. http://www.aspdev.org/asp/asp-export-word/

0 votes

Merci, mais cela ressemble un peu à un sale coup, n'est-ce pas ? :-) A part cela : Quels sont les problèmes de sécurité liés à l'utilisation du format RTF ?

2 votes

Quels sont les problèmes posés par les fichiers RTF ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X