如何将JFreeChart中图表结合iText输出到Pdf文件中,而不用生成图片 本帖最后由 zqaq_520 于 2009-07-28 17:09:39 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我这几天也在用这个,不过没有向pdf输出,我看api中所有向外输出图片和流的类都在org.jfree.chart.ChartUtilities 这个类和org.jfree.chart.servlet.ServletUtilities(和servlet有关)类中,你看看里面的每个方法,有没有你合适的.如果不行的话我们一起研究下呵呵!~ 先生成图片,再写入PDF,是这样吧. public static void saveCharToJPG(JFreeChart chart,String fileName) throws IOException{ OutputStream fos=null; try{ //fos=new FileOutputStream("D:\\fruit.jpg"); fos=new BufferedOutputStream(new FileOutputStream(fileName)); ChartUtilities.writeChartAsJPEG(fos,1.0f,chart,1024,768,null); }catch(Exception e){ }finally{ fos.close(); } }public static void main(String[] args) throws IOException{ //saveCharToJPG(createBarChart(createDataset()),"D:\\fruit.jpg"); saveCharToJPG(createChart2(createDataset()),"D:\\fruit2.jpg"); }createChart2(createDataset() ///这两个不用我说了吧.就是设置数据什么的.private static JFreeChart createChart2(CategoryDataset paramCategoryDataset)private static CategoryDataset createDataset() 内容你自己已经会了,不说.看返回值也知道.////////////////这是生成本地文件的.也可以通过JAVABEAN.在JSP里调用:来一个柱状图的:private static CategoryDataset getDataSet2() 数据...//////////////public static String generateBarChart(HttpSession session,PrintWriter pw,int w,int h){ String filename=null; CategoryDataset dataset=getDataSet2(); JFreeChart chart=ChartFactory.createBarChart3D( "水果产量图", // 图表标题 "水果", // 目录轴的显示标签 "产量", // 数值轴的显示标签 dataset, // 数据集 PlotOrientation.VERTICAL, // 图表方向:水平、垂直 true, // 是否显示图例(对于简单的柱状图必须是false) false, // 是否生成工具 false // 是否生成URL链接 ); try{ /*------得到chart的保存路径----*/ ChartRenderingInfo info=new ChartRenderingInfo(new StandardEntityCollection()); filename=ServletUtilities.saveChartAsPNG(chart,w,h,info,session); /*------使用printWriter将文件写出----*/ ChartUtilities.writeImageMap(pw,filename,info,true); pw.flush(); }catch(IOException e){ e.printStackTrace(); } return filename; }JSP:<%String fileNameBar=JfreeDemo.generateBarChart(session,new PrintWriter(out),580, 250); %>这样就得到了这个图片路径了.并且设置了图片的大小.<img alt="" src="<%= graphURLBar%>" width="580" height="250" border="0" /> 就显示了. java实现Integer.parseInt()? 并发处理的问题,大家来看看这个exception 如何自动生成一个jsp网页(在线等!~) 专家级问题 在哪能找到com包的参考文档啊? 在xp系统中java连sqlserver的补丁包 java非线程的程序里有没有类似sleep()方法? 高手进!各位有没有实现过包遍历?和找出指定包下面的所有类? 学习Java用什么开发工具来练手!(目前较流行的)马上结贴 基础问题高手请进 机器(web服务器)当掉前,在java程序里是如何判断 关于编码问题!急
类中,你看看里面的每个方法,有没有你合适的.如果不行的话我们一起研究下呵呵!~
public static void saveCharToJPG(JFreeChart chart,String fileName) throws IOException{
OutputStream fos=null;
try{
//fos=new FileOutputStream("D:\\fruit.jpg");
fos=new BufferedOutputStream(new FileOutputStream(fileName));
ChartUtilities.writeChartAsJPEG(fos,1.0f,chart,1024,768,null);
}catch(Exception e){
}finally{
fos.close();
}
}public static void main(String[] args) throws IOException{
//saveCharToJPG(createBarChart(createDataset()),"D:\\fruit.jpg");
saveCharToJPG(createChart2(createDataset()),"D:\\fruit2.jpg");
}
createChart2(createDataset() ///这两个不用我说了吧.就是设置数据什么的.
private static JFreeChart createChart2(CategoryDataset paramCategoryDataset)
private static CategoryDataset createDataset() 内容你自己已经会了,不说.看返回值也知道.
////////////////这是生成本地文件的.
也可以通过JAVABEAN.在JSP里调用:
来一个柱状图的:
private static CategoryDataset getDataSet2() 数据...//////////////
public static String generateBarChart(HttpSession session,PrintWriter pw,int w,int h){
String filename=null;
CategoryDataset dataset=getDataSet2();
JFreeChart chart=ChartFactory.createBarChart3D(
"水果产量图", // 图表标题
"水果", // 目录轴的显示标签
"产量", // 数值轴的显示标签
dataset, // 数据集
PlotOrientation.VERTICAL, // 图表方向:水平、垂直
true, // 是否显示图例(对于简单的柱状图必须是false)
false, // 是否生成工具
false // 是否生成URL链接
);
try{
/*------得到chart的保存路径----*/
ChartRenderingInfo info=new ChartRenderingInfo(new StandardEntityCollection());
filename=ServletUtilities.saveChartAsPNG(chart,w,h,info,session);
/*------使用printWriter将文件写出----*/
ChartUtilities.writeImageMap(pw,filename,info,true);
pw.flush();
}catch(IOException e){
e.printStackTrace();
}
return filename;
}
JSP:<%String fileNameBar=JfreeDemo.generateBarChart(session,new PrintWriter(out),580,
250); %>
这样就得到了这个图片路径了.并且设置了图片的大小.
<img alt="" src="<%= graphURLBar%>" width="580" height="250" border="0" /> 就显示了.