2 yangyangrenren yangyangrenren 于 2014.01.14 13:27 提问

在java web工程中·,利用ireport生成的jasper文件,导出pdf文件

我已经用ireport工具生成了jasper文件,并且利用ireport已经可以成功预览并生成pdf文件,但是现在需要在java web工程中,利用jasper文件生成相应的pdf文件,自己测视了好久,在网上也搜了好久,没有找到解决办法,现在把相应代码及错误贴出来,希望会做的朋友帮忙改正一下!
主要的servlet文件,在web.xml中都已将其配置好了
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
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 java.io.File;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import util.JDBCConnection;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.export.JRHtmlExporter;
import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import net.sf.jasperreports.engine.export.JRXlsExporterParameter;
import net.sf.jasperreports.engine.util.JRLoader;

public class JRHTMLServlet extends HttpServlet {
private Connection conn = JDBCConnection.getConnection(); //这个是连接mysql数据库
public JRHTMLServlet() {
super();
}
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String type = request.getParameter("type");

try

{

        ServletContext servletContext = this.getServletContext();  
        File reportFile = new File(servletContext.getRealPath("/")+"/WEB-INF/report/Untitled_report_1.jasper");  
        Map parameters = new HashMap();  
        if("pdf".equals(type)){  
           byte[] bytes = JasperRunManager.runReportToPdf(reportFile.getPath(), parameters, conn);  
           response.setContentType("application/pdf");  
           response.addHeader("Content-Disposition", "attachment; filename=report.pdf");  
           response.setContentLength(bytes.length);  
           ServletOutputStream ouputStream = response.getOutputStream();  
           ouputStream.write(bytes, 0, bytes.length);  
           ouputStream.flush();  
           ouputStream.close();  
        } else if ("excel".equals(type)){  
           JRXlsExporter exporter = new JRXlsExporter();     
           ByteArrayOutputStream oStream = new ByteArrayOutputStream();     
           JasperPrint jasperPrint = JasperFillManager.fillReport(reportFile.getPath(), parameters, conn);     
           exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);     
           exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, oStream);     
           exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE);     
           exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE);     
           exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE);     
           exporter.exportReport();     

           byte[] bytes = oStream.toByteArray();     
           response.setContentType("application/vnd.ms-excel");   
           response.addHeader("Content-Disposition", "attachment; filename=report.xls");  
           response.setContentLength(bytes.length);     
           ServletOutputStream ouputStream = response.getOutputStream();     
           ouputStream.write(bytes, 0, bytes.length);     
           ouputStream.flush();     
           ouputStream.close();     

        } else
        {
             JRHtmlExporter exporter = new JRHtmlExporter();     
             ByteArrayOutputStream oStream = new ByteArrayOutputStream();     
             JasperPrint jasperPrint = JasperFillManager.fillReport(reportFile.getPath(), parameters, conn);     
             exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE);     
             exporter.setParameter(JRHtmlExporterParameter.JASPER_PRINT, jasperPrint);     
             exporter.setParameter(JRHtmlExporterParameter.CHARACTER_ENCODING, "utf-8");     
             exporter.setParameter(JRHtmlExporterParameter.OUTPUT_STREAM, oStream);     
             exporter.exportReport();     
             byte[] bytes = oStream.toByteArray();     
             response.setContentType("text/html");     
             response.setContentLength(bytes.length);     
             response.setCharacterEncoding("utf-8");     
             ServletOutputStream ouputStream = response.getOutputStream();     
             ouputStream.write(bytes, 0, bytes.length);     
             ouputStream.flush();     
             ouputStream.close();
     }
     }  
     catch (JRException jre)  
     {  
        System.out.println("JRException:" + jre.getMessage());  
     }  
     catch (Exception e)  
     {  
        System.out.println("Exception:" + e.getMessage());  
     }  
     finally{  
        try  
        {  
           conn.close();  
        }  
        catch (SQLException ex)  
        {  
           // TODO Auto-generated catch block  
           ex.printStackTrace();  
        }  
     }  

}

    public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    this.doGet(request, response); 
}

}

在jsp文件中的主要代码:
Servlet中生成pdf
Servlet中生成excel
Servlet中生成html

然后编译都没有问题,在执行时,如果点击了“Servlet中生成pdf”超链接,就会提示错误:
JRException:Error evaluating expression :
Source text : new java.lang.Integer(1)

若点击“Servlet中生成excel”超链接,就会提示错误:
严重: Servlet.service() for servlet JRHTMLServlet threw exception
java.lang.ClassNotFoundException: org.apache.poi.ss.usermodel.Sheet

若点击“Servlet中生成html”超链接,就会提示错误:
JRException:Error preparing statement for executing the report query :

SELECT
customer.ID AS customer_ID,
customer.USERNAME AS customer_USERNAME,
customer.PASSWORD AS customer_PASSWORD,
customer.REALNAME AS customer_REALNAME,
customer.ADDRESS AS customer_ADDRESS,
customer.MOBILE AS customer_MOBILE,
customer.IDCARD_ID AS customer_IDCARD_ID
FROM
customer customer

以上三种都试了,执行时,页面都可以跳转,但是跳转之后,都没有显示,直接出错了,我尝试了好久好久,确实不知道是什么问题,还请各位帮忙看看啊,在这里先谢谢你们啦
附:数据库的连接:
String url = "jdbc:mysql://localhost/test";
String userName = "root";
String password = "123456";
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection(url, userName,password);
数据库表里面有中文,应该没有影响,现在只要求可以在web工程中导出pdf就可以了

1个回答

jieyaqin0128
jieyaqin0128   2015.05.02 18:32

ireport的导出功能早就被吐槽n次了。。还是用finereport靠谱点

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
【iReport+JasperReport】2.在Java工程中利用jasper导出PDF报表
我们上一次成功的利用iReport工具制作了一张报表,并且预览了报表最后的效果,也生成了格式为“jrpxml”、“jrxml”与“jasper”的文件。这次,我们使用jasper提供的java的api去利用在iReport中制作的报表jasper文件来生成真正的报表文件。 本文以生成pdf格式的报表文件为例,该报表文件包含所有男用户的信息。 首先我们打开MyEclipse,在其中创建一
【iReport+JasperReport】3.在Java工程中用jasper导出Excel报表
上一次我们使用JasperReport导出了PDF格式的报表文件,我们这次利用同样的jasper文件,来在硬盘中导出Excel报表。 实现导出的Java的详细代码请查看上一篇,这里只修改最后的启动类代码。 我们先回顾一下jasper的实际效果: 然后我们修改一下启动类代码,之前打印pdf的代码为: package com.cn.org.ireport.test; impo
ireport中使用java进行pdf转化,jasper作为模板
/** * 导出pdf * @param list */ public void pdfExport(List list) { File file = new File("E:\\1.jasper"); JasperReport report = null; JasperPrint jasperPrint = null; try { report = (J
iReport+JasperReport实现数据库记录导出到pdf文档
本文主要介绍使用iReport以可视化的方式来生成JasperReport所使用的报表格式文件,并通过JasperReport提供的API将数据导出到pdf格式的文件中(当然还可以导出其他如html、excel格式等文件)。 在这里iReport的使用版本为iReport-4.7.1。JasperReport使用的是4.7.1。由于导出到pdf,JasperReport用到iText库,
JasperReport(3)——Java简单使用IReport生成的文件建立报表
先看看设计的报表样式:  reportTitle是新添加的一个参数,而其他的id和name是通过数据源得到的Filed。IReport在设置参数的时候需要先在左边新建一个parameter,然后再把该parameter托到右边的设计栏中。   生成的XML文件为:
用ireport+jasperReport 生成PDF
最近在公司项目中用到了 ireport 和jasperreport来生成PDF用ireport画的模板就不附上了。直接看生成pdf的部分。private void generatePDF(String jasperFilePath, String pdfFilePath, CotsFIRCAlertDTO alertDto) throws Exception { log.info("enter generatePDF......"); List tmpList = new ArrayList()
jasperReport5.6.0生成PDF(一)
Jasperreport5.6.0生成PDF   最近项目中需要生成报表,先是看了下itext,觉得还可以,但是如果数据字段多的话,不太灵活。所以后来看了下ireport,觉得还可以,下面简单说一下它们: jasperreport JasperReport是一个强大、灵活的报表生成工具,能够展示丰富的页面内容,并将之转换成PDF,
jasperreport + ireport 导出各种类型文件(word,excel,html,pdf,打印) .
在做ireport时,数据的来源有两种方法: 1)在使用ireport画表时,直接写好sql。java程序直接执行sql。 2)先要编写程序得出数据,如list,再把list传入。 对于第一种方法,优点很明显,不用写太多代码,但是不太灵活,如果要在得出的数据上做些处理,或一条sql无法获得想要的数据,这个时候,就要使用第二种方法。这也就是本文的重点所在。如何写出一个可以导出各种文件类型(wo
jasperreport 生成pdf实现下载与打印
通过ireport生成模版,使用jasperreport调用模版,通过servlet生成pdf格式的文件,显示于页面以实现本地打印功能
java程序调用iReport生成的.jasper文件的方法
1:导入jasperreports-1.3.3.jar文件 2:编写一个servlet 如下 3:在web.xml中配置IReportServlet