【问题标题】:Integrate Jasper in Rails 3在 Rails 3 中集成 Jasper
【发布时间】:2011-09-17 08:33:40
【问题描述】:

我正在尝试按照以下 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

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

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

【问题讨论】:

  • 你运行的是 ruby​​ 还是 jruby?
  • ruby -v = ruby​​ 1.9.2p180
  • 缺少模板错误是什么?
  • 你能发布你的 send_doc 方法吗?
  • 我试图查看该项目,现在甚至 wiki 页面都是空白的。有人删除了内容。

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


【解决方案1】:

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

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

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

您将外部 URL 作为模板路径传递,但如果您收到有关模板路径的错误,这可能是错误的。先修复模板路径。

【讨论】:

  • 该方法基于 wiki,但有人删除了 wiki 页面的内容(链接@第 3 行)。您现在可以在oldwiki.rubyonrails.org/rails/pages/HowtoIntegrateJasperReports 看到它
  • 我认为 Winfield 是对的,您应该将模板值更改为“客户/报告”(如该链接上的示例)而不是路径方法。或者完全取消该选项,render_to_string 应该能够确定您想要呈现报告视图。只要确保你有正确的“格式”扩展。
【解决方案2】:

尝试将render_to_string() 代码更改为:

@customers.to_xml

【讨论】:

    【解决方案3】:

    我们实际上使用 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
    

    【讨论】:

      【解决方案4】:

      使用 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
      

      【讨论】:

      • 嗨 Chaarel ...您的回答与 jasperserver 有关。这个问题是不同的。它与 wiki.rubyonrails.org 上的一个旧 wiki 页面有关,包括一个适配器接口解决方案,用于 ruby​​ + java 系统调用以生成报告。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-04
      • 2012-07-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多