about jasper report!

本文介绍了使用iReport生成中文PDF报表时遇到的问题及解决方案,包括设置itext中文包、PDF编码、字体选择等内容,并提供了利用MySQL数据库生成PDF报表在Tomcat中显示的方法。
1:解决PDF生成时候的中文问题:

1. ireport生成中文PDF报表时,需设置:
1)增加itext中文包在lib目录下
2)pdf encoding 选 UniGB-UCS2-H (Chinese Simplified)
pdf font name 选 stsong-light
(可以使用View->Report Fonts一次解决)
2. ireport有时侯不能显示数据库中数据的解决方式:
1)每一个element:设置:print when details overflow ;stretch overflow
2)字段高度不够

3. dori.jasper.engine.JRException: Error loading object
  from file : D:\jakarta-tomcat-4.0.1\jakarta-tomcat-4.0.1\webapps\safe\safe1.jasper

新的jasperreport的版本是0.5.2,ireport用的是0.5.0,你把你的搜索路径里面的库换一下就好了

4. 一段测试代码:
package test;

/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: est</p>
* @author mgp
* @version 1.0
*/
import dori.jasper.engine.*;
import dori.jasper.engine.util.*;
import java.sql.*;
import java.util.*;
import dori.jasper.engine.JasperReport;
import java.util.Date;
import java.text.SimpleDateFormat;

public class report {
public report() {
}

public static void main(String[] args){

JRResultSetDataSource jrds=null;
JasperPrint jasperPrint=null;
Map reportParams = new HashMap();
ResultSet rs=null;
Connection con = null;
Statement stmt = null;
String sql = "select * from wms_sku";
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@192.168.0.254:1521:server1";


try {
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(
"C:/est/helix/helix/reports/testdao.jasper");
Class.forName(driver);
con = DriverManager.getConnection(url, "****", "****");
stmt = con.createStatement();
rs = stmt.executeQuery(sql);
if(!rs.next())
return ;
jrds = new JRResultSetDataSource(rs);
jasperPrint =
JasperFillManager.fillReport(
jasperReport,
reportParams,
jrds
);


JasperPrintManager.printReportToPdfFile(jasperPrint, "c:/abcd.pdf");
}
catch (ClassNotFoundException ex) {
ex.printStackTrace();
}
catch (SQLException ex) {
ex.printStackTrace();
}
catch (JRException e) {
e.printStackTrace();
}
}
}

5. 利用mysql数据库,生成pdf报表,在Tomcat中显示:

<%@ page import="dori.jasper.engine.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.io.*" %>
<%@ page import="java.sql.*" %>
<%
File reportFile = new File(application.getRealPath("/reports/mydoc5.jasper"));
Map parameters = new HashMap();

Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url ="jdbc:mysql://localhost/clients?user=sa&password=&useUnicode=true&characterEncoding=GB2312";
Connection conn= DriverManager.getConnection(url);


byte[] bytes =
JasperRunManager.runReportToPdf(
reportFile.getPath(),
parameters,
conn
);

response.setContentType("application/pdf");
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();

%>
note:
1)<%@ page contentType="text/html;charset=gb2312"%> 这句话不能有,不然会提示下载
2)从数据库中获取中文数据Encoding=GB2312是必须的
3)由于ireport使用的jasperreport版本与jasperreport发行的版本不一致,所以会造成很多错误,例如:
dori.jasper.engine.JRException: Error loading object
   from file : D:\jakarta-tomcat-4.0.1\jakarta-tomcat-4.0.1\webapps\safe\safe1.jasper

---------------------------------------

2、预览、打印JasperPrint等:

JasperReports学习笔记

版本:jasperreports-0.6.7
学习资料来源:http://jasperreports.sourceforge.net

一、 需求(requirements)
JasperReports要用到的工具和类
1. JDK(java开发环境)
JDK 1.2.2 or higher
2. XML
JAXP 1.1 XML Parser(XML解析器)

Jakarta Commons Digester Component (version 1.1 or later)
http://jakarta.apache.org/commons/digester/

Jakarta Commons BeanUtils Component (version 1.1 or later)
http://jakarta.apache.org/commons/beanutils/

Jakarta Commons Collections Component (version 1.0 or later)
http://jakarta.apache.org/commons/collections/

Jakarta Commons Logging Component (version 1.0 or later)
http://jakarta.apache.org/commons/logging/
3. JDBC(连接数据库用)
JDBC 2.0 Driver

4. PDF(转换为PDF文件用到)
iText - Free Java-PDF library by Bruno Lowagie and Paulo Soares
(version 1.01 or later)
http://www.lowagie.com/iText/

5. XLS(转换为excel文件用)
Jakarta POI (version 2.0 or later)
http://jakarta.apache.org/poi/

二、快速了解(quick how to)
1. Main classes(主要的类)
用JasperReports 时,用到的主要类
net.sf.jasperreports.engine.JasperCompileManager
net.sf.jasperreports.engine.JasperFillManager
net.sf.jasperreports.engine.JasperPrintManager
net.sf.jasperreports.engine.JasperExportManager
这些类提供了很多静态方法,用来编译、填充、打印和导出报表。详细信息请参考JasperReports的javadoc文档。

net.sf.jasperreports.view.JasperViewer
此类用来预览生成的报表(generated reports.)。

net.sf.jasperreports.view.JasperDesignViewer
此类用来预览报表设计(view the report design)。

2. 编译报表设计Compiling a report design
xml文件定义报表设计(report design)。编译报表设计(report design)产生报表(generate reports)。网页http://jasperreports.sourceforge.net/quick.how.to.html中介绍用net.sf.jasperreports.engine.JasperCompileManager类的静态方法compileReportXXX()来编译报表设计(report design)。但是JasperCompileManager不赞成使用此方法编译报表设计(report design),推荐使用JasperCompileManager的方法compileReportXXX()来代替。
编译报表设计(report design)时,jasperreports engine首先检查模板,确定是否一致,然后转换所有的报表表达式(report expressions),最后产生.jasper文件。 要想使编译工作尽可能灵活,你可以实现接口net.sf.jasperreports.engine.design.JRCompiler。

3.预览报表设计 Viewing a report design
使用net.sf.jasperreports.view.JasperDesignViewer的程序来预览。他的main()方法接受报表设计文件名(xml)或者编译后的.jasper文件。

4. 填充报表 Filling a report
编译报表设计(xml文件)得到报表文件(.jasper),再调用net.sf.jasperreports.engine.JasperFillManager类的方法fillReportXXX(),可以得到报表(JasperPrint)。
5. 预览报表 Viewing a report
Generated reports can be viewed using the net.sf.jasperreports.view.JasperViewer application.
In its main() method, it receives the name of the file which contains the report to view.
我没有测试成功。
6. Printing a report
Generated reports can be printed using the printReport(), printPage() or printPages() static methods exposed by the net.sf.jasperreports.engine.JasperPrintManager class.

7. Exporting to PDF, HTML, XLS, CSV or XML format
填充报表文件(.jasper文件)得到报表(JasperPrint)后,可以使用net.sf.jasperreports.engine.JasperExportManager类的方法exportReportXXX()导出为各种格式的文件PDF,HTML,XML。
After having filled a report, we can also export it in PDF, HTML or XML format using the exportReportXXX() methods of the net.sf.jasperreports.engine.JasperExportManager class.


三、JasperReports的工作流程:

根据上图的流程,JasperReports做报表有一下步骤:

1、 报表设计,可以用ireport可视化工具来实现,生成xml文件。完成后,可以直接到步骤3,直接编译xml文件。
2、 如果已经存在报表设计文件(xml文件),可以用net.sf.jasperreports.engine.xml.JRXmlLoader.load()方法载入报表设计,该方法返回JasperDesign对象,通过JasperDesign对象,可以修改报表设计,比如:添加、删除字段,添加、删除变量,添加、删除分组,等等。
3、 完成报表设计后,接下来就可以编译报设计,编译报表设计可以用类net.sf.jasperreports.engine.JasperCompileManager的compileReport()方法来实现,该方法可以编译xml文件或JasperDesign对象,产生JasperReport对象,JasperReport对象可序列化,能够保存为文件(通常是.jasper文件)。类net.sf.jasperreports.engine.JasperCompileManager还可以把报表转化为报表设计文件(xml文件)。得到JasperReport对象(可从.jasper文件实例化一个JasperReport对象)后,给报表填充数据产生JasperPrint对象。JasperPrint对象可序列化,保存为文件。有了JasperPrint对象后,可以打印、浏览、转换为其他格式的文件,如:PDF,HTML,XML,XLS,CSV等等,这些操作就是我们想得到的最终结果。尽管JasperPrintManager类可以导出为PDF,XML文件,但是不赞成使用JasperPrintManager类来导出,建议用JasperExportManager类来导出PDF,HTML,XML文件;要导出XLS和CSV文件,用专业的导出类net.sf.jasperreports.engine.export.JRXlsExporter类和net.sf.jasperreports.engine.export.JRCsvExporter类
导出为XLS的代码段:
JRXlsExporter exporter = new JRXlsExporter();//创建实例
//设计参数
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, strDestFile);
exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE);
exporter.exportReport();//导出

导出为CSV文件和XLS类似。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值