您的位置首页百科问答

ireport

ireport

Ireport所需环境:ireport4.0.2,mysql5.1目标:饼图,百分比,PDF中文一.DB:

数据源配置略.创建SQL语句:selectcount(id)asid,departmentfrompiechartgroupbydepartment;

二.创建饼图

一路下一步到keyandvalues的时候填写如下:

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

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

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

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

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

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

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

Fontname为雅黑字体.然后预览:

设计好报表后,把*.jasper文件拷贝到工程中,可以开始编码了,但是上一篇写的只是设计器中预览出现中文,而程序生成的PDF报表依旧不能显示中文,这篇将会做个补充.先填代码吧:Java代码1. packagecn.com.gkhb.ireport.demo;2. 3. importjava.sql.Connection;4. importjava.sql.DriverManager;5. importjava.sql.SQLException;6. importjava.util.HashMap;7. 8. importnet.sf.jasperreports.engine.JRException;9. importnet.sf.jasperreports.engine.JRExporter;10. importnet.sf.jasperreports.engine.JRExporterParameter;11. importnet.sf.jasperreports.engine.JasperFillManager;12. importnet.sf.jasperreports.engine.JasperPrint;13. importnet.sf.jasperreports.engine.export.JRPdfExporter;14. 15. /**16. *导入报表为pdf文件17. */18. publicclassExportDemo{19. /**20. *报表模板位置21. */22. privatefinalstaticStringjasperfile="E:/myeclipse/IreportDemo/WebRoot/WEB-INF/jasperfiles/pieChart.jasper";23. 24. /**25. *目标文件位置26. */27. privatefinalstaticStringdesc="G:/download/font/pie_chart_demo.pdf";28. 29. /**30. *registerdatabasedriverformysql31. */32. static{33. try{34. Class.forName("com.mysql.jdbc.Driver");35. }catch(ClassNotFoundExceptionex){36. ex.printStackTrace();37. }38. }39. 40. @SuppressWarnings("unchecked")41. publicstaticvoidmain(String[]args){42. HashMaphm=newHashMap();43. try{44. //Fillthereportusinganemptydatasource45. JasperPrintprint=JasperFillManager.fillReport(jasperfile,hm,connectionProvider());46. 47. //CreateaPDFexporter48. JRExporterexporter=newJRPdfExporter();49. //JRExporterexporter=newJRHtmlExporter();50. 51. //Configuretheexporter(setoutputfilenameandprintobject)52. exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME,desc);53. exporter.setParameter(JRExporterParameter.JASPER_PRINT,print);54. 55. //ExportthePDFfile56. exporter.exportReport();57. }catch(JRExceptione){58. e.printStackTrace();59. System.exit(1);60. }catch(Exceptione){61. e.printStackTrace();62. System.exit(1);63. }64. }65. 66. /**67. *databaseconnectionprovider68. *@return69. */70. protectedstaticConnectionconnectionProvider(){71. Connectionconnection=null;72. Stringurl="jdbc:mysql://localhost:3306/test";73. Stringuser="root";74. Stringpassword="";75. try{76. connection=DriverManager.getConnection(url,user,password);77. }catch(SQLExceptionex){78. ex.printStackTrace();79. }80. returnconnection;81. }82. 83. /*84. *jpeg85. JasperPrintjasperPrint=JasperFillManager.fillReport(jasperReport,parameters_header,dataSource);86. out=response.getOutputStream();87. JasperExportManager.exportReportToPdfStream(jasperPrint,out);88. 89. if(printType==0)//ifpdfstream90. {91. JasperExportManager.exportReportToPdfStream(jasperPrint,out);92. }else{//ifjpegimagestream93. intpageIndex=0;94. BufferedImagepageImage=newBufferedImage(jasperPrint.getPageWidth()+1,jasperPrint.getPageHeight()+1,BufferedImage.TYPE_INT_RGB);95. JRGraphics2DExporterexporter=newJRGraphics2DExporter();96. exporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);97. exporter.setParameter(JRGraphics2DExporterParameter.GRAPHICS_2D,pageImage.getGraphics());98. exporter.setParameter(JRExporterParameter.PAGE_INDEX,newInteger(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预览与保存保存模板,点击分页预览,即可看到效果。

抖音看短剧