Skip to content

Integrations es

Hammad Maqbool edited this page Oct 29, 2026 · 1 revision

English · 简体中文 · 繁體中文 · Español · العربية · Français · Português (Brasil) · Deutsch · हिन्दी · 日本語 · 한국어 · Русский · Bahasa Indonesia · Türkçe · Italiano · Tiếng Việt

Usar docxi con Rails, Rack y tareas en segundo plano

docxi no tiene plugins ni integraciones incorporadas. Es Ruby puro que devuelve un StringIO, así que funciona en cualquier sitio donde puedas enviar o guardar una cadena. Esta página muestra las formas habituales de conectarlo. El patrón del controlador de Rails es el que muestra el README, y el conjunto de pruebas se ejecuta con Rails 5.2 a 8.1 cargado.

Controlador de Rails: enviar el archivo al navegador

class ReportsController < ApplicationController
  def show
    word = Docxi::Document.new
    word.document.p { |p| p.text "Report for #{Date.today}" }

    send_data word.render.string,
              filename: "report.docx",
              type: "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
  end
end

send_data establece Content-Disposition: attachment, así que el navegador descarga el archivo. Con Bundler, docxi se carga automáticamente desde el Gemfile.

Tarea en segundo plano de Rails: generar el archivo fuera de la petición

Los documentos grandes, o los que se construyen a partir de consultas lentas, es mejor generarlos en una tarea:

class MonthlyReportJob < ApplicationJob
  queue_as :default

  def perform(path)
    word = Docxi::Document.new
    word.document.p { |p| p.text "Monthly report", bold: true, size: 16 }

    File.binwrite(path, word.render.string)
  end
end

La tarea escribe en la ruta que elijas. Adónde va el archivo después, por ejemplo a un almacenamiento o a un correo electrónico, depende de tu aplicación.

Rack y otros frameworks

Cualquier aplicación Rack puede devolver los bytes directamente:

require "docxi"

class ReportApp
  def call(env)
    word = Docxi::Document.new
    word.document.p { |p| p.text "Generated by a Rack app" }

    headers = {
      "content-type" => "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
      "content-disposition" => 'attachment; filename="report.docx"'
    }
    [200, headers, [word.render.string]]
  end
end

Móntala con run ReportApp.new en config.ru. El mismo enfoque sirve para Sinatra, Hanami o cualquier framework que pueda enviar una cadena como cuerpo de la respuesta.

Scripts y herramientas de línea de comandos

docxi no necesita servidor ni software de ofimática, así que basta con un script de Ruby normal:

require "docxi"

word = Docxi::Document.new
word.document.p { |p| p.text "Nightly export" }
File.binwrite(ARGV.fetch(0, "export.docx"), word.render.string)

Páginas relacionadas


← Inicio de la wiki · README

Clone this wiki locally