`
lurma
  • 浏览: 8179 次
  • 性别: 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

    本篇文章将深入探讨三个流行的Java库——JFreeChart、Cewolf和iText,它们分别用于创建静态图表、交互式Web报表以及PDF文档生成。 **JFreeChart** 1. **JFreeChart介绍**:JFreeChart是一个开源的Java库,专门用于...

    JFreechart存储为PDF不能显示中文文字的解决办法

    通过上述步骤,我们不仅解决了JFreechart在生成PDF时中文不显示的问题,还了解了如何利用iText和自定义字体映射器进行文本渲染。这为在Java项目中创建包含中文内容的高质量PDF文档提供了有效的解决方案。在实际开发...

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

    总结,JSP结合JFreeChart和IText,可以实现动态网页上的数据可视化,并且能够生成包含这些图表的高质量PDF文档。这在数据分析、报表生成、数据展示等场景中非常有用。通过熟练掌握这两个库的使用,开发者可以更高效...

    JFreeChart和pdf操作

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

    jFreeChart应用

    压缩包中的"相关教程"应包含jFreeChart的使用指南和示例代码,对于初学者来说非常有价值。描述中提到的"两个简单的实例源代码",可能是演示如何创建和显示柱状图或饼图的代码,通过这些实例,你可以快速了解...

    jfeechart itext

    在实际应用中,开发者通常会先用JFreeChart创建图表,将其保存为临时的图像文件,然后使用iText的`Image.getInstance()`方法读取该图像并插入到PDF文档中。这样,就可以将动态生成的图表与iText的文本处理能力相结合...

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

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

    第三方报表插件jfreechat及itext及实例

    本篇将深入探讨两个知名的开源工具:JFreeChart和iText,以及如何利用它们创建出专业且功能丰富的报表。 首先,JFreeChart是一款强大的Java库,它允许开发者创建各种类型的图表,如折线图、柱状图、饼图、散点图等...

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

    本项目结合了几个关键的开源组件,包括jspSmartUpload、JavaMail、jaf、iText和jFreechart,来实现这些功能。下面将详细阐述这些组件的作用和使用方法。 1. **jspSmartUpload**:这是一个专门用于文件上传的JSP组件...

    JFreeChart,Java开源图表框架

    使用JFreeChart的基本步骤包括创建数据源、选择图表类型、设置图表参数和绘制图表。 - **创建数据源**:数据源可以是简单的数组、列表,也可以是更复杂的数据结构如`CategoryDataset`、`TimeSeriesCollection`等。 ...

    iText.jar 和 jfreechart.jar

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

    jfreeChart报表小demo

    **JFreeChart报表小demo** 是一个基于Java的项目,主要展示了如何使用JFreeChart库创建各种图表,如饼图、柱状图和线图,并将这些图表嵌入到PDF文档中,使用了iText库进行PDF处理。这个项目非常适合初学者了解数据...

    jfreechart需要的jar包

    总结一下,JFreeChart的这些依赖文件共同为Java开发者提供了创建专业、美观图表的能力,包括核心的图表生成库JFreeChart,辅助图形处理的JCommon,PDF处理的iText,以及XML处理的gnujaxp。它们是构建数据可视化应用...

    iText PDF ; JFreeChar

    标题 "iText PDF & JFreeChart" 涉及到两个关键的Java库,它们在IT行业中被广泛用于处理PDF文档和创建图表。iText是一个开源的Java库,专门用于生成和修改PDF文档,而JFreeChart则是一个强大的Java图表库,能够生成...

    JFreeChart用户开发指南1.0.6(中文).pdf

    - **开源许可**:JFreeChart严格遵循GNU通用公共许可证,保证了用户对源代码的自由使用和修改。 - **图表类型**:支持多种图表类型,包括但不限于饼图、柱状图、折线图、散点图、时序图、甘特图、仪表盘图等。 ####...

    jfreechart 中文指导

    8. 完全开源,遵循GNU General Public License,允许用户自由地使用和修改源代码。 要获取JFreeChart,你可以访问其官方网站http://www.jfree.org/jfreechart/,在那里你可以找到最新版本的JFreeChart,以及相关的...

    jfreechart-1.0.13 jar包

    1. **iText-2.1.5.jar**:这是一个用于生成 PDF 文档的库,可以与 JFreeChart 结合使用,方便将图表导出为 PDF 格式。 2. **jcommon-1.0.16.jar**:这是 JFreeChart 的一个基础库,包含了颜色、字体、几何形状等...

Global site tag (gtag.js) - Google Analytics