在Rails 3.2中生成rtf文档

时间:2012-03-02 20:11:34

标签: ruby-on-rails-3

我是铁杆新手。有人能告诉我是否有一种快速简便的方法来生成rtf文件供人们使用rails下载? 例如,如果我有“views / users / show.html.erb”,视图通常会输出到html,所以我希望人们可以下载为相同的rtf文档?

3 个答案:

答案 0 :(得分:7)

ruby-rtf是您正在寻找的宝石。有一些rtf生成here

的例子

将此添加到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 :(得分:1)

ruby​​-rtf - 是rtf解析

这个是rtf生成 - https://github.com/clbustos/rtf

答案 2 :(得分:0)

我在Rails 4.2上这样做,它似乎工作到目前为止。我没有在最新版本的Rails上测试过这个,但接下来就是这样。宝石最近没有被维护,所以关于这是否符合我的所有要求的判决仍然存在。

首先,Nazar是正确的,链接应该是https://github.com/clbustos/rtf,以便从Rails控制器创建RTF文件与解析RTF文件。

我尝试了答案中提供的代码,但在此实现中使用send_file存在问题。由于send_file用于发送给定路径的文件,因此它不起作用,如图所示。另一方面,send_data用于直接从Rails应用程序发送数据流。所以这是我用于创建RTF文档的代码,可直接从控制器下载。

基本设置:

的Gemfile:

gem 'rtf'

安装gem。

配置/初始化/ 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

控制器:

应用程序/控制器/ 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 vs send_data,这本身就是一个大问题,但我也希望提供一些有关如何组织我的代码的见解,因为没有像这样的视图文件用于基于HTML或PDF的解决方案。