我试图在这个wiki之后将rails 3应用程序与jasper集成:
http://wiki.rubyonrails.org/rails/pages/HowtoIntegrateJasperReports
但似乎很多信息都没有更新,所以很难让它自己工作.我还在ruby-forum上阅读了一个主题:http://www.ruby-forum.com/topic/139453
解释了一些细节,但仍然无法使其工作.
我的第一个问题与render_to_string方法有关:
当控制器方法运行时,我收到“模板丢失”错误:
这是方法:
def report @customers = Customer.all send_doc(render_to_string(:template => report_customers_path,:layout => false),'/pdfs','report.jasper',"customers",'pdf') end
虽然这看起来很简单,但我不明白为什么会这样.不使用layout => render_to_string; false假装让我得到那个动作的字符串结果?
我也试过:动作而不是:模板,但它也是一样的.
如果任何具有这种集成专业知识的人可以帮助……
提前致谢,
安德烈
解决方法
我们实际上使用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