ireport教程之饼图制作过程

fineiris

贡献于2015-05-04

字数:0 关键词: 图表/报表制作

ireport 教程之饼图制作过程 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/IreportDe mo/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(jasperfil e, 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 o bject) 52. exporter.setParameter(JRExporterParameter.OUTPUT_FILE_ NAME, desc); 53. exporter.setParameter(JRExporterParameter.JASPER_PRIN T, 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, pass word); 77. } catch (SQLException ex) { 78. ex.printStackTrace(); 79. } 80. return connection; 81. } 82. 83. /* 84. * jpeg 85. JasperPrint jasperPrint = JasperFillManager.fillReport(jasperRep ort, parameters_header, dataSource); 86. out = response.getOutputStream(); 87. JasperExportManager.exportReportToPdfStream(jasperPrint, ou t); 88. 89. if (printType==0) //if pdf stream 90. { 91. JasperExportManager.exportReportToPdfStream(jasperPrin t, out); 92. } else {// if jpeg image stream 93. int pageIndex = 0; 94. BufferedImage pageImage = new BufferedImage(jasperPrint. getPageWidth() + 1, jasperPrint.getPageHeight() + 1, BufferedIma ge.TYPE_INT_RGB); 95. JRGraphics2DExporter exporter = new JRGraphics2DExporter (); 96. exporter.setParameter(JRExporterParameter.JASPER_PRINT, ja sperPrint); 97. exporter.setParameter(JRGraphics2DExporterParameter.GRAP HICS_2D, pageImage.getGraphics()); 98. exporter.setParameter(JRExporterParameter.PAGE_INDEX, ne w 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\Cha rt\3Darea.cpt。 3.2 设置百分比数据模板 复合饼图和复合条饼图只支持百分比的系列分割方式,因此我们计算每个地 区的应付金额所占比例是多少,隐藏 B 列,在 C1 中输入占比,C2 中输入公式: =B2/SUM(B2[!0]),B2[!0]是 B2 扩展出来所以单元格,根据情况设置单元格 样式等操作。 3.3 复合饼图 下面以制作复合饼图为例,选中图表,勾选图表属性表-样式>系列中的第二 绘图区,将第二绘图区小于百分比的数据改为 10,默认为 5,表示第二绘图区 包含所有小于该百分比的值为,如下图: 注:第二绘图区内容可选择饼状和条形,选择饼状即复合饼图,选择条形即 复合条形图。 根据情况可设置系列标签样式,勾选图表属性表-样式>系列中的标签,选中 值,设置格式,百分比保留两位小数。 3.4 修改图表数据 修改图例项(系列)值为 C2 单元格,复合饼图则可设置完成。 3.5 预览与保存 保存模板,点击分页预览,即可看到效果。

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 6 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档

相关文档