Интеграция Jasper в Rails 3 - PullRequest
8 голосов
/ 17 июня 2011

Я пытаюсь интегрировать приложение 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

Хотя это кажется простым, я не понимаю, почему это происходит. Разве render_to_string с layout => false не позволили мне получить строковый результат этого действия? Я также пытался : действие вместо : шаблон , но он делает то же самое.

Если кто-нибудь, имеющий опыт в этой интеграции, может помочь ... Заранее спасибо, Андре

Ответы [ 4 ]

1 голос
/ 28 октября 2011

Мы на самом деле используем 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
0 голосов
/ 02 августа 2012

Используйте savon для взаимодействия с jaserserver в rails3.Вот пример:

require 'logger'
require 'savon'

logger = Logger.new(STDOUT)
logger.info "Test jasper via Savon-SOAP"

@client = Savon::Client.new {
  wsdl.document = "http://localhost:8080/jasperserver/services/repository?wsdl"
  http.auth.basic "jasperadmin", "jasperadmin"
}

logger.info "runReport method"
begin
  result = @client.request :run_report do
   soap.body = "<requestXmlString>
     <![CDATA[
      <request operationName='runReport' >
       <argument name='RUN_OUTPUT_FORMAT'>PDF</argument>
       <resourceDescriptor name='' wsType='' uriString='/reports/samples/AllAccounts'     isNew='false'>
       <label></label>
     </resourceDescriptor>
      </request>
     ]]>
     </requestXmlString>"
 end
 send_data result.http.raw_body, :type => 'application/pdf', :filename => 'report.pdf', :disposition => 'attachment'
rescue Exception => e
  logger.error "SOAP Error: #{e}"
end
0 голосов
/ 22 августа 2011

Попробуйте изменить код render_to_string() на этот:

@customers.to_xml
0 голосов
/ 21 августа 2011

Я ничего не знаю о яшме, но звучит так, будто вы хотите сделать две вещи: визуализировать шаблон PDF и затем отправить необработанный вывод обратно с типом mime PDF:

pdf_contents = render_to_string(:template => 'users/report')

send_data(pdf_contents, :file_name => 'report.pdf', :type => 'application/pdf')

Вы передаете внешний URL-адрес как путь к шаблону, но это, вероятно, неправильно, если вы получаете ошибки в пути к шаблону. Сначала исправьте путь к шаблону.

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