J2EE使用ireport做导出PDF操作

首先,在lib中,加入一下jar:
[list]
jasperreports-4.5.0.jar //
groovy-all-1.7.5.jar
iText-2.1.7.jar //导出PDF
iTextAsian.jar //导出PDF,解决中文问题
[/list]

使用ireport设计报表时,导出pdf,解决中文问题,需设置下面三个属性
Pdf font name :STSong-Light //简体宋体
Pdf Embedded : 勾选
Pdf Encoding : UniGB-UCS2-H (Chinese Simplified)

把生成的*.jasper文件复制到webroot下面的一个目录。


package net.bingosoft.ireport.servlet;

import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.bingosoft.common.ObjectRegistry;
import net.bingosoft.common.config.Config;
import net.bingosoft.common.data.BaseDao;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.export.JRPdfExporterParameter;
import net.sf.jasperreports.engine.util.FileBufferedOutputStream;
import net.sf.jasperreports.engine.util.JRLoader;

/**
* ireport导出类
* @version 2012-02-29
*
*/
public class IreportServlet extends HttpServlet{

private static final long serialVersionUID = 5306946463388538105L;

private Map<String, Object> params;

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
this.doPost(req, resp);
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
ServletContext servletContext = this.getServletConfig().getServletContext();
//取文件路径标识
String filePathFag = req.getParameter("FILE_PATH_FAG");
//根据文件路径标识,从配置文件中,获取实际路径
String filePath = Config.getString(filePathFag);
File jsperFile = new File(servletContext.getRealPath(filePath));

BaseDao baseDao = ObjectRegistry.getBaseDao();
JasperPrint jasperPrint = null;
params = new HashMap<String, Object>();
try {
//装载.jasper文件
JasperReport jasperReport = (JasperReport)JRLoader.loadObject(jsperFile);
//填充数据
jasperPrint = JasperFillManager.fillReport(jasperReport, this.params, baseDao.getDatasource().getConnection());

} catch (JRException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}

if(null != jasperPrint){
FileBufferedOutputStream fbos = new FileBufferedOutputStream();
JRPdfExporter exporter = new JRPdfExporter();
exporter.setParameter(JRPdfExporterParameter.OUTPUT_STREAM, fbos);
exporter.setParameter(JRPdfExporterParameter.JASPER_PRINT, jasperPrint);

try {
exporter.exportReport();
if(fbos.size()>0){
resp.setContentType("application/pdf");
resp.addHeader("Content-Disposition","attachment; filename=\test.pdf");
resp.setContentLength(fbos.size());
ServletOutputStream outStream = resp.getOutputStream();
try{
fbos.writeData(outStream);
fbos.dispose();
outStream.flush();
}finally{
if(null != outStream){
outStream.close();
}
}
}
} catch (JRException e) {
e.printStackTrace();
}finally{
if(null !=fbos){
fbos.close();
fbos.dispose();
}
}
}
}
}



上面是使用servlet。那么需要在web.xml中,配置自定义的servlet

<servlet>
<servlet-class>net.bingosoft.ireport.servlet.IreportServlet</servlet-class>
<servlet-name>ireportServlet</servlet-name>
</servlet>

<servlet-mapping>
<servlet-name>ireportServlet</servlet-name>
<url-pattern>/ireportServlet</url-pattern>
</servlet-mapping>

导出效果图:
[img]http://dl.iteye.com/upload/picture/pic/108128/2a3caf9a-96ce-3c3e-b346-d781084d70ec.png[/img]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值