Создайте документ RTF в Rails 3.2 - PullRequest
3 голосов
/ 03 марта 2012

Я новичок в рельсах. Может кто-нибудь сказать мне, если есть быстрый и простой способ генерировать документы RTF для людей, чтобы загрузить с помощью рельсов? Например, если у меня есть «views / users / show.html.erb», представление обычно выводится в html, поэтому я хочу, чтобы люди могли загружать его как идентичный документ rtf?

Ответы [ 3 ]

7 голосов
/ 06 марта 2012

ruby-rtf - это камень, который вы ищете. Вот несколько примеров генерации rtf здесь

Добавьте это в initializers / mime_types.rb:

Mime::Type.register "text/richtext", :rtf

Код, чтобы дать вам идею:

document = RTF::Document.new(RTF::Font.new(RTF::Font::ROMAN, 'Times New Roman'))
document.paragraph do |p|
   p << "This is the first sentence in the paragraph. "
   p << "This is the second sentence in the paragraph. "
   p << "And this is the third sentence in the paragraph."
end

send_file document, :type=>"text/richtext"
1 голос
/ 26 июня 2013

ruby-rtf - это разбор rtf

это для генерации rtf - https://github.com/clbustos/rtf

0 голосов
/ 15 мая 2018

Я делаю это на Rails 4.2, и, похоже, пока это работает.Я не проверял это на последней версии Rails, но это следующий.Драгоценный камень не был сохранен в последнее время, поэтому до сих пор не вынесен вердикт о том, будет ли он отвечать всем моим требованиям.

Во-первых, Назар прав, ссылка должна быть https://github.com/clbustos/rtf, чтобы создать RTFфайлы из контроллера Rails против синтаксического анализа RTF-файлов.

Я пробовал код, указанный в ответах, но существует проблема с использованием send_file в этой реализации.Поскольку send_file предназначен для отправки файла по заданному пути, он не работает, как показано.С другой стороны send_data используется для отправки потока данных непосредственно из приложения Rails.Итак, вот код, который я использовал для создания RTF-документа для прямой загрузки с контроллера.

Базовая настройка:

Gemfile:

gem 'rtf'

Установите гем.

config / initializers / mime_types.rb

Mime::Type.register "text/richtext", :rtf

В каталоге "lib" я создал специальный генератор RTF (Поместить код в контроллер можно для генерации документа RTF для тестирования, ногенерация RTF должна быть в отдельном файле, потому что код для создания документа RTF может быстро получить длинный и на самом деле не принадлежит контроллеру):

lib / rtf_reporting.rb

class RtfReporting

  require 'rtf'

  def initialize

  end

  ...

  def self.get_rtf_document(reporting)

    document = RTF::Document.new(RTF::Font.new(RTF::Font::ROMAN, 'Times New Roman'))
    document.paragraph do |p|
      p << "This is the first sentence in the paragraph. TESTING ID = #{reporting.id}"
      p << "This is the second sentence in the paragraph. "
      p << "And this is the third sentence in the paragraph."
    end
    return document.to_rtf

  end
end

Контроллер:

app / controllers / reportings_controller.rb

class ReportingsController < ApplicationController

  require 'rtf_reporting'

  ...

  def show

  ...

    respond_to do |format|
      format.rtf do
        send_data RtfReporting.get_rtf_document(@reporting), :type=>"text/richtext",
          :filename => "your_file_name.rtf",
          :disposition => 'attachment'
      end      
    end

  end

end

Надеюсь, это кому-нибудь поможет.Оригинальные ответы в этом посте помогли мне!Я знаю, что самое большое различие между моим ответом и другими ответами - это send_file против send_data, что само по себе является большим делом, но я также хотел дать некоторое представление о том, как бы я организовал свой код, учитывая, что нет файла представления, как естьдля решения на основе HTML или PDF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...