1. 程式人生 > >jasperreport實現Html、Pdf、Rtf、 Excel、Xml報表匯出

jasperreport實現Html、Pdf、Rtf、 Excel、Xml報表匯出

1.資料來源(JRDataSource)

import java.util.ArrayList;
import java.util.List;

import lbc.report.baseqry.QryData;
import lbc.report.bean.VioWritJycfjds;
import lbc.report.bean.base.BaseVioWritJycfjds;

import org.hibernate.Session;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRField;

/**
 * @類名:ReportDataSource.java
 * @類功能描述: 產生報表填充需要使用的資料來源
 * @author lbc
 * @version v1.0.0.1
 * @see 
 */
p lic class ReportDataSource implements JRDataSource {
  
  private int index = -1;
  private static QryData qryData=new QryData();
  private static List list=new ArrayList();
  
  static
  {
   String SQL="select * from VIO_WRIT_JYCFJDS";
   list=qryData.sqlQry(SQL, VioWritJycfjds.class);
  }
  p lic Object getFieldVal(JRField field) throws JRException {
   String fieldName=field.getName();
   
   if(fieldName.eq ls("bh"))
   {
    return ((VioWritJycfjds)list.get(index)).getId();
   }
   if(fieldName.eq ls("bt"))
   {
    return ((VioWritJycfjds)list.get(index)).getJybt();
   }
    
   if(fieldName.eq ls("sfjg") && (((VioWritJycfjds) list.get(index)).getJysfjg())!=null && (((VioWritJycfjds) list.get(index)).getJysfjg()).eq ls("1"))
   {
     return "\√";
   }
   
 }

2.JasperPrintWithJRDataSource類

import java.io.File;
import java.util.Map;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.util.JRLoader;

/**
 * @類名:JasperPrintWithJRDataSource.java
 * @類功能描述: 使用報表模板及資料等生成JasperPrint
 * @author lbc
 * @version v1.0.0.1
 * @see 
 */

/**
 * 使用報表模板及資料等生成JasperPrint
 * */
p lic class JasperPrintWithJRDataSource {
 
 /**傳入的引數**/
 private Map params;
 
 /**jrxml檔案**/
 private String jrxmlFilePath;
 
 /** 模板檔案的地址**/
 private String reportFilePath;
 
 /**JRDataSource**/
 private JRDataSource dataSource;

 p lic JRDataSource getDataSource() {
  return dataSource;
 }

 p lic void setDataSource(JRDataSource dataSource) {
  this.dataSource = dataSource;
 }

 p lic String getJrxmlFilePath() {
  return jrxmlFilePath;
 }

 p lic void setJrxmlFilePath(String jrxmlFilePath) {
  this.jrxmlFilePath = jrxmlFilePath;
 }

 p lic Map getParams() {
  return params;
 }

 p lic void setParams(Map params) {
  this.params = params;
 }

 p lic String getReportFilePath() {
  return reportFilePath;
 }

 p lic void setReportFilePath(String reportFilePath) throws Exception {
  
  if(reportFilePath==null || !reportFilePath.endsWith(".jasper"))
   throw new Exception("傳入的模板檔案格式不對,請傳入以.jasper為字尾的檔案!");
  this.reportFilePath = reportFilePath;
 }
 
 p lic JasperPrintWithJRDataSource () {
  
  super();
 }
 
 p lic JasperPrintWithJRDataSource(String jrxmlFilePath,String reportFilePath,Map params,JRDataSource dataSource) throws Exception {
  
  if(jrxmlFilePath==null || !jrxmlFilePath.endsWith(".jrxml"))
   throw new Exception("模板檔案格式不對,請傳入以.jrxml為字尾的檔案!");
  
  if(dataSource==null)
   throw new Exception("dataSource不應當為null!");
  this.setJrxmlFilePath(jrxmlFilePath);
  this.setReportFilePath(reportFilePath);
  this.setParams(params);
  this.setDataSource(dataSource);
 }
 
 /**
  * 取得JasperPrint
  */
 
 p lic JasperPrint getJasperPrint() throws Exception {
  
  //編譯成.Jasper檔案
  JasperCompileManager.compileReportToFile(this.jrxmlFilePath);
  
  File reportFile=new File(this.reportFilePath);
  if(!reportFile.exists())
   throw new Exception("傳入的模板檔案不存在!");
  
  try {
   
   //LOAD 編譯好的模板
   JasperReport jasperReport=(JasperReport) JRLoader.loadObject(reportFile.getPath());
   //進行資料填充
   JasperPrint jasperPrint=JasperFillManager.fillReport(jasperReport, this.params, this.dataSource);
   return jasperPrint;
  } catch (JRException jre) {
   jre.printStackTrace();
   throw new Exception("資料填充發生錯誤,請檢查資料庫源和用來填充的引數map是否有誤!");
  }
 }
}

3.匯出HTML格式報表

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;

import javax.servlet.http.HttpServletReqst;
import javax.servlet.jsp.JspWriter;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.export.JRHtmlExporter;
import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;
import net.sf.jasperreports.j2ee.servlets.ImageServlet;

/**
 * @類名:HTMLExport.java
 * @類功能描述: 利用報表生成HTML格式報表
 * @author lbc
 * @version v1.0.0.1
 * @see 
 */

/*
 * 利用報表生成HTML格式報表
 */
p lic class HTMLExport {
 
 /*
  * 匯出報表
  */
 
p lic void export(HttpServletReqst reqst,HttpServletResponse response,String jrxmlFilePath,String reportFilePath,Map params,JRDataSource dataSource) throws Exception {
  
  try {
   
   response.reset();
   response.setContentType("text/html; charset=GBK");
   PrintWriter writer=response.getWriter();
   
   try {
    JasperPrint jasperPrint=new JasperPrintWithJRDataSourceNew(jrxmlFilePath,reportFilePath,params,dataSource).getJasperPrint();
    // 使用JRHtmlExporter匯出Html格式
    JRHtmlExporter exporter=new JRHtmlExporter();
    reqst.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);
    exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
    exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, writer);
    //報表邊框圖片設定"report/image?image=",report為你的報表及PX圖片所在目錄
    //exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "report/image?image=");
    //報表邊框圖片設定 IS_USING_IMAGES_TO_ALIGN,Boolean.FALSE,不使用圖片
    exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN,Boolean.FALSE);
    exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "GBK");
    //匯出
    exporter.exportReport();
   } catch (Exception e) {
    e.printStackTrace();
    throw new Exception("匯出HTML格式報表時發生錯誤!");
   }finally{
    if(writer!=null)
    {
     try {
      writer.close();
     } catch (Exception e) {
      e.printStackTrace();
     }
    }
   }
   
  } catch (IOException ioe) {
   ioe.printStackTrace();
  }
  throw new Exception("使用JRHtmlExporter匯出Html格式時發生錯誤!");
 }

4.匯出Pdf報表

import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletOutputStream;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletReqst;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.export.JRPdfExporterParameter;

/**
 * @類名:PdfExport.java
 * @類功能描述: 匯出PDF報表
 * @author lbc
 * @version v1.0.0.1
 * @see 
 */
p lic class PDFExport {
 
 p lic void exportToPDF(HttpServletReqst reqst,HttpServletResponse response,String jrxmlFilePath,String reportFilePath,Map params,JRDataSource dataSource) throws Exception
 {
    try{
          response.reset();

          response.setContentType("application/pdf;charset=GBK");
           //得到jasperPrint物件
     JasperPrint jasperPrint=new JasperPrintWithJRDataSourceNew(jrxmlFilePath,reportFilePath,params,dataSource).getJasperPrint();
           JRPdfExporter pdfexporter = new JRPdfExporter();
           pdfexporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
           //設定輸出流
           pdfexporter.setParameter(JRExporterParameter.OUTPUT_STREAM, response.getOutputStream());
           //如果儲存到硬碟用下面語句
           //pdfexporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, "c:\\mypdf.pdf");
     pdfexporter.setParameter(JRPdfExporterParameter.IS_ENCRYPTED, Boolean.FALSE);
     pdfexporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "GBK");
     pdfexporter.exportReport();
     System.out.println("Done!");
 }catch(IOException e){
  e.printStackTrace();
    }

 }
}

5.匯出RTF報表

import java.io.IOException;
import java.util.Map;

import javax.servlet.http.HttpServletReqst;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.JspWriter;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.export.JRRtfExporter;

/**
 * @類名:RTFExport.java
 * @類功能描述:匯出RTF報表 
 * @author lbc
 * @version v1.0.0.1
 * @see 
 */
p lic class RTFExport {
 
 p lic void exportToRtf(HttpServletReqst reqst,HttpServletResponse response,String jrxmlFilePath,String reportFilePath,Map params,JRDataSource dataSource) throws Exception {
  
  try {
   JasperPrint jasperPrint=new JasperPrintWithJRDataSourceNew(jrxmlFilePath,reportFilePath,params,dataSource).getJasperPrint();
   JRRtfExporter rtfExporter=new JRRtfExporter();
   rtfExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
   //設定匯出檔名
   rtfExporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, "c://myrtf.rtf");
   rtfExporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "GB2312");
   rtfExporter.exportReport();
   System.out.println("Done!");
  } catch (IOException e) {
   e.printStackTrace();
  }
 }

}

6.匯出XML報表

import java.io.IOException;
import java.util.Map;

import javax.servlet.http.HttpServletReqst;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.export.JRXmlExporter;

/**
 * @類名:XMLExport.java
 * @類功能描述: 匯出XML報表
 * @author lbc

 * @version v1.0.0.1
 * @see 
 */
p lic class XMLExport {
 
 p lic void exportToXml(HttpServletReqst reqst,HttpServletResponse response,String jrxmlFilePath,String reportFilePath,Map params,JRDataSource dataSource) throws Exception  {
  
  try {
   JasperPrint jasperPrint=new JasperPrintWithJRDataSourceNew(jrxmlFilePath,reportFilePath,params,dataSource).getJasperPrint();
   JRXmlExporter xmlExporter=new JRXmlExporter();
   xmlExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
   xmlExporter.setParameter(JRExporterParameter.OUTPUT_STREAM, response.getOutputStream());
   xmlExporter.exportReport();
   response.setContentType("text/xml");
   System.out.println("Done!");
  } catch (IOException e) {
   e.printStackTrace();
  }
 }

}

由於在瀏覽器中開啟Xml時,在頁面設定裡需進行內容型別的設定,因此最好在JSP頁面中加上如下程式碼:

7.匯出Excel報表

import java.io.IOException;
import java.util.Map;

import javax.servlet.http.HttpServletReqst;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import net.sf.jasperreports.engine.export.JRXlsExporterParameter;

/**
 * @類名:EXCELExport.java
 * @類功能描述: 匯出Excel報表
 * @author lbc
 * @version v1.0.0.1
 * @see 
 */
p lic class EXCELExport {
 
 p lic void exportToExcel(HttpServletReqst reqst,HttpServletResponse response,String jrxmlFilePath,String reportFilePath,Map params,JRDataSource dataSource) throws Exception {
  
  try {

   response.reset();
   response.setContentType("application/vnd.ms-excel;charset=GBK");
   JasperPrint jasperPrint=new JasperPrintWithJRDataSourceNew(jrxmlFilePath,reportFilePath,params,dataSource).getJasperPrint();
   JRXlsExporter jrXlsExporter=new JRXlsExporter();
   jrXlsExporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);
   // 設定輸出流
   jrXlsExporter.setParameter(JRExporterParameter.OUTPUT_STREAM,response.getOutputStream());
   jrXlsExporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,Boolean.FALSE);
   jrXlsExporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "GB2312");
   jrXlsExporter.exportReport();

   System.out.println("Done!");
  } catch (IOException e) {
   e.printStackTrace();
  }
 }

}

由於在瀏覽器中開啟Excel時,在頁面設定裡需進行內容型別的設定,因此最好在JSP頁面中加上如下程式碼:

8.ACTION呼叫,匯出報表

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletReqst;
import javax.servlet.http.HttpServletResponse;

import lbc.report.report.EXCELExport;
import lbc.report.report.HTMLExportNew;
import lbc.report.report.PDFExport;
import lbc.report.report.RTFExport;
import lbc.report.report.ReportDataSource;
import lbc.report.report.XMLExport;

import net.sf.jasperreports.engine.JRDataSource;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;


/**
 * @類名:jycfjdsAction.java
 * @類功能描述: ACTION呼叫,匯出報表
 * @author lbc
 * @version v1.0.0.1
 * @see 
 */
p lic class jycfjdsAction extends DispatchAction {
 
 p lic ActionForward loadReport(ActionMapping mapping, ActionForm form,
   HttpServletReqst reqst, HttpServletResponse response) throws Exception {

  Map params = new HashMap();
  JRDataSource dataSource = new ReportDataSource();
  //匯出HTML報表
  HTMLExportNew htmExportNew=new HTMLExportNew();
  htmExportNew.export(reqst,response,reqst.getRealPath("/report/jycfjds.jrxml"), reqst.getRealPath("/report/jycfjds.jasper"), params, dataSource);
  // 匯出PDF報表
  //PDFExport pdfExport=new PDFExport();
  //pdfExport.exportToPDF(reqst, response, reqst.getRealPath("/report/jycfjds.jrxml"),reqst.getRealPath("/report/jycfjds.jasper"), params, dataSource);
        //匯出EXCEL報表
  //EXCELExport excelExport=new EXCELExport();
  //excelExport.exportToExcel(reqst, response, reqst.getRealPath("/report/jycfjds.jrxml"), reqst.getRealPath("/report/jycfjds.jasper"), params, dataSource);
  // 匯出XML報表
  //XMLExport xmlExport=new XMLExport();
  //xmlExport.exportToXml(reqst, response, reqst.getRealPath("/report/jycfjds.jrxml"), reqst.getRealPath("/report/jycfjds.jasper"), params, dataSource);
  // 匯出RTF報表
  //RTFExport rtfExport=new RTFExport();
  //rtfExport.exportToRtf(reqst, response,reqst.getRealPath("/report/jycfjds.jrxml"), reqst.getRealPath("/report/jycfjds.jasper"), params, dataSource);
  
  return null;
 }
}

9.呼叫JSP頁面匯出報表



< a href="mailto:%@page" >%@page import="lbc.report.baseqry.QryData"%<
< a href="mailto:%@page" >%@page import="java.util.List"%<
< a href="mailto:%@page" >%@page import="java.util.ArrayList"%<
< a href="mailto:%@page" >%@page import="lbc.report.report.ReportDataSource"%<
< a href="mailto:%@page" >%@page import="java.util.HashMap"%<
< a href="mailto:%@page" >%@page import="java.util.Map"%<
< a href="mailto:%@page" >%@page import="lbc.report.report.HTMLExportNew"%<
< a href="mailto:%@page" >%@page import="lbc.re

相關推薦

jasperreport實現HtmlPdfRtf ExcelXml報表匯出

1.資料來源(JRDataSource) import java.util.ArrayList; import java.util.List; import lbc.report.baseqry.QryData; import lbc.report.bean.VioW

mpdf-htmlPDF,中文字元亂碼加粗問題

$defaultConfig = (new ConfigVariables())->getDefaults(); $fontDirs = $defaultConfig['fontDir']; $defaultFontConfig =

使用Aspose.Pdf for .NET實現PDF文件到ExcelEPSSVG等的轉換

於昨日釋出,該版本包含一個相當令人期待和興奮的功能——就是讓你能轉換PDF檔案為MS Excel工作簿。使用這個新的更新,開發人員就可以轉換PDF檔案為XLS格式,PDF檔案中每個頁面都以一個單獨的工作表呈現。以下程式碼片段展示瞭如何使用這項功能: // Load PDF

Django 實現HTMLPDF 用通用檢視編寫PDF 並且讓PDF支援中文

Django 實現HTML轉PDF 用通用檢視編寫PDF 並且讓PDF支援中文 如何使用django-easy-pdf django-easy-pdf的依賴 安裝django-easy-pdf 使用過程中遇到的問題總結

PDF技術(四)-Java實現HtmlPDF檔案

html轉換為pdf的關鍵技術是如何處理網頁中複雜的css樣式、以及中文亂碼處理。 各實現對比表 於Windows平臺進行測試:   基於IText 基於FlyingSaucer 基於WKHtmlToPdf

Java實現HtmlPDF

專案上的客戶提出一個需求,把政務流程中的表單資料匯出成pdf或者圖片格式,用來作電子檔案材料。表單基於公司的電子政務構建平臺實現,在資料庫儲存的都是html格式,因此打算直接把表單html轉成pdf或者圖片。由於表單是已經寫好了html頁面,那我要做的就是能完美解析htm

Java操作wkhtmltopdf實現HtmlPDF

做java開發的都知道,java生成pdf大部分都是用itext,itext的確是java開源元件的第一選擇。不過itext也有侷限,就是要自己寫模版,系統中的表單數量有好幾百個,為每個表單做一個匯出

【JAVA】使用 iText XMLWorker實現HTMLPDF

使用 iText XML Worker實現HTML轉PDF package com.yfli.iText; import java.io.FileInputStream; import java.i

java實現htmlpdf,支援中文,css以及中文換行

專案需使用到html轉pdf功能,在網上搜了很多,綜合了不少大神的方法,現在這裡做一個標記,以免自己以後忘記了。 java程式碼 import java.io.File; import java.io.FileOutputStream; import j

純js實現htmlpdf

專案開發中遇到了一個變態需求,需要把一整個頁面匯出為pdf格式,而且要保留頁面上的所有的表格、svg圖片和樣式。 簡而言之,就是希望像截圖一樣,把整個頁面截下來,然後儲存成pdf。 咋不上天呢…… 查了一下,能夠實現html轉pdf的方法還是挺多的,大概有以下幾種: 1、大

JS實現HTMLpdf(支援高清放大及分頁)詳解

在這裡我主要講述實現思路及方法,原理大家可以自行百度,寫此文章主要是網上的很多實現方案都不能很好的支援高清放大及分頁。首先:引入三個js外掛,請自行上網百度下載,注意html2canvas.js版本太高會出現Promise未定義,本人猜測ES6高版本中可能用到ES6語法,請注

java語言通過Aspose元件 實現word轉pdfpnghtml..

    :使用Aspose元件可以實現word向DOC, DOCX, OOXML, RTF HTML,OpenDocument, PDF,EPUB, XPS, SWF 轉換 由於基本方法都一樣,在此我只展示word轉pdf的功能      前期準備: MyEcl

C# web實現word 轉Htmloffice轉Htmlpdf轉圖片 線上預覽檔案

 改篇 pdf 預覽再本機沒問題,釋出再iis中 不行 ,(使用剪貼簿的問題..excel和word 可以,) 詳細配置及程式碼 word 轉Html 複製程式碼  1 /// <summary>  2         /// word轉成html  3  

python生成pdf報告python實現html轉換為pdf報告[python3]

import pdfkit pdfkit.from_url('http://google.com','out.pdf') pdfkit.from_file('test.html','out.pdf') pdfkit.from_string('Hello!','out.pdf')

Java之生成條形碼PDFHTML

fort ges version lba oat 模型 base64 xsd solver 關於Java生成HTML,可參考我的這篇文章:FreeMarker之根據模型生成HTML代碼 當然了,該篇文章也會給你很多啟發,比如,根據html生成html,大家不要小看這個,著名

java實現線上預覽--poi實現wordexcelppt轉html

分享一下我的偶像大神的人工智慧教程!http://blog.csdn.net/jiangjunshow 也歡迎轉載我的文章,轉載請註明出處 https://blog.csdn.net/aabbyyz java實現線上預覽 - -之poi實現word、e

使用Python3將Markdown(.md)文字轉換成 htmlpdf

一、Markdown中不同的文字內容會分成不同的文字塊,並通過markdown的語法控制進行文字的拼接,組成新的檔案。   二、利用Python3實現(.md)檔案轉換成(.html)檔案   在cmd命令列下進入(.py)檔案目錄下,使用命令進行執行   >python md2htm

使用Python3將Markdown(.md)文本轉換成 htmlpdf

isp break 段落 close all ict ddr tran 有序 一、Markdown中不同的文本內容會分成不同的文本塊,並通過markdown的語法控制進行文本的拼接,組成新的文件。 二、利用Python3實現(.md)文件轉換成(.html)文件

freemarker生成htmlhtmlpdfpdf根據關鍵字定位pdf簽名

freemarker生成html、html轉pdf、pdf根據關鍵字定位、pdf簽名圖片 PdfUtil 類 (全部功能程式碼) Content 類 (自己建立相關檔案) 相關依賴(基於spring-boot測試) PdfUtil 類

webview中巢狀html實現精準定位(百度地圖高德地圖騰訊地圖H5原生定位)js對比

最近在實現一個功能,就是在安卓手機和蘋果手機嵌入html程式碼,實現精準定位,我為此對比幾種定位的方法。我要的是精準定位,就是誤差在100米左右的功能,類似與外賣app那種定位精確度 1. 首先是原生h5定位 if(browser.versions.an