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格式的话,输出的图片不会出现上述问题,这一点值得注意。
分享到:
相关推荐
本篇文章将深入探讨三个流行的Java库——JFreeChart、Cewolf和iText,它们分别用于创建静态图表、交互式Web报表以及PDF文档生成。 **JFreeChart** 1. **JFreeChart介绍**:JFreeChart是一个开源的Java库,专门用于...
通过上述步骤,我们不仅解决了JFreechart在生成PDF时中文不显示的问题,还了解了如何利用iText和自定义字体映射器进行文本渲染。这为在Java项目中创建包含中文内容的高质量PDF文档提供了有效的解决方案。在实际开发...
总结,JSP结合JFreeChart和IText,可以实现动态网页上的数据可视化,并且能够生成包含这些图表的高质量PDF文档。这在数据分析、报表生成、数据展示等场景中非常有用。通过熟练掌握这两个库的使用,开发者可以更高效...
该资源是用JFreeChart、itext、itextasian进行图表演示、pdf操作的案例程序。文件夹Lib包含四个.jar包:iText5.0.6、iTextAsian1.5.2、jcommon1.0.6和jfreechart1.0.13。
压缩包中的"相关教程"应包含jFreeChart的使用指南和示例代码,对于初学者来说非常有价值。描述中提到的"两个简单的实例源代码",可能是演示如何创建和显示柱状图或饼图的代码,通过这些实例,你可以快速了解...
在实际应用中,开发者通常会先用JFreeChart创建图表,将其保存为临时的图像文件,然后使用iText的`Image.getInstance()`方法读取该图像并插入到PDF文档中。这样,就可以将动态生成的图表与iText的文本处理能力相结合...
JFreeChart是一组功能强大、灵活易用的Java绘图API,使用它可以生成多种通用性的报表,包括柱状图、饼图、...本文将通过引领读者学习在JFreeChart中饼图、柱状图和曲线图的进阶应用,来达到熟练使用JFreeChart的目的。
本篇将深入探讨两个知名的开源工具:JFreeChart和iText,以及如何利用它们创建出专业且功能丰富的报表。 首先,JFreeChart是一款强大的Java库,它允许开发者创建各种类型的图表,如折线图、柱状图、饼图、散点图等...
本项目结合了几个关键的开源组件,包括jspSmartUpload、JavaMail、jaf、iText和jFreechart,来实现这些功能。下面将详细阐述这些组件的作用和使用方法。 1. **jspSmartUpload**:这是一个专门用于文件上传的JSP组件...
使用JFreeChart的基本步骤包括创建数据源、选择图表类型、设置图表参数和绘制图表。 - **创建数据源**:数据源可以是简单的数组、列表,也可以是更复杂的数据结构如`CategoryDataset`、`TimeSeriesCollection`等。 ...
JFreeChart是开放源代码站点SourceForge.net上的一个JAVA项目,它主要用来各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等 ...
**JFreeChart报表小demo** 是一个基于Java的项目,主要展示了如何使用JFreeChart库创建各种图表,如饼图、柱状图和线图,并将这些图表嵌入到PDF文档中,使用了iText库进行PDF处理。这个项目非常适合初学者了解数据...
总结一下,JFreeChart的这些依赖文件共同为Java开发者提供了创建专业、美观图表的能力,包括核心的图表生成库JFreeChart,辅助图形处理的JCommon,PDF处理的iText,以及XML处理的gnujaxp。它们是构建数据可视化应用...
标题 "iText PDF & JFreeChart" 涉及到两个关键的Java库,它们在IT行业中被广泛用于处理PDF文档和创建图表。iText是一个开源的Java库,专门用于生成和修改PDF文档,而JFreeChart则是一个强大的Java图表库,能够生成...
- **开源许可**:JFreeChart严格遵循GNU通用公共许可证,保证了用户对源代码的自由使用和修改。 - **图表类型**:支持多种图表类型,包括但不限于饼图、柱状图、折线图、散点图、时序图、甘特图、仪表盘图等。 ####...
8. 完全开源,遵循GNU General Public License,允许用户自由地使用和修改源代码。 要获取JFreeChart,你可以访问其官方网站http://www.jfree.org/jfreechart/,在那里你可以找到最新版本的JFreeChart,以及相关的...
1. **iText-2.1.5.jar**:这是一个用于生成 PDF 文档的库,可以与 JFreeChart 结合使用,方便将图表导出为 PDF 格式。 2. **jcommon-1.0.16.jar**:这是 JFreeChart 的一个基础库,包含了颜色、字体、几何形状等...