Rails和Flash创建漂亮的报表

xiaoxiao2025-12-10  6

本文将介绍一种结合Rails和Flash,创建报表的方法. 原文比较冗长,我简单翻译 1.生成效果如下: [img]/upload/attachment/90413/934eea88-3494-336a-9269-800db03f0911.png[/img] [img]/upload/attachment/90415/2760f60f-cc4d-3961-8d20-66fa40dd2f0a.png[/img] 2. 多种报表实现方式 [url=http://nubyonrails.com/pages/gruff]Gruff[/url]和[url=http://www.jfree.org/jfreechart/]JfreeChart[/url] Gruff 需要 RMagick,而JFreeChart 需要java支持,代码类似如下: def CreateChart pipe = IO.popen "java -cp C:\\InstantRails\\rails_apps\\project\\jfree\\src;C:\\InstantRails\\rails_apps\\project\\jfree\\lib\\jcommon-1.0.0-rc1.jar;C:\\InstantRails\\rails_apps\\project\\jfree\\lib\\jfreechart-1.0.0-rc1.jar; CreateChart" pipe.close redirect_to "/graph/report" end [url=http://www.maani.us/xml_charts/index.php?menu=Gallery]XML/SWF[/url]做为Flash库,是个不错的选择 而且有[url=http://ziya.liquidrail.com/]插件[/url]支持.应该是免费 [img]/upload/attachment/96776/299ad42d-596f-3ff6-8aa5-5e624efa45a7.png[/img] 3. amCharts 这是我们要介绍的用法,因为,更容易用,虽然,免费版带水印. [url=http://www.amcharts.com/]这里下载[/url] 解压缩有三个文件.swf .xml和amcharts_key.txt 4. 数据源部分 这里通过rails的controller提供数据,传给FLex def population @cities = City.find(:all) @population_data_link = formatted_population_reports_url(:xml) respond_to do |format| format.html format.xml { render :action => "population.xml.builder", :layout => false } end end @cities 是City相关记录,有population @populationdatalink 保存取得图表数据的url地址 这个地址,能够访问,是因为有路由如下 #routes.rb: map.resources :reports, :collection => {:population => :get} 5. Flash客户端支持检查 为了保证用户能够正常显示Flash 所以需要swfobject.js 那么,就要在view里增加 <%= javascript_include_tag 'swfobject' %> 6. population.html.erb 显示 <div id="population_chart" class='chart'> <strong>如果你没有Flash Player这里会显示</strong> <p>或者,版本不支持播放,需要更新</p> </div> <script type="text/javascript"> // <![CDATA[ var so = new SWFObject("/amcolumn/amcolumn.swf", "population_chart", "800", "380", "8", "#000000"); so.addVariable("path", "/amcolumn/"); so.addVariable("settings_file", escape("/amcolumn/column_settings.xml")); so.addVariable("data_file", escape("<%= @population_data_link %>")); so.addVariable("additional_chart_settings", "<settings><labels><label><x>250</x><y>25</y><text_size>18</text_size><text><![CDATA[<b>California Population as of <%= Time.now.to_s(:db) %></b>]]></text></label></labels></settings>"); so.addVariable("preloader_color", "#000000"); so.write("population_chart"); // ]]> </script> [quote] so.addVariable("path", "/amcolumn/");[/quote]库文件地址 [quote] so.addVariable("settings_file", escape("/amcolumn/column_settings.xml"));[/quote]xml是配置文件 [quote] so.addVariable("data_file", escape("<%= @population_data_link %>"));[/quote] and population.xml.builder xml.instruct! :xml, :version=>"1.0", :encoding=>"UTF-8" xml.chart do # 生成城市名 xml.series do @cities.each_with_index do |city, index| xml.value city.name, :xid => index end end xml.graphs do #这部分用来控制显示 xml.graph :gid => 'population' do @cities.each_with_index do |city, index| population = city.population case population # 当人口大于一百万显示红色 when > 100000 xml.value value, :xid => index, :color => "#ff43a8", :gradient_fill_colors => "#960040,#ff43a8", :description => level else xml.value value, :xid => index, :color => "#00C3C6", :gradient_fill_colors => "#009c9d,#00C3C6", :description => level end end end end end 相关资源:JAVA上百实例源码以及开源项目
转载请注明原文地址: https://www.6miu.com/read-5040650.html

最新回复(0)