Ruby on rails 将Jasper集成到Rails 3中

Ruby on rails 将Jasper集成到Rails 3中,ruby-on-rails,ruby,ruby-on-rails-3,jasper-reports,Ruby On Rails,Ruby,Ruby On Rails 3,Jasper Reports,我正在尝试将rails 3应用程序与jasper集成,如下所示: 但似乎很多信息都没有更新,所以我自己很难做到这一点。我还在ruby论坛上读了一个主题: 解释了一些细节,但仍然无法实现 我的第一个问题与render_to_string方法有关: 当控制器方法运行时,我收到一个“模板丢失”错误: 方法如下: def report @customers = Customer.all send_doc(render_to_string(:template => report_custo

我正在尝试将rails 3应用程序与jasper集成,如下所示:

但似乎很多信息都没有更新,所以我自己很难做到这一点。我还在ruby论坛上读了一个主题: 解释了一些细节,但仍然无法实现

我的第一个问题与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=>falsesuposed将_渲染为_字符串,以获取该操作的字符串结果,不是吗? 我还尝试了:action而不是:template,但它的效果相同

如果有人对这种集成有一定的专业知识可以帮助。。。 提前感谢,,
André

我对jasper一无所知,但听起来您需要做两件事:呈现PDF模板,然后使用PDF mime类型将原始输出发送回:

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

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

您正在将外部URL作为模板路径传递,但如果您在模板路径方面遇到错误,则这可能是错误的。首先修复模板路径。

尝试将
渲染为\u字符串()
代码更改为:

@customers.to_xml

我们实际上使用jasperreports创建报告,最近升级到Rails 3.0。为了创建xml,我们使用xml.erb模板。Jasper reports在一个单独的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

使用savon与rails3中的jaserserver交互。 以下是一个例子:

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
需要“记录器”
需要“savon”
logger=logger.new(标准输出)
logger.info“通过Savon SOAP测试jasper”
@client=Savon::client.new{
wsdl.document=”http://localhost:8080/jasperserver/services/repository?wsdl"
http.auth.basic“jaspeadmin”、“jaspeadmin”
}
logger.info“运行报告方法”
开始
结果=@client.request:run\u report do
soap.body=”
PDF
]]>
"
结束
发送_data result.http.raw_body,:type=>'application/pdf',:filename=>'report.pdf',:disposition=>'attachment'
救援异常=>e
logger.error“SOAP错误:#{e}”
结束

您是在ruby还是jruby上运行?ruby-v=ruby 1.9.2P180缺少的模板错误是什么?请发布您的send\u doc方法。我试图查看该项目,现在甚至wiki页面都是空白的。有人删除了内容。该方法基于wiki,但有人删除了wiki页面的内容(link@3rd line)。现在您可以在上看到,我认为Winfield是正确的,您应该将模板值更改为类似“customer/report”(如该链接上的示例)的值,而不是路径方法。或者干脆去掉这个选项,render_to_string应该能够确定您想要呈现报表视图。只要确保你有正确的“格式”扩展。嗨,查雷尔。。。您的答案与jasperserver有关。这个问题与此不同,它与wiki.rubyonrails.org上的一个旧wiki页面有关,其中包含一个ruby+java系统调用上的适配器接口解决方案,用于生成报告。