Skip to content

Integrations tr

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'yi Rails, Rack ve arka plan işleriyle kullanma

docxi'nin eklentileri ve yerleşik entegrasyonları yoktur. Bir StringIO döndüren düz Ruby kodudur; bu yüzden bir dize gönderebildiğiniz veya saklayabildiğiniz her yerde çalışır. Bu sayfa, onu bağlamanın yaygın yollarını gösterir. Rails controller kalıbı README'de gösterilenle aynıdır ve test paketi Rails 5.2 ile 8.1 arası yüklüyken çalışır.

Rails controller: dosyayı tarayıcıya gönderme

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, Content-Disposition: attachment başlığını ayarlar; böylece tarayıcı dosyayı indirir. Bundler kullanıldığında docxi, Gemfile üzerinden otomatik olarak yüklenir.

Rails arka plan işi: dosyayı isteğin dışında oluşturma

Büyük belgeleri veya yavaş sorgulardan oluşturulan belgeleri bir işte (job) oluşturmak daha iyidir:

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

İş, seçtiğiniz bir yola yazar. Dosyanın bundan sonra nereye gideceğine, örneğin bir depolama alanına veya e-postaya, uygulamanız karar verir.

Rack ve diğer çatılar

Herhangi bir Rack uygulaması baytları doğrudan döndürebilir:

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

Bunu config.ru içinde run ReportApp.new ile bağlayın. Aynı yaklaşım Sinatra, Hanami veya yanıt gövdesi olarak bir dize gönderebilen herhangi bir çatıda da çalışır.

Betikler ve komut satırı araçları

docxi'nin sunucuya da ofis yazılımına da ihtiyacı yoktur; bu yüzden sıradan bir Ruby betiği yeterlidir:

require "docxi"

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

İlgili sayfalar


← Wiki ana sayfası · README

Clone this wiki locally