ruby-on-rails - 在 Rails 3 中集成 Jasper

标签 ruby-on-rails ruby ruby-on-rails-3 jasper-reports

我正在尝试将 rails 3 应用程序与 jasper 集成,遵循这个 wiki:

http://wiki.rubyonrails.org/rails/pages/HowtoIntegrateJasperReports

不过好像很多资料没有更新,自己弄起来很费劲。我还在 ruby-forum 上阅读了一个主题:http://www.ruby-forum.com/topic/139453 解释了一些细节,但仍然无法正常工作。

我的第一个问题与 render_to_string 方法有关: 当 Controller 方法运行时,我收到“模板丢失”错误:

这是方法:

def report
  @customers = Customer.all
  send_doc(render_to_string(:template => report_customers_path, :layout => false), '/pdfs', 'report.jasper', "customers", 'pdf')
end

虽然这看起来很简单,但我不明白为什么会这样。 render_to_stringlayout => false 应该让我得到该操作的字符串结果吗? 我还尝试了 :action 而不是 :template,但效果相同。

如果任何对此集成有一定专业知识的人可以提供帮助... 提前致谢, 安德烈

最佳答案

我们实际上使用 jasperreports 来创建报告,并且最近升级到 Rails 3.0。要创建 xml,我们使用 xml.erb 模板。 Jasper 报告在单独的 glassfish 服务器中运行这是总体思路:

url = URI.parse(my_url_string)
dataxml = render_to_string(:template => my_template_name).gsub(/\n/, '')
params = {'type' => 'pdf', 'compiledTemplateURI' => my_jasper_file, 'data' => dataxml }
request = Net::HTTP::POST.new(url.request_uri)
request.set_form_data(params)
obj = Net::HTTP.new(url.host, url.port)
obj.read_timeout = my_timeout_setting
response = obj.start { |http| http.request(request) }
case response
when Net::HTTPOK
  send_data(response.body, :filename => my_chosen_filename, :type => "application/pdf", :disposition => "inline")
else
  raise "failed to generate report"
end

关于ruby-on-rails - 在 Rails 3 中集成 Jasper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6389022/

相关文章:

ruby-on-rails - Rails 3 中双重布局的最佳实践

ruby-on-rails - 如何使用 Ruby on Rails 解析 JSON?

sql - 使用 Rails 和 SQL 在数据库中保存多条温度曲线(同时测量)的最佳方法是什么

ruby-on-rails - 如何使用 google_drive gem 处理 grant_type 错误?

html - rails : How to convert <img src= > to image_tag in rails app

ruby-on-rails-3 - 为什么Rails 3.2使用两个记录器ActiveSupport::TaggedLogging和ActiveSupport::BufferedLogger?

ruby-on-rails - Rack rack.input 变量被截断了吗?

ruby-on-rails-3 - 如何将 postgresql 列转换为 float 以在 rails 中进行范围搜索

mysql - 将 mysql 查询移动到模型

ruby - self 包含在模块中