Skip to content

Integrations it

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

Usare docxi con Rails, Rack e i job in background

docxi non ha plugin né integrazioni incorporate. È Ruby puro che restituisce uno StringIO, quindi funziona ovunque tu possa inviare o salvare una stringa. Questa pagina mostra i modi più comuni per collegarlo. Lo schema con il controller Rails è quello mostrato nel README, e la suite di test gira con Rails dalla 5.2 alla 8.1 caricato.

Controller Rails: inviare il file al browser

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 imposta Content-Disposition: attachment, quindi il browser scarica il file. Con Bundler, docxi viene caricato automaticamente dal Gemfile.

Job in background con Rails: generare il file fuori dalla richiesta

I documenti grandi, o quelli costruiti da query lente, è meglio generarli in un 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

Il job scrive nel percorso che scegli. Dove va il file dopo, per esempio in uno storage o in un'email, lo decide la tua applicazione.

Rack e altri framework

Qualsiasi applicazione Rack può restituire direttamente i byte:

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

Montala con run ReportApp.new in config.ru. Lo stesso approccio funziona con Sinatra, Hanami o qualsiasi framework in grado di inviare una stringa come corpo della risposta.

Script e strumenti da riga di comando

docxi non ha bisogno né di un server né di software da ufficio, quindi basta un normale script Ruby:

require "docxi"

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

Pagine correlate


← Home della wiki · README

Clone this wiki locally