Skip to content

Integrations pt BR

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 o docxi com Rails, Rack e jobs em segundo plano

O docxi não tem plugins nem integrações embutidas. É Ruby puro que retorna um StringIO, então funciona em qualquer lugar onde você possa enviar ou armazenar uma string. Esta página mostra as formas mais comuns de conectá-lo. O padrão de controller do Rails é o mesmo que o README mostra, e a suíte de testes roda com o Rails 5.2 a 8.1 carregado.

Controller do Rails: enviar o arquivo para o 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 define Content-Disposition: attachment, então o navegador baixa o arquivo. Com o Bundler, o docxi é carregado automaticamente a partir do Gemfile.

Job em segundo plano no Rails: gerar o arquivo fora da requisição

Documentos grandes, ou documentos montados a partir de consultas lentas, ficam melhores em um job:

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

O job grava no caminho que você escolher. Para onde o arquivo vai depois, como um armazenamento ou um e-mail, fica a cargo da sua aplicação.

Rack e outros frameworks

Qualquer aplicação Rack pode retornar os bytes diretamente:

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

Monte-a com run ReportApp.new no config.ru. A mesma abordagem funciona com Sinatra, Hanami ou qualquer framework que consiga enviar uma string como corpo da resposta.

Scripts e ferramentas de linha de comando

O docxi não precisa de servidor nem de pacote de escritório, então um script Ruby simples já resolve:

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


← Início da wiki · README

Clone this wiki locally