Skip to content

Integrations de

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

docxi mit Rails, Rack und Hintergrundjobs verwenden

docxi hat keine Plugins und keine eingebauten Integrationen. Es ist reines Ruby, das ein StringIO zurückgibt, und funktioniert daher überall, wo Sie einen String senden oder speichern können. Diese Seite zeigt die üblichen Wege, es einzubinden. Das Rails-Controller-Muster ist dasselbe wie in der README, und die Testsuite läuft mit geladenem Rails 5.2 bis 8.1.

Rails-Controller: die Datei an den Browser senden

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 setzt Content-Disposition: attachment, sodass der Browser die Datei herunterlädt. Mit Bundler wird docxi automatisch aus dem Gemfile geladen.

Rails-Hintergrundjob: die Datei außerhalb des Requests erzeugen

Große Dokumente oder Dokumente, die auf langsamen Abfragen beruhen, entstehen besser in einem 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

Der Job schreibt in einen Pfad Ihrer Wahl. Wohin die Datei danach geht, etwa in einen Speicher oder eine E-Mail, entscheidet Ihre Anwendung.

Rack und andere Frameworks

Jede Rack-Anwendung kann die Bytes direkt zurückgeben:

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

Binden Sie sie mit run ReportApp.new in config.ru ein. Derselbe Ansatz funktioniert mit Sinatra, Hanami und jedem Framework, das einen String als Antwortkörper senden kann.

Skripte und Kommandozeilenwerkzeuge

docxi braucht weder Server noch Office-Software, ein einfaches Ruby-Skript genügt also:

require "docxi"

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

Verwandte Seiten


← Wiki-Startseite · README

Clone this wiki locally