ruby on rails - rails - Creando documentos de Microsoft Word(.docx) en Ruby
Además de la respuesta de Grant, también puede enviar a Word un archivo "OPC plano", que es esencialmente el docx descomprimido y concatenado para crear un solo archivo xml. De esta manera, puede reemplazar [USER-PLACEHOLDER] en un archivo y terminar con él (es decir, sin comprimir o descomprimir).
Como se ha señalado, no parece haber bibliotecas 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 de formulario) personalizada 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. Tenga una "plantilla" DOCX que contenga todas las partes y la estructura de árbol que desea enviar a all
usuarios (sin contenido real), luego simplemente cree nuevas (o modifique las existentes) que contengan el contenido específico del usuario que desea e inyecte en el ZIP (archivo DOCX) antes de enviarlo al usuario.
Por ejemplo: podría tener document-template.xml
que contiene Dear [USER-PLACEHOLDER]:. Cuando un usuario solicita el documento, reemplaza [USER-PLACEHOLDER]
con el nombre del usuario, luego agrega el document.xml
resultante al archivo ZIP your-template.docx
(que contendría todas las imágenes y otras partes que deseas en Word). documento) y enviar ese 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 partes internas. Puede eliminar o reemplazar imágenes u otras partes muy fácilmente con cualquier herramienta de manipulación ZIP o mediante programación con código.
Generar un documento de Word completamente nuevo con contenido completamente personalizado desde XML sin procesar sería muy difícil sin el acceso a una API para facilitar el trabajo. Si realmente necesita hacer eso, puede considerar instalar Mono , luego use VB.NET, C # o IronRuby para crear sus documentos Open XML utilizando el Open XML Format SDK 1.0 . Ya que solo estaría usando el espacio de nombres de Microsoft.Office.DocumentFormat.OpenXml.Packaging para manipular documentos Open XML, debería funcionar bien en Mono, que parece ser compatible con todo lo que requiere el SDK.
Divulgación: Soy el líder del proyecto docxtemplater.
Sé que estás buscando una solución de rubí, pero como todas las demás soluciones solo te dicen cómo hacerlo a nivel global, sin darte una biblioteca que haga exactamente lo que quieres, aquí hay una solución basada en JS o NodeJS (funciona en ambas)
También puedes usarlo en la línea de comandos:
npm install docxtemplater -g
docxtemplater <configFile>
----config.docxFile: The input file in docx format
----config.outputFile: The outputfile of the document
Echa un vistazo a este repositorio de github: github.com/jawspeak/ruby-docx-templater
Le permite crear un documento a partir de una plantilla de palabra.
Esta es una forma en que Doccy ( doccyapp.com ) tiene una api que hace exactamente lo que puedes usar. Admite docx, odt y pages y se convierte a PDF también si lo desea
Esta es una vieja pregunta pero hay una nueva respuesta. Si desea convertir un documento HTML en un documento de Word (docx), solo use la gema ''htmltoword'':
https://github.com/nickfrandsen/htmltoword
No estoy seguro de por qué hubo un cambio en las respuestas y todos empezaron a publicar soluciones de plantillas, pero esto responde a la pregunta del OP. Al igual que Prawn, excepto Word en lugar de PDF.
ACTUALIZAR:
También hay pandoc y un envoltorio de API para pandoc llamado docverter . Ambos tienen instalaciones ligeramente complicadas ya que pandoc es una biblioteca de haskell.
Me encontré con el mismo problema. Desafortunadamente, no pude manipular el xml porque mis clientes deberían rellenar las plantillas. Y hacer esto no siempre es posible (por ejemplo, office for mac no lo permite).
Como solución a este problema, hice una gema simple, que se puede utilizar como plantilla de documento rtf con ruby incrustado: https://github.com/eicca/rtf-templater
Lo probé y funciona bien para llenar informes y documentos. Sin embargo, el formato se muestra mal para bucles y condiciones complejas.
Puede utilizar Apache POI . Está escrito en Java, pero se integra con Ruby como una extensión
Quizás esta gema sea interesante para ti.
https://github.com/trade-informatics/caracal/
Es como la gamba pero con docx.
Sé que si sirve un documento HTML como documento de Word con la extensión .doc, se abrirá en Word muy bien. Simplemente no hagas nada lujoso.
Edición: Aquí hay un ejemplo usando ASP clásico. http://www.aspdev.org/asp/asp-export-word/
Si alguien todavía está mirando esto, esta publicación explica cómo usar una fuente de datos XML. Esto funciona muy bien para mí.
http://seroter.wordpress.com/2009/12/23/populating-word-2007-templates-through-open-xml/
Si está ejecutando en Windows, por supuesto, es una cuestión de WIN32OLE y un poco de dolor con los objetos COM de Word.
Sin embargo, lo más probable es que estés sirviendo desde un entorno * nix. Word 2007 utiliza el formato " Microsoft Office Open XML " (* .docx) que puede abrirse con el paquete de compatibilidad adecuado de Microsoft .
Algunas de las aplicaciones de Office más recientes (2002 / XP y al menos 2003) tenían sus propios formatos XML que también pueden ser utilizables.
Lamentablemente, no conozco ninguna herramienta de Ruby que facilite el proceso.
Si se puede hacer aceptable, creo que estaría inclinado a ir por la ruta del archivo renombrado-html. Acabo de guardar un documento como HTML de WordXP, lo cambié de nombre a .doc y lo abrí sin problemas.
Usando una técnica muy similar a la sugerida por Grant Wagner, he creado una gema de Ruby HTML to Word que debería permitirle generar fácilmente archivos de Word Docx desde su aplicación Ruby. Puede verlo en http://github.com/nickfrandsen/htmltoword - Simplemente pásele una cadena html y creará un archivo docx de word correspondiente.
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
Esperamos que te sea útil. Si tiene algún problema con él, siéntase libre de abrir un problema de github.