ireport 5.5初级教程之饼图制作过程

作者:白雪 | 创建时间: 2023-08-01
ireport 5.5初级教程之饼图制作过程,本文介绍ireport中饼图的具体实现方法...
ireport 5.5初级教程之饼图制作过程

操作方法

Ireport所需环境:ireport 4.0.2, mysql 5.1 目标:饼图,百分比,PDF中文 一.DB如图:

数据源配置略. 创建SQL语句: select count(id) as id,department from piechart group by department;

二.创建饼图

一路下一步到key and values的时候 填写如下:

然后完成.拖动改变下大小后

点击preview可以查看预览生成结果如下:

三.为饼图添加百分比显示 在饼图属性里面:

填写如下: {0}{2} 说明:{0}为名称 {1}为数量 {2}为百分比 在次预览如图:

四.PDF预览中文问题 4.0.2中pdf预览中文依然存在问题,默认对静态文本将不会显示中文,依旧悲剧. 可以采用原来的办法,既加入itext-asian.jar到classpath中,然后修改 pdf font name 和pdf encoding的办法来显示中文,但这种做法ireport已经抛弃,这里采用另一种做法. 下载truetype字体,我下载的是微软雅黑字体:

选择[工具]->[选项]->[ireport]下font卡牌栏,install font,然后选择刚下载的字体文件,下一步如图:

然后完成.这时候直接预览pdf的话还是悲剧,还要做最后一步修改. 在static text的属性里面修改

Font name为雅黑字体.然后预览: 设计好报表后,把*.jasper文件拷贝到工程中,可以开始编码了,但是上一篇写的只是设计器中预览出现中文,而程序生成的PDF报表依旧不能显示中文,这篇将会做个补充. 先填代码吧:

Java代码 1.    package cn.com.gkhb.ireport.demo; 2. 3.    import java.sql.Connection; 4.    import java.sql.DriverManager; 5.    import java.sql.SQLException; 6.    import java.util.HashMap; 7. 8.    import net.sf.jasperreports.engine.JRException; 9.    import net.sf.jasperreports.engine.JRExporter; 10. import net.sf.jasperreports.engine.JRExporterParameter; 11. import net.sf.jasperreports.engine.JasperFillManager; 12. import net.sf.jasperreports.engine.JasperPrint; 13. import net.sf.jasperreports.engine.export.JRPdfExporter; 14. 15. /** 16.  * 导入报表为pdf文件 17.  */ 18. public class ExportDemo { 19.     /** 20.      * 报表模板位置 21.      */ 22.     private final static String jasperfile = "E:/myeclipse/IreportDemo/WebRoot/WEB-INF/jasperfiles/pieChart.jasper"; 23. 24.     /** 25.      * 目标文件位置 26.      */ 27.     private final static String desc = "G:/download/font/pie_chart_demo.pdf"; 28. 29.     /** 30.      * register database driver for mysql 31.      */ 32.     static { 33.         try { 34.             Class.forName("com.mysql.jdbc.Driver"); 35.         } catch (ClassNotFoundException ex) { 36.             ex.printStackTrace(); 37.         } 38.     } 39. 40.     @SuppressWarnings("unchecked") 41.     public static void main(String[] args) { 42.         HashMap hm = new HashMap(); 43.         try { 44.             // Fill the report using an empty data source 45.             JasperPrint print = JasperFillManager.fillReport(jasperfile, hm, connectionProvider()); 46. 47.             // Create a PDF exporter 48.             JRExporter exporter = new JRPdfExporter(); 49. //          JRExporter exporter = new JRHtmlExporter(); 50. 51.             // Configure the exporter (set output file name and print object) 52.             exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, desc); 53.             exporter.setParameter(JRExporterParameter.JASPER_PRINT, print); 54. 55.             // Export the PDF file 56.             exporter.exportReport(); 57.         } catch (JRException e) { 58.             e.printStackTrace(); 59.             System.exit(1); 60.         } catch (Exception e) { 61.             e.printStackTrace(); 62.             System.exit(1); 63.         } 64.     } 65. 66.     /** 67.      * database connection provider 68.      * @return 69.      */ 70.     protected static Connection connectionProvider() { 71.         Connection connection = null; 72.         String url = "jdbc:mysql://localhost:3306/test"; 73.         String user = "root"; 74.         String password = ""; 75.         try { 76.             connection = DriverManager.getConnection(url, user, password); 77.         } catch (SQLException ex) { 78.             ex.printStackTrace(); 79.         } 80.         return connection; 81.     } 82. 83.     /* 84.      * jpeg 85.     JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters_header, dataSource); 86.     out = response.getOutputStream(); 87.     JasperExportManager.exportReportToPdfStream(jasperPrint, out); 88. 89.     if (printType==0)  //if pdf stream 90.     { 91.         JasperExportManager.exportReportToPdfStream(jasperPrint, out); 92.     } else {         // if jpeg image stream 93.         int pageIndex = 0; 94.         BufferedImage pageImage = new BufferedImage(jasperPrint.getPageWidth() + 1, jasperPrint.getPageHeight() + 1, BufferedImage.TYPE_INT_RGB); 95.         JRGraphics2DExporter exporter = new JRGraphics2DExporter(); 96.         exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); 97.         exporter.setParameter(JRGraphics2DExporterParameter.GRAPHICS_2D, pageImage.getGraphics()); 98.         exporter.setParameter(JRExporterParameter.PAGE_INDEX, new Integer(pageIndex)); 99.         exporter.exportReport(); 100.         ImageIO.write(pageImage, "jpeg", out); 101.     } 102.     out.close(); 103.      */ 104. }

这个时候如果需要PDF生成后显示中文,需要把安装的字体打包成JAR导入classpath中去,步骤如下: 进入ireport安装目录下,然后进入:\ireport\fonts文件夹,用将文件夹下所有内容直接打包成zip,修改后缀为jar,加入到项目classpath就OK了,此时应该就能生成pdf中有中文显示了

同为比较常用的java报表生成工具,FineReport对饼图的解决方案和实现方法与ireport有所不同,具体实现思路和步骤如下,供ireport使用者借鉴:

复合饼图和复合条饼图 1. 问题描述 当饼图中的多个数据点均小于饼图的10%时,便很难辨别扇区,怎样使小扇区在饼图中更清晰可见,这时就可以使用第二绘图区制作复合饼图或者复合条饼图来解决,如下图效果: ·         复合饼图

·         复合条饼图

2. 实现原理 复合饼图和复合条饼图将小扇区从主饼图中分离出来,放在第二绘图区,可设置为饼图或堆积条形图,百分比的大小还可手动设置。

3. 示例 3.1 打开报表 打开报表%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Advanced\Chart\3Darea.cpt。

3.2 设置百分比数据模板 复合饼图和复合条饼图只支持百分比的系列分割方式,因此我们计算每个地区的应付金额所占比例是多少,隐藏B列,在C1中输入占比,C2中输入公式:=B2/SUM(B2[!0]),B2[!0]是B2扩展出来所以单元格,根据情况设置单元格样式等操作。

3.3 复合饼图 下面以制作复合饼图为例,选中图表,勾选图表属性表-样式>系列中的第二绘图区,将第二绘图区小于百分比的数据改为10,默认为5,表示第二绘图区包含所有小于该百分比的值为,如下图:

注:第二绘图区内容可选择饼状和条形,选择饼状即复合饼图,选择条形即复合条形图。 根据情况可设置系列标签样式,勾选图表属性表-样式>系列中的标签,选中值,设置格式,百分比保留两位小数。

3.4 修改图表数据 修改图例项(系列)值为C2单元格,复合饼图则可设置完成。

3.5 预览与保存 保存模板,点击分页预览,即可看到效果。

点击展开全文

更多推荐