Como se ha observado, no parece haber ninguna biblioteca para manipular documentos Open XML en Ruby, pero OpenXML Developer tiene documentación completa sobre el formato de documentos Open XML.
Si lo que desea es enviar una copia de un documento estándar (como una carta) personalizado para cada usuario, debería ser bastante simple dado que un DOCX es un archivo ZIP que contiene varias partes en una jerarquía de directorios. Tener una "plantilla" de DOCX que contenga todas las partes y la estructura de árbol que desee enviar a los usuarios de all
(sin contenido real), simplemente cree nuevas (o modifique) piezas que contengan el contenido específico del usuario que desea e inserte en el ZIP (archivo DOCX) antes de enviarlo al usuario.
Por ejemplo: Puede tener document-template.xml
que contenga Estimado [USER-PLACEHOLDER]:. Cuando un usuario solicita el documento, reemplaza [USER-PLACEHOLDER]
con el nombre del usuario, luego agrega el resultado document.xml
al archivo ZIP your-template.docx
(que contendría todas las imágenes y otras partes que desee en el documento Word) y envíe el documento resultante al usuario .
Tenga en cuenta que si cambia el nombre de un archivo .docx
a .zip
, es trivial explorar la estructura y el formato de las piezas internas. Puede eliminar o reemplazar imágenes u otras partes muy fácilmente con cualquier herramienta de manipulación ZIP o programáticamente con código.
Generar un nuevo documento de Word con contenido completamente personalizado desde XML sin formato sería muy difícil sin acceso a una API para facilitar el trabajo. Si realmente necesita hacer eso, podría considerar instalar Mono, luego usar VB.NET, C# o IronRuby para crear sus documentos Open XML usando el Open XML Format SDK 1.0. Como solo usaría el Microsoft.Office.DocumentFormat.OpenXml.Packaging Namespace para manipular documentos Open XML, debería funcionar bien en Mono, que parece ser compatible con todo lo que el SDK requiere.
He escrito una pequeña utilidad para dividir plantillas de docx algo complejas y crear un documento personalizado usando las divisiones: http://github.com/bagilevi/docx_builder – Leventix
. Todavía estoy tratando de ponerme cómodo con este método. –
Agregué otra opción para generar un archivo docx a partir de una plantilla https://github.com/jawspeak/ruby-docx-templater Utiliza zipruby y procesos en memoria. (En realidad, utiliza una versión bifurcada que no colisiona con el módulo Zip :: de rubyzip). – JAWspeak