真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

JfreeChart生成圖片的幾種方式分別是什么

JfreeChart生成圖片的幾種方式分別是什么,針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

創(chuàng)新互聯(lián)建站成立于2013年,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元貢井做網(wǎng)站,已為上家服務(wù),為貢井各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話(huà):13518219792

下面主要介紹JfreeChart生成圖片的幾種方式。

先從網(wǎng)上找點(diǎn)介紹。

一、簡(jiǎn)介

WW 的發(fā)展使得基于因特網(wǎng)的應(yīng)用程序不再局限于靜態(tài)或者簡(jiǎn)單的動(dòng)態(tài)內(nèi)容提供。傳統(tǒng)的一些以軟件包形式發(fā)布應(yīng)用程序例如報(bào)表系統(tǒng)等都在逐漸搬到因特網(wǎng)上。但是這兩者之間有著天壤之別,雖然對(duì)于數(shù)據(jù)獲取、業(yè)務(wù)處理等方面基本類(lèi)似,但是***的差別在于用戶(hù)界面。為了能在web瀏覽器上顯示要求用戶(hù)界面使用 HTML以及圖片的方式來(lái)展現(xiàn)數(shù)據(jù),而傳統(tǒng)的一些利用操作系統(tǒng)本身的控件來(lái)開(kāi)發(fā)的用戶(hù)界面無(wú)法適應(yīng)琳瑯滿(mǎn)目的客戶(hù)端,因此在這里也變得無(wú)能為力?;氐奖疚牡念}目上來(lái),為了創(chuàng)建一個(gè)可以在web瀏覽器上查看到圖表一般有兩種做法:***種就是使用applet利用java本身對(duì)圖形的支持來(lái)顯示一個(gè)圖表;第二 種就是直接在web服務(wù)器端生成好圖表圖片文件后發(fā)送給瀏覽器。***種方式顯然對(duì)于客戶(hù)端要求太高,隨著現(xiàn)在主流瀏覽器放棄對(duì)JAVA的支持后,這種方式 只適合一些局域網(wǎng)的應(yīng)用,而對(duì)于因特網(wǎng)的環(huán)境就顯得不太適合。因此我們下面將介紹一個(gè)JAVA的圖表引擎JFreeChart用來(lái)產(chǎn)生基于WEB的圖表。

JFreeChart 項(xiàng)目簡(jiǎn)介 JFreeChart是開(kāi)放源代碼站點(diǎn)SourceForge.net上的一個(gè)JAVA項(xiàng)目,它主要用來(lái)各種各樣的圖表,這些圖表包括:餅圖、柱狀圖(普 通柱狀圖以及堆棧柱狀圖)、線(xiàn)圖、區(qū)域圖、分布圖、混合圖、甘特圖以及一些儀表盤(pán)等等。這些不同式樣的圖表基本上可以滿(mǎn)足目前的要求。

二、JFreeChart獲取

JFreeChart 是JFreeChart公司在開(kāi)源網(wǎng)站SourceForge.net上的一個(gè)項(xiàng)目,該公司的主要產(chǎn)品有如下:

1.JFreeReport :報(bào)表解決工具

2.JFreeChart:Java 圖形解決方案(Application/Applet/Servlet/Jsp)

3.JCommon :JFreeReport和JFreeChart的公共類(lèi)庫(kù)

4.JFreeDesigner :JFreeReport的報(bào)表設(shè)計(jì)工具

我們可以從jfree官方網(wǎng)站上獲取***版本和相關(guān)資料(但是jfree的document需要40美金才能獲?。?,

獲取地址:http://www.jfree.org/jfreechart/index.html(同時(shí)可以獲得簡(jiǎn)明介紹)

我們以當(dāng)前***版本:jfreechart-1.0.1.zip為例子進(jìn)行說(shuō)明。

三、JFreeChart配置安裝

1 、解壓jfreechart-1.0.1.zip.zip到指定位置,其中source是jfreechart的源碼,jfreechart-1.0.1-demo.jar 是例子程序,可以先運(yùn)行一下看看各種效果,就知道他的nb之處了。

2 、為了配置成功,我們需要關(guān)注的文件有如下三個(gè):

設(shè)置classpath。加入下面三個(gè)jar包。

jfreechart-1.0.1.jar 、jcommon-1.0.0.jar、gnujaxp.jar

加上第三個(gè)jar包有時(shí)web.xml會(huì)報(bào)錯(cuò),把它去掉就好了。

至此jfreechart的配置就完成了,下面就可以進(jìn)行jfreechart的開(kāi)發(fā)了。這里值得提出的是jfreechart的類(lèi)結(jié)構(gòu)設(shè)計(jì)前后兼容性不是很好,不同版本的jfreechart中類(lèi)庫(kù)結(jié)構(gòu)可能不一樣,有時(shí)候可能需要查源碼。如果是中文顯示的時(shí)候可能依據(jù)觀感需要改變?cè)创a的字體。

四、JFreeChart功能介紹

JFreeChart 目前是***的java圖形解決方案,基本能夠解決目前的圖形方面的需求,主要包括如下幾個(gè)方面:

pie charts (2D and 3D) :餅圖(平面和立體)

bar charts (regular and stacked, with an optional 3D effect) :柱狀圖

line and area charts :曲線(xiàn)圖

scatter plots and bubble charts

time series, high/low/open/close charts and candle stick charts :時(shí)序圖

combination charts :復(fù)合圖

Pareto charts

Gantt charts :甘特圖

wind plots, meter charts and symbol charts

wafer map charts

( 態(tài)圖表,餅圖(二維和三維) , 柱狀圖 ( 水平,垂直),線(xiàn)圖,點(diǎn)圖,時(shí)間變化圖,甘特圖, 股票行情圖,混和圖, 溫度計(jì)圖, 刻度圖等常用商用圖表)

圖形可以導(dǎo)出成PNG和JPEG格式,同時(shí)還可以與PDF和EXCEL關(guān)聯(lián)

JFreeChart 核心類(lèi)庫(kù)介紹:

研究jfreechart源碼發(fā)現(xiàn)源碼的主要由兩個(gè)大的包組成:org.jfree.chart,org.jfree.data。其中前者主要與圖形本身有關(guān),后者與圖形顯示的數(shù)據(jù)有關(guān)。具體研究如果大家有興趣的話(huà)可以自己研究 。

核心類(lèi)主要有:

org.jfree.chart.JFreeChart :圖表對(duì)象,任何類(lèi)型的圖表的最終表現(xiàn)形式都是在該對(duì)象進(jìn)行一些屬性的定制。JFreeChart引擎本身提供了一個(gè)工廠(chǎng)類(lèi)用于創(chuàng)建不同類(lèi)型的圖表對(duì)象

org.jfree.data.category.XXXDataSet: 數(shù)據(jù)集對(duì)象,用于提供顯示圖表所用的數(shù)據(jù)。根據(jù)不同類(lèi)型的圖表對(duì)應(yīng)著很多類(lèi)型的數(shù)據(jù)集對(duì)象類(lèi)

org.jfree.chart.plot.XXXPlot :圖表區(qū)域?qū)ο?,基本上這個(gè)對(duì)象決定著什么樣式的圖表,創(chuàng)建該對(duì)象的時(shí)候需要Axis、Renderer以及數(shù)據(jù)集對(duì)象的支持

org.jfree.chart.axis.XXXAxis :用于處理圖表的兩個(gè)軸:縱軸和橫軸

org.jfree.chart.render.XXXRender :負(fù)責(zé)如何顯示一個(gè)圖表對(duì)象

org.jfree.chart.urls.XXXURLGenerator: 用于生成Web圖表中每個(gè)項(xiàng)目的鼠標(biāo)點(diǎn)擊鏈接

XXXXXToolTipGenerator: 用于生成圖象的幫助提示,不同類(lèi)型圖表對(duì)應(yīng)不同類(lèi)型的工具提示類(lèi)

個(gè)人感覺(jué)JFreeChart可以滿(mǎn)足大部分圖片創(chuàng)建的需要,美中不足的是:對(duì)字體的設(shè)置做的不夠好,特別是使用中文的時(shí)候字體很不清晰。因?yàn)檫@個(gè)原因建議你自己去修改他的源代碼,***使用properties文件去設(shè)置字體.還有就是文檔要錢(qián)所以要多花點(diǎn)時(shí)間去看源代碼?;蚨嗌仙鐓^(qū)。

五.開(kāi)始開(kāi)發(fā)

對(duì)JfreeChart有了初步了解并做好準(zhǔn)備工作之后,開(kāi)始作例子程序試驗(yàn)。在這里我只介紹餅圖的做法,而這張圖采用不同的方式進(jìn)行輸出,其他類(lèi)型的圖片可以參考jfreechart提供的例子,做法都差不多。

1、直接生成圖片

public class PieChartPicture {  public static void main(String[] args)   {   PieDataset dataset = getDataSet();   JFreeChart chart = ChartFactory.createPieChart3D(      " 項(xiàng)目進(jìn)度分布", // chart title      dataset,// data      true,// include legend      true,      false    );    PiePlot3D  plot=(PiePlot3D)chart.getPlot();      // 圖片中顯示百分比:默認(rèn)方式      //plot.setLabelGenerator(new           StandardPieSectionLabelGenerator(StandardPieToolTipGenerator.DEFAULT_TOOLTIP_FORMAT));  // 圖片中顯示百分比:自定義方式,{0} 表示選項(xiàng), {1} 表示數(shù)值, {2} 表示所占比例 ,小數(shù)點(diǎn)后兩位   plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}={1}({2})", NumberFormat.getNumberInstance(), new DecimalFormat("0.00%")));   // 圖例顯示百分比:自定義方式, {0} 表示選項(xiàng), {1} 表示數(shù)值, {2} 表示所占比例                   plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator("{0}={1}({2})"));   // 設(shè)置背景色為白色   chart.setBackgroundPaint(Color.white);   // 指定圖片的透明度(0.0-1.0)    plot.setForegroundAlpha(1.0f);   // 指定顯示的餅圖上圓形(false)還橢圓形(true)   plot.setCircular(true);   // 設(shè)置圖標(biāo)題的字體   Font font = new Font(" 黑體",Font.CENTER_BASELINE,20);   TextTitle title = new TextTitle(" 項(xiàng)目狀態(tài)分布");   title.setFont(font);    chart.setTitle(title);   FileOutputStream fos_jpg = null;   try {        fos_jpg=new FileOutputStream("D:\\ 項(xiàng)目狀態(tài)分布.jpg");        ChartUtilities.writeChartAsJPEG(fos_jpg,100,chart,640,480,null);        fos_jpg.close();   } catch (Exception e) {    }   }   private static PieDataset getDataSet() {   DefaultPieDataset dataset = new DefaultPieDataset();   dataset.setValue(" 市場(chǎng)前期", new Double(10));   dataset.setValue(" 立項(xiàng)", new Double(15));   dataset.setValue(" 計(jì)劃", new Double(10));   dataset.setValue(" 需求與設(shè)計(jì)", new Double(10));   dataset.setValue(" 執(zhí)行控制", new Double(35));   dataset.setValue(" 收尾", new Double(10));   dataset.setValue(" 運(yùn)維",new Double(10));   return dataset;          }  }

2、采用servlet和struts的action方式輸出

采用這種方式輸出,不用生成圖片。

1)servlet輸出

public class PieByServlet extends HttpServlet{   public void service(ServletRequest req, ServletResponse res)   throws ServletException, IOException   {      res.setContentType("image/jpeg");      PieDataset dataset = getDataSet();      JFreeChart chart = ChartFactory.createPieChart3D(      " 水果餅圖", // chart title      dataset,// data      true, // include legend      true,      false );      //設(shè)置圖表屬性  // 輸出圖片    ChartUtilities.writeChartAsJPEG(res.getOutputStream(),100,chart,800,600,null);   }

2)struts的action方式輸出

只將這條語(yǔ)句加上try catch即可,并返回null。

try{         ChartUtilities.writeChartAsJPEG(response.getOutputStream(),100,chart,800,600,null);    } catch (Exception e) {   }  return null;

其實(shí)采用這兩種方式與生成圖片的方式改動(dòng)并不大

加上語(yǔ)句response.setContentType("image/jpeg");

ChartUtilities.writeChartAsJPEG(new FileOutputStream("D:\\ 項(xiàng)目狀態(tài)分布.jpg");,100,chart,640,480,null);

文件流改成response的輸出流就可以了

hartUtilities.writeChartAsJPEG(response.getOutputStream(),100,chart,800,600,null);

3、jsp+servlet+javabean方式

1)Create ChartViewer servlet

public class ChartViewer extends HttpServlet {   public void init() throws ServletException {  }   //Process the HTTP Get request  public void doGet(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException {   // get the chart from session  HttpSession session = request.getSession();   BufferedImage chartImage = (BufferedImage) session.getAttribute("chartImage");   // set the content type so the browser can see this as a picture   response.setContentType("image/png");   // send the picture   PngEncoder encoder = new PngEncoder(chartImage, false, 0, 9);   response.getOutputStream().write(encoder.pngEncode());  }   //Process the HTTP Post request   public void doPost(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException {   doGet(request, response);   }   //Process the HTTP Put request   public void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {   }   //Clean up resources   public void destroy() { }   }

2)Create a servlet map in web.xml

           ChartViewer    myapp.webwork.servlets.ChartViewer         ChartViewer   /servlet/ChartViewer      

3)Create a chart in a java bean (Pie3DDemo.java)

public class Pie3DDemo {   private DefaultPieDataset getDataset() {   // categories...   String[] section = new String[] { "Jan","Feb","Mar","Apr","May","Jun", "Jul","Aug","Sep","Oct","Nov","Dec" };   // data...   double[] data = new double[section.length];    for (int i = 0; i < data.length; i++) {        data[i] = 10 + (Math.random() * 10);   }   // create the dataset...   DefaultPieDataset dataset = new DefaultPieDataset();   for (int i = 0; i < data.length; i++) {          dataset.setValue(section[i], data[i]);   }   return dataset;   }   public String getChartViewer(HttpServletRequest request, HttpServletResponse response) {    DefaultPieDataset dataset = getDataset();   // create the chart...    JFreeChart chart = ChartFactory.createPie3DChart(     "Pie3D Chart Demo",  // chart title     dataset,             // data     true,                // include legend     true,     false    );   // set the background color for the chart...   chart.setBackgroundPaint(Color.cyan);   PiePlot plot = (PiePlot) chart.getPlot();   plot.setNoDataMessage("No data available");   // set drilldown capability...    plot.setURLGenerator(new StandardPieURLGenerator("Bar3DDemo.jsp","section"));   plot.setLabelGenerator(null);   // OPTIONAL CUSTOMISATION COMPLETED.   ChartRenderingInfo info = null;   HttpSession session = request.getSession();   try {   //Create RenderingInfo object    response.setContentType("text/html");    info = new ChartRenderingInfo(new StandardEntityCollection());    BufferedImage chartImage = chart.createBufferedImage(640, 400, info);   // putting chart as BufferedImage in session,   // thus making it available for the image reading action Action.   session.setAttribute("chartImage", chartImage);   PrintWriter writer = new PrintWriter(response.getWriter());   ChartUtilities.writeImageMap(writer, "imageMap", info);   writer.flush();   } catch (Exception e) { }    String pathInfo = "http://";   pathInfo += request.getServerName();   int port = request.getServerPort();   pathInfo += ":"+String.valueOf(port);   pathInfo += request.getContextPath();   String chartViewer = pathInfo + "/servlet/ChartViewer";   return chartViewer;   }

4)頁(yè)面

      Pie Chart Demo            

Pie Chart Demo

   <%String chartViewer = myChart.getChartViewer(request, response);%>   " border=0 usemap="#imageMap">      

4、采用工具類(lèi)ChartUtil和DisplayChart(jfreechart的servlet)輸出

我用了上面的幾個(gè)方法輸出圖片,發(fā)現(xiàn)頁(yè)面里只能輸出一個(gè)圖片,不過(guò)下面的方法可以輸出多個(gè)圖片,而且是幾種方式中最簡(jiǎn)單的一個(gè),推薦使用。

這種方式和上面的三種比較類(lèi)似,是將javabean里的生成圖片的方法寫(xiě)的一個(gè)工具類(lèi)ChartUtil里面。

1)添加工具類(lèi)ChartUtil

public class ChartUtil {

// 產(chǎn)生時(shí)間序列圖,返回圖片名稱(chēng)

public  static String generatePieChart(DefaultPieDataset dataset,String title,int width,int height,HttpSession session, PrintWriter pw) {    String filename = null;    try {    if (session != null)    {   ChartDeleter deleter = (ChartDeleter)session.getAttribute("JFreeChart_Deleter");    session.removeAttribute("JFreeChart_Deleter");    session.setAttribute("JFreeChart_Deleter", deleter);   }   JFreeChart chart = ChartFactory.createPieChart3D(   title,  // chart title   dataset, // data   true,  // include legend   true,   false );   //  Write the chart image to the temporary directory   ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());   //If the last parameter is null, the chart is a "one time"-chart and will be deleted after the first serving.   //If the last parameter is a session object, the chart remains until session time out.   filename = ServletUtilities.saveChartAsPNG(chart, width, height, info, session);   //  Write the image map to the PrintWriter    ChartUtilities.writeImageMap(pw, filename, info,true);    pw.flush();   } catch (Exception e) {    System.out.println("Exception - " + e.toString());    e.printStackTrace(System.out);    filename = "picture_error.png"; }   return filename;   }   }

2)在action里統(tǒng)計(jì)數(shù)據(jù),設(shè)置好數(shù)據(jù)集dataset。傳到頁(yè)面

3)在頁(yè)面里取出

DefaultPieDataset piedataset=(DefaultPieDataset)request.getAttribute("piedataset");

// 用ChartUtil工具類(lèi)產(chǎn)生圖片

String p = ChartUtil.generatePieChart(piedataset," 項(xiàng)目收支線(xiàn)圖",500,300,null, new PrintWriter(out));   String p1 = request.getContextPath() + "/servlet/DisplayChart?filename=" + p;

通過(guò)以下方式輸出

" width=500 height=300 border=0 usemap="#<%= p %>">

4)在web.xml中添加

   DisplayChart   org.jfree.chart.servlet.DisplayChart       DisplayChart     /servlet/DisplayChart 

5、pplicationFrame 方式

public class PieChartDemo1 extends ApplicationFrame {   public PieChartDemo1(String title) {   super(title);   setContentPane(createDemoPanel());   }   private static JFreeChart createChart(PieDataset dataset) {   JFreeChart chart = ChartFactory.createPieChart(   .......  return chart;   }    public static JPanel createDemoPanel() {   JFreeChart chart = createChart(createDataset());   return new ChartPanel(chart);   }    public static void main(String[] args) {   PieChartDemo1 demo = new PieChartDemo1("Pie Chart Demo 1");   demo.pack();   RefineryUtilities.centerFrameOnScreen(demo);   demo.setVisible(true);   }   }

關(guān)于JfreeChart生成圖片的幾種方式分別是什么問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。


網(wǎng)頁(yè)名稱(chēng):JfreeChart生成圖片的幾種方式分別是什么
文章分享:http://weahome.cn/article/pppodj.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部