`
lurma
  • 浏览: 7969 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JFreeChart和iText使用总结

阅读更多
iText使用总结:

中文乱码

方案1:
本方案需要下载iTextAsian.jar包来导入中文字体
BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);  
com.lowagie.text.Font cnFont = new com.lowagie.text.Font(bfChinese,  12, com.lowagie.text.Font.NORMAL);  
Paragraph paragraph = new Paragraph("你好", cnFont);

方案2:
直接指定中文字体所在的路径,如下所示:
font = new Font(BaseFont.createFont("/usr/share/fonts/truetype/simsun.ttc,1",BaseFont.IDENTITY_H, BaseFont.EMBEDDED));  


方案2的兼容性不是很好,建议采用方案1。
【注意】
如果iText版本在5.0以上,在导入iTextAsian.jar后会出现如下所示的异常:

    Font 'STSong-Light' with 'UniGB-UCS2-H' is not recognized.

原因:
iText5以上就改了命名空间了。是 com/itextpdf/text/pdf/fonts/
但是iTextAsian还没有改。他的命名空间是 com/lowagie/text/pdf/fonts/
因此会报错。
解决方法:
1.用winrar解压iTextAsian.jar;  
2. 将com文件夹下面的lowagie 修改为itextpdf;
3.进入cmd . 切换到iTextAsian目录;
4.执行命令 jar cvf iTextAsian.jar com/itextpdf/text/pdf/fonts/* ;
5.将生成的iTextAsian.jar文件替换原来的。


生成带图片的PDF(与JFreeChart相结合)
在项目中需要将JFreeChart生成的图表导出到PDF或word中,这时就需要JFreeChart 和iText相结合来使用了。
方案1:
JFreeChart生成图表后,对图表进行保存;
iText对上一步保存的图片进行读取,然后再将其写入PDF或Word中。
此种方案就内存和CPU消耗大,频繁的进行IO操作也会对磁盘产生影响,影响效率,因此不采用。

方案2:
代码如下:
Document document = new Document();
document.open();
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(filePath));
PdfContentByte cb = writer.getDirectContent();
PdfTemplate tp = cb.createTemplate(width, height);
Rectangle2D r2d = new Rectangle2D.Double(0, 0, width, height);
JFreeChart pieChart = ChartFactory.createPieChart();
Graphics2D g2d = tp.createGraphics(width, height, new DefaultFontMapper());
pieChart.draw(g2d, r2d);
Image image = Image.getInstance(tp);


在采用以上方案时,消耗内存较多,在数据量较大时,会出现内存溢出的状况;
频繁的进行绘制操作,影响效率。

方案3
代码如下:
JFreeChart pieChart = ChartFactory.createPieChart();
BufferedImage bufferedImage = pieChart.createBufferedImage(width, height);
Image lcImage = Image.getInstance((java.awt.Image) bufferedImage, null);


此方案较为简单,代码量少;
内存消耗较少,数据量较大时,不会出现内存溢出的状况;
经测试,在iText5.0以上版本中能够正常运行;
减少一些耗时的操作,推荐采用。

生成带图片的Word(与JFreeChart相结合)
生成带图片的word文件与生成PDF操作类似,但也不完全相同。
iText在对Word支持上稍弱,在最近的版本中更是将对word的操作封装成一个单独的类库,在使用上较为繁琐,因此在使用iText导出word文档时,采用的是iText2.0.8版本。
iText2.0.8版本在对word的支持上稍弱,在使用上与生成PDF方案稍有不同。
JFreeChart pieChart = ChartFactory.createPieChart();
BufferedImage bi = pieChart.createBufferedImage(width, height);
ByteArrayOutputStream out = new ByteArrayOutputStream();
ImageIO.write(bi, "png", out);
byte[] data = out.toByteArray();
Image scImage = Image.getInstance(data);


【注意】
如果使用生成PDF那套方案对BufferedImag进行强制转换,转换成的Image在导出的Word文件中显示不了,因此需要借助ImageIO将BufferedImage转换成byte[],然后再将byte[] 转换为Image;
需要注意的是,在  ImageIO.write(bi, “png”, out)  这一步中,中间的参数为生成的图片的类型,这里采用的是png,而不是jpg,如果采用的是jpg格式的话,在导出的word文件中,图片的颜色会发生变化,但是png格式的话,输出的图片不会出现上述问题,这一点值得注意。
2
0
分享到:
评论
3 楼 robindut 2012-06-06  
lurma 写道
我对这些了解也不是很深入,只是在我做项目的时候遇到的,经过对比,方案二在内存占用上比方案三要大很多,有时候会直接导致内存溢出,当然,这些方案也只仅供参考,呵呵
在图像的清晰度上我还不如你了解的多呢,经理说直接设定宽和高,根本就不考虑放大缩小,所以这个我也不能帮你了

好吧,有时间我看一下方案二和方案三实际运行时内存利用的问题,不考虑图像放大缩小真好。。。哈哈哈
2 楼 lurma 2012-06-05  
我对这些了解也不是很深入,只是在我做项目的时候遇到的,经过对比,方案二在内存占用上比方案三要大很多,有时候会直接导致内存溢出,当然,这些方案也只仅供参考,呵呵
在图像的清晰度上我还不如你了解的多呢,经理说直接设定宽和高,根本就不考虑放大缩小,所以这个我也不能帮你了
1 楼 robindut 2012-05-30  
你好:
我也用jfreechart和iText生成pdf文件,有几个问题请教一下:
1.方案2与方案3,一个是调用JfreeChart类的draw方法,一个是调用createBufferedImage方法,但其实在jfreechart源码中createBufferedImage方法中也是调用了draw方法,为什么方案2就会占用大量内存??jfreechart生成chart图的时候必须得调用draw方法来完成图片绘制,有什么好方法能提高效率并减少内存占用吗?

2.生成的pdf中的chart图片的清晰度是如何控制的呢?怎么让图片在放大缩小时清晰,不会有失帧呢?
我现在是用writeScaledChartAsPNG将图片放大几倍来做的,这样生成的pdf文件会相应的变大,有没有好办法解决?

期待您的回复~~感谢分享~

相关推荐

    flex实战报表:jFreeChart,cewolf,iText.doc

    flex实战报表:jFreeChart,cewolf,iText.doc

    JFreeChart和pdf操作

    该资源是用JFreeChart、itext、itextasian进行图表演示、pdf操作的案例程序。文件夹Lib包含四个.jar包:iText5.0.6、iTextAsian1.5.2、jcommon1.0.6和jfreechart1.0.13。

    jFreeChart应用

    jFreeChart应用,包含web应用及普通应用程序应用,含有jFreeChart所需的jar包及相关教程,还有两个简单的实例源代码,jFreeChart入门很有帮助

    JFreeChart使用教程(含下载、安装)

    JFreeChart是一组功能强大、灵活易用的Java绘图API,使用它可以生成多种通用性的报表,包括柱状图、饼图、...本文将通过引领读者学习在JFreeChart中饼图、柱状图和曲线图的进阶应用,来达到熟练使用JFreeChart的目的。

    JSP使用JFreeChart生成各种图表并生成PDF文档

    JSP中使用使用JFreeChart生成各种图表,例如饼形图,柱形图;并使用IText生成PDF文档

    iText.jar 和 jfreechart.jar

    JFreeChart是开放源代码站点SourceForge.net上的一个JAVA项目,它主要用来各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等 ...

    jfreechart使用手册

    添加jar包到lib目录下:gnujaxp.jar、iText-2.1.1.jar、jcommon-1.0.13.jar、jfreechart-1.0.10.jar 修改web.xml文件添加如下内容 <servlet-name>DisplayChart <servlet-class>org.jfree.chart.servlet....

    JFreeChart,Java开源图表框架

    一款开源的java图表框架,能写出漂亮的数据图表。http://www.jfree.org/jfreechart/index.html

    jfreechart---lib.zip

    JFreeChart是完全基于Java语言的开源项目,因此可以使用在Java开发环境中,包括Java应用程序,或者是Java Web应用都没有任何问题。结合iText项目,可将生成的统计图表输出到PDF文件中;结合最新的POI项目,也可以将...

    jfeechart itext

    jfreechart itext2.06.jar

    JSP使用组件jspSmartUpload+JavaMail+jaf+iText+jFreechart

    这是我们学习JSP时~书上介绍的几个组件分别实现文件上传下载,发送EMail,制作图表以及报表!希望对童鞋们有点用!~~

    jfreechart-jar包

    提供jfreechart所需所有包,希望大家受用!...iText-2.1.5.jar jcommon-1.0.16.jar jfreechart-1.0.13-experimental.jar jfreechart-1.0.13-swt.jar jfreechart-1.0.13.jar junit.jar servlet.jar swtgraphics2d.jar

    jfreeChart报表小demo

    利用jfreeChart开发的饼图、柱状图、线图小案例,结合itext页面pdf展示,适合入门学习。

    jfreechart需要的jar包

    jfreechart-1.0.14.jar jcommon-1.0.17.jar iText-2.1.5.jar gnujaxp.jar

    jfreechart一&二维报表导出为word&pdf&html 一

    通过itext导出jfreechart到word,pdf和html,并且解决了中文乱码和报表字体模糊的问题!

    JFreeChart 所需jar包.zip

    JFreeChart 所需jar包:gnujaxp.jar、iText-2.1.5.jar、jcommon-1.0.16.jar、jfreechart-1.0.13.jar、jfreechart-1.0.13-experimental.jar、jfreechart-1.0.13-swt.jar、junit.jar、servlet.jar和swtgraphics2d.jar...

    java根据动态模板生成pdf(包含柱状图)所需jar包

    iText+FreeMarker+JFreeChart生成可动态配置的PDF文档。 iText有很强大的PDF处理能力,但是样式和排版不好控制,直接写PDF文档,数据的动态渲染很麻烦。 FreeMarker能配置动态的html模板,正好解决了样式、动态渲染...

    itext的源代码

    iText源码,用来与jfreechart联用

    java web 整合开发 王者归来 随书代码

    资深Java程序员耗时一年时间写作,十年开发经验毫无保留。全面、系统、深入介绍Java ...工具详尽:详细介绍了SVN、L094J、JFreeChart、iText等开发工具 案例典型:用不同框架组合实现了论坛系统和分布式宠物商店系统

Global site tag (gtag.js) - Google Analytics