Para ello usaremos la gema "Caracal". La documentación oficial la puedes encontrar a partir de la URL de github https://github.com/trade-informatics/caracal.
Como es habitual en Rails, la incluimos en el Gemfile y ejecutamos el bundle install.
Generación de documento word
En la documentación de la gema hay ejemplos suficientes. Aquí muestro un ejemplo adaptado que podéis incluir tal cual en vuestro controller
def genera_word
@items = Item.all
Caracal::Document.save 'example.docx' do |docx|
#Tamaño de página
docx.page_size do
width 12240 # page width in twips.
height 15840 # page height in twips.
end
#Fijamos los márgenes
docx.page_margins do
left 720 # left margin in twips.
right 720 # right margin in twips.
top 1440 # top margin in twips.
bottom 1440 # bottom margin in twips.
end
#Colocamos el numero de página
docx.page_numbers true do
align :right # accepts :left, :center, and :right.
end
#Cambiamos la fuente por defecto
docx.font do
name 'Droid Serif'
end
docx.h1 'Listado de items'
cuenta = 0
@items.order(:orden).each do |i|
cuenta +=1
docx.page if (cuenta%20==0) #Página cada 20 lineas
docx."Item #{i.name}"
docx.p #Linea en blanco
end
end #Caracal
end #genera_word
Si has usado el nombre de función que te he propuesto acuérdate de incluir la ruta en config/routes.rb.
Descarga en el cliente
Tan sencillo como usar send_file. El método invocado en el controller contendrá algo como lo siguiente que envía el fichero al cliente.
def get_info_word
#....
send_file("example.docx" ,
:filename => "example.docx",
:type => 'application/msword')
end
Ni qué decir tiene que send_file tiene diferentes opciones para optimizar la descarga. Aquí hemos mostrado la formulación básica.
Muchos lo tenéis claro, pero por si acaso, me comprometo mostrar en otro post como hacer esto mismo desde un script RUBY obviando el framework Ruby on Rails.
Este comentario ha sido eliminado por el autor.
ResponderEliminarhola que tal yo tengo un proyecto en el cual debo generar una comisión esta hecha en word desde mi mi pagina web en la cual ya debe de estar la plantilla de word y solo el usuario bebe llenar los campos faltantes y despues de esto poder descargarlo. Espero me ayudes a como hacer esto mas o menos darme la idea.
ResponderEliminarHay una gema que se llama docx_replace, sirve para reemplazar variables dentro de un docx ya existente. Espero te sirva.
Eliminar