Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Integrate Jasper in Rails 3

I'm trying to integrate a rails 3 app with jasper following this wiki:

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

But it seems that a lot of information isn't updated so it's been very hard to make it work by myself. I've also read a topic at ruby-forum: http://www.ruby-forum.com/topic/139453 with some details explained but still couldn't make it work.

My first problem is related with the render_to_string method: When the controller method runs I receive a "Template is missing" error:

this is the method:

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

Although this seems simple I'm not understanding why is this happening. Doesn't render_to_string with layout => false suposed to get me the string result of that action? I also tried :action instead of :template, but it does the same.

If anybody with some expertise with this integration could help... Thanks in advance, André

like image 373
AndreDurao Avatar asked Jun 17 '11 16:06

AndreDurao


1 Answers

We actually use jasperreports to create reports, and recently upgraded to Rails 3.0. To create the xml, we use xml.erb templates. Jasper reports runs in a separate glassfish server Here's the general idea:

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
like image 79
sockmonk Avatar answered Nov 06 '22 07:11

sockmonk