在Web里面用Jasper导出Pdf、HTML、Excel,以及参数说明

参考: ireport导出各种格式(pdf,excel,word,html,print)的例子:
http://mingxiao2010.blog.163.com/blog/static/861904812010665366872/
说明:
PDF: JRAbstractExporter exporter =new JRPdfExporter();

Excel: JRAbstractExporter exporter = new JRXlsExporter();

HTML: JRAbstractExporter exporter = new JRHtmlExporter();

Word: JRAbstractExporter exporter = new JRRtfExporter();


net.sf.jasperreports.engine.JRXlsExporter.setParameter常用参数说明
JRExporterParameter. JASPER_PRINT
//这个参数是JasperPrint的对象,exporter在导出报表前会做检测

JRExporterParameter. JASPER_PRINT_LIST
//这个参数是包含了n个JasperPrint对象的java.util.List,exporter在导出报表前会做检测

JRExporterParameter.INPUT_STREAM
//这个参数是JasperPrint被序列化对象的输入流,exporter在导出报表前会做检测

JRExporterParameter.INPUT_URL
//这个参数是包含JasperPrint被序列化对象的URL,exporter在导出报表前会做检测

JRExporterParameter.INPUT_FILE_NAME
这个参数是存储了JasperPrint被序列化对象的文件路径,exporter在导出报表前会做检测
注意:以上几个参数不能全部为空

JRExporterParameter.OUTPUT_STRING_BUFFER
//这个参数是java.lang.StringBuffer的对象,存储已经产生出的指定格式报表的内容

JRExporterParameter.OUTPUT_WRITER
//这个参数是java.io.Writer的对象,将指定格式报表的内容发送到一个字符流,例如Servlet的PrintWriter

JRExporterParameter.OUTPUT_STREAM
//这个参数是java.io.OutputStream的对象,将指定格式报表的内容发送到一个输出流,例如ServletOutputStream

JRExporterParameter.OUTPUT_FILE
//这个参数是java.io.FILE的对象,将指定格式报表的内容存储到文件里面

JRExporterParameter.OUTPUT_FILE_NAME
//这个参数是java.lang.String的对象,将指定格式报表的内容存储到文件里面

JRExporterParameter.CHARACTER_ENCODING
//这个参数是java.lang.String的对象,指定格式报表的内容编码

JExcelApiExporterParameter.IS_FONT_SIZE_FIX_ENABLED
//这个参数是java.lang.Boolean的对象,是否允许自动修正Excel每个栏位的大小

JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET
//这个参数是java.lang.Boolean的对象,每一页是否用一个Sheet

JRXlsExporterParameter. IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS
//这个参数是java.lang.Boolean的对象,是否移除行与行之间的空行

JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND
//这个参数是java.lang.Boolean的对象,页面的背景是否为白的

JRXlsExporterParameter.SHEET_NAMES
//这个参数是java.lang.String的对象,Sheet的名字

JRCsvExporterParameter.FIELD_DELIMITER
//这个参数是java.lang.String的对象,栏位之间的分隔符

JRCsvExporterParameter.RECORD_DELIMITER
//这个参数是java.lang.String的对象,栏位之间的分隔符

JRHtmlExporterParameter.IS_OUTPUT_IMAGES_TO_DIR
//这个参数是java.lang.Boolean的对象,是否输出图片到目录

JRHtmlExporterParameter.IMAGES_DIR_NAME
//这个参数是java.lang.String的对象,图片目录的绝对路径

JRHtmlExporterParameter.IMAGES_DIR
//这个参数是java.io.File的对象,图片目录

JRHtmlExporterParameter.IMAGES_URI
//这个参数是java.lang.String的对象,通过Web访问时图片的URI



原文地址:生成例子 http://hi.baidu.com/szmneo/blog/item/cbb4cb22d07565469822edce.html

commons-collections-3.2.jar
commons-logging.jar
jasperreports-3.7.6.jar
jasperreports-applet-3.7.6.jar
commons-digester-2.1.jar
commons-beanutils-1.7.jar
mysql-connector-java-5.0.5.jar
poi-contrib-3.5-beta5-20090219.jar
poi-ooxml-3.5-beta5-20090219.jar
poi-scratchpad-3.5-beta5-20090219.jar
iTextAsian.jar
poi-3.7-20101029.jar
itext-2.1.7.jar
注意后面两个红色的,第一,jasper3.7必须用poi3.6以上;第二,itext必须也是2.1.7以上,关键是itext官方的不能用,⊙﹏⊙b汗,要从jasper下载的包里找到lib,然后用里面的itext才行……

好了,开始代码:ireport设计jasper文件的就不说了

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.HashMap;
import java.util.Map;

import net.sf.jasperreports.engine.JRExporter;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
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.view.JasperViewer;

public class TestIreport {
    public String jasperPath = "F:/测试/report2.jasper";

    public static void main(String[] args) throws Exception {
        TestIreport ti = new TestIreport();
        // ti.getReportHTML();
        ti.getReportPdf();
        //ti.getReportExcel();
    }

    public void getReportPdf() throws Exception {
        Map<String, Object> param = new HashMap<String, Object>();
        param.put("REPORT_CONNECTION", getConn());
        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperPath,
                param);

        JRPdfExporter exporter = new JRPdfExporter();
        exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
        exporter.setParameter(JRExporterParameter.OUTPUT_STREAM,
                "F:/测试/report2.pdf");
        exporter.exportReport();
    }

    public void getReportExcel() throws Exception {
        Map<String, Object> param = new HashMap<String, Object>();
        param.put("REPORT_CONNECTION", getConn());
        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperPath,
                param);
        File destFile = new File(
                "F:/测试/report2.xls");
        JRXlsExporter exporter = new JRXlsExporter();
        exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
        exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, destFile
                .toString());
        exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,
                true);
        exporter.exportReport();
    }

    public void getReportHTML() throws Exception {
        Map<String, Object> param = new HashMap<String, Object>();
        param.put("REPORT_CONNECTION", getConn());
        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperPath,
                param);
        // 使用 JRExporter 来生成 html , 很多参数可以查 api 或 ireport 的属性窗口
        JRExporter htmlExporter = new JRHtmlExporter();
        ByteArrayOutputStream htmlOut = new ByteArrayOutputStream();
        htmlExporter.setParameter(JRHtmlExporterParameter.JASPER_PRINT,
                jasperPrint);
        htmlExporter.setParameter(JRHtmlExporterParameter.OUTPUT_STREAM,
                htmlOut);
        htmlExporter.setParameter(JRHtmlExporterParameter.CHARACTER_ENCODING,
                "utf-8");
        htmlExporter
                .setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN,
                        Boolean.FALSE);
        htmlExporter.exportReport();
        File outFile = new File( "F:/测试/report2.html");
        FileOutputStream os = new FileOutputStream(outFile);
        os.write(htmlOut.toByteArray());
        os.close();
        htmlOut.close();
    }

    public void showReportApplet() throws Exception {
        Map<String, Object> param = new HashMap<String, Object>();
        param.put("REPORT_CONNECTION", getConn());
        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperPath,
                param);
        JasperViewer.viewReport(jasperPrint, false);
    }

    public Connection getConn() {
        String driverClass = "com.mysql.jdbc.Driver";
        String conStr = "jdbc:mysql://127.0.0.1/tt";
        String user = "root";
        String password = "123";

        Connection conn = null;
        try {
            Class.forName(driverClass);
            conn = (Connection) DriverManager.getConnection(conStr, user,
                    password);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn;
    }
}



遇到的问题:poi导致错误的忘记了,O(∩_∩)O哈哈~

Exception in thread "main" java.lang.NoClassDefFoundError: com/lowagie/text/DocumentException
at net.sf.jasperreports.engine.JasperExportManager.exportReportToPdfFile(JasperExportManager.java:121)
at jasperreportsdemoapp.Main.main(Main.java:67)
..............
这个就是开始说的itext包不正确导致的参考下面的网站解决掉了,呵呵
参考:http://blogs.sun.com/geertjan/entry/itext_and_jasper_using_them
其中注意一下提示的错误NoClassDefFoundError,并非是说你没有添加相关的jar包到classpath,而极可能是版本不对,参阅下面:
Difference between ClassNotFoundException and NoClassDefFoundError
http://www.jroller.com/sjivan/entry/difference_between_classnotfoundexception_and_noclassdeffounderror


最后提一下,jasper现在使用需要辅助jar包的情况:

JasperReports Requirements

http://jasperforge.org/website/jasperreportswebsite/trunk/documentation.html?header=project&target=jasperreports




web中应用jasperreport
http://923080512.iteye.com/blog/1396484
在web中使用jasperreport 要导入的包:
           jasperreports-4.5.0.jar
           js_activation-1.1.jar
           iText-2.1.7.jar
           iTextAsian.jar
           groovy-all-1.7.5.jar
           commons-beanutils-1.8.2.jar
           commons-digester-1.7.jar
           commons-collections-3.2.1.jar
           poi-3.7-20101029.jar
方法1:
      
 String filename = ServletActionContext.getServletContext(). 
                           getRealPath("/ireport/report5_Javabean.jasper"); 
        Map<String,Object> map = new HashMap<String,Object>(); 
        map.put("SQLSTR", "select * from syz"); 
        Collection<Syz> collection = service.findAll(); 
        JRDataSource datasource = new JRBeanCollectionDataSource(collection); 
        ServletOutputStream out = response.getOutputStream(); 
        //加载jasper文件,生成JasperReport实例 ; 
        JasperReport report = (JasperReport) JRLoader.loadObject(filename); 
        //填充报表,生成JasperPrint实例 
        JasperPrint print = JasperFillManager.fillReport(report,map,datasource); 
        //JRXlsExporter是excel导出器,JRPdfExporter 是pdf导出器,其他类型以此类推 
        JRAbstractExporter exporter = new JRXlsExporter(); 
        //导出器设置参数 
        exporter.setParameter(JRExporterParameter.JASPER_PRINT, print); 
        exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out); 
        //导出 
        exporter.exportReport(); 


方法2:
       
byte[] b = null ; 
        response.setContentType("application/pdf"); 
        response.setHeader("Content-Disposition","filename="+ 
                 java.net.URLEncoder.encode("Syz_PDF"+new SimpleDateFormat("yyyyMMddHHmmssSS").format(new Date()), "UTF-8")  
    + ".PDF"); 
     //转换成pdf,如果是html,转换后直接response.sendRedirect()	
        b = JasperRunManager.runReportToPdf(filename, map, datasource); 
        out.write(b); 
        out.flush(); 
        out.close(); 

猜你喜欢

转载自panyongzheng.iteye.com/blog/1558501
今日推荐