纪念一下,今天完成了我的第一个报表,用到了开源报表工具JasperReport 和 iReport 。
从认识工具到做出第一个报表用了两天多时间,今天终于调出来了。刚把 PDF 的中文显示问题也解决了。
下面谈一下这几天摸索的一些经验:
1 . 工具的选择
公司用的是老的报表开发工具,都可放到博物馆去了。现在的报表制作工具有这么多,于是我决定自己找一个合适的做,刚开始选的是OpenReport。经多方咨询及查资料得知,现在主流的报表制作工具是 JasperReport 。于是开始找资料,还去官方网站下了一些原码参考。
2 . 首先从 iReport 开始,试着做一些简单的,然后是带数据库连接的,顺便看了看 F, P, V 参数的用法。
3 . 然后是 JasperReport ,在参考了大量的资料的基础上,选用以下代码(原因:简单)。当然实现方法太多了,我也不可能介绍完,自己看原码去。
<% ... @ page contentType="text/html;charset=GBK" %>
<% ... @ page import="net.sf.jasperreports.engine.*" %>
<% ... @ page import="net.sf.jasperreports.engine.util.*" %>
<% ... @ page import="net.sf.jasperreports.engine.export.*" %>
<% ... @ page import="java.util.*" %>
<% ... @ page import="java.io.*" %>
<% ... @ page import="java.sql.*" %>
<% ... @ page import="javax.naming.*" %>
<% ... @ page import="javax.sql.*" %>
<% ... @ page import="com.xiaoxin.report.JDBCConnection" %>
<% ...
Statement stmt = null;
Connection conn=null;
JDBCConnection connection = new JDBCConnection();
connection.setJdbcDriver("com.ibm.db2.jcc.DB2Driver");
connection.setJdbcUrl("jdbc:db2://10.252.3.8:50000/lis");
connection.setDbUser("db2inst1");
connection.setDbPassword("db2inst1");
conn = connection.getConnection();
String fileName= "test.jasper";
File reportFile = new File(application.getRealPath(fileName));
Map parameters = new HashMap();
parameters.put("paramTitle", "部门的列表");
//parameters.put("BaseDir", reportFile.getParentFile());
parameters.put("paramPageHeart", "这个是页面的头部");
parameters.put("paramPageHeart", "这个是页面的头部");
parameters.put("paramOrder", "Bmbm");
JasperPrint jasperPrint = JasperFillManager.fillReport(reportFile.getPath(), parameters, conn);
JRExporter exporter = null;
String exportTo = "PDF";
if("HTML".equals(exportTo))
{
exporter = new JRHtmlExporter();
exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE);
}
else if("PDF".equals(exportTo))
{
exporter = new JRPdfExporter();
response.setContentType("application/pdf");
response.setHeader("Content-disposition","attachment; filename=hello.pdf");
}
else if("Excel".equals(exportTo))
{
exporter = new JRXlsExporter();
response.setContentType("application/vnd.ms-excel");
}
else if("ExcelDown".equals(exportTo)){
response.reset();
exporter = new JRXlsExporter();
response.setContentType("application/x-msdownload");
response.setHeader("Content-disposition","attachment; filename=hello.xls");
}
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "GBK");
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, response.getOutputStream());
exporter.exportReport();
try{
}catch(Exception e){
}finally{
conn.close();
}
%>
4 . 最后解决了中文显示的问题,解决方法:
下载 iTextAsian.jar
Font Name : 宋体 PDF Font Name : STSong-Lingt
PDF Embedded PDF Name : UniGB-UCH2-H(Chinese Simplified)
PDF Embedded PDF Name 选中