2010-09-19 72 views
9

我使用iReport 3.7.4 version發佈了一個jasper報告,現在我必須在我的java應用程序中使用那個報告或者在那裏使用servlet,jsp和struts框架,apache tomcat作爲服務器。JasperReports:如何在jsp頁面中調用報告

我想了解如何使用一些示例調用jasper報告。

回答

1

這段代碼應該給你如何做到這一點

JasperReport jr=JasperCompileManager.compileReport("yourJRXMLFilePath"); 
JasperPrint jrPrint = JasperFillManager.fillReport(jr,mapWithParameters,aJRDataSource); 
JasperExportManager.chooseYourFavoriteMethod(jrPrint,"destinationFile"); 

否則,請檢查api 如果你已經編譯iReport的文件的第一行可以中省略了一些想法。在這種情況下,在JasperFillManager上檢查API的正確方法。

8
  1. 編譯報告中的iReport
  2. 將編譯報告在classpath
  3. 負載它

    JasperReport jasperReport = (JasperReport) JRLoader.loadObject(inputStream); 
    
  4. 填充數據。 dataSource是你有DataSource實例 - 例如BeanCollectionDataSource

    JasperPrint jasperPrint = 
        JasperFillManager.fillReport(jasperReport, params, dataSource); 
    
  5. 導出

    JRPdfExporter exporter = new JRPdfExporter(); 
    exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outputStream); 
    exporter.exportReport(); 
    
  6. outputStream上面可以是response.getOutputStream()FileOutputStream(),這取決於你是否要發送到客戶端,或者您想將其存儲爲文件。如果您想將其發送給客戶端,則必須發送Content-Disposition標題等等,但這取決於您要保存的格式。如果你想在客戶端上打印打印,這是一個完全不同的問題 - 例如,你需要一些客戶端代碼,一個小程序。

+0

自發布之後6年後[JRExport erParameter.OUTPUT_STREAM](http://javadox.com/net.sf.jasperreports/jasperreports/5.1.0/net/sf/jasperreports/engine/JRExporterParameter.html#OUTPUT_STREAM)已被棄用,我已發佈[答] (http://stackoverflow.com/a/35698286/5292302)顯示如何在當前版本中實現此答案。 – 2016-02-29 11:28:44

1
在第一個答案

,5點:

JRPdfExporter exporter= new JRPdfExporter();

後添加

exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);

0

這是做同樣的方式不同。

JasperReport jasperReport; 
    JasperPrint jasperPrint; 
    Map<String, Object> param = new HashMap<String, Object>(); 
    try{ 
     String sourceFileName = ".jrxml"; 
     jasperReport = JasperCompileManager.compileReport(sourceFileName); 
     jasperPrint = JasperFillManager.fillReport(jasperReport,param,new JRBeanCollectionDataSource(getDetails())); 
     JasperExportManager.exportReportToPdfFile(jasperPrint, ".pdf"); 
    } 
    catch(Exception e){ 
    } 
1

最好的解決方案(爲了更好的表現,以及),將調用一個編譯的報告。

你可以看到下面

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

import net.sf.jasperreports.engine.JREmptyDataSource; 
import net.sf.jasperreports.engine.JRException; 
import net.sf.jasperreports.engine.JasperExportManager; 
import net.sf.jasperreports.engine.JasperFillManager; 
import net.sf.jasperreports.engine.JasperPrint; 

public class PdfFromJasperFile { 
    public static void main(String[] args) throws JRException, IOException { 

    JasperPrint jasperPrint = JasperFillManager.fillReport("report.jasper", new HashMap<String, Object>(), 
    new JREmptyDataSource()); 
    JasperExportManager.exportReportToPdfFile(jasperPrint, "sample.pdf"); 

    } 
} 
4

的例子經過6年的@Bozho answer現在(V5和V6)包含在5點 JRExporterParameter.OUTPUT_STREAM棄用代碼,但我會盡力改善當我在其中時的其他點

  1. 負載報告

    編譯版本.jasper

    JasperReport jasperReport = (JasperReport) JRLoader.loadObject(inputStream); 
    

    非編譯版本.jrxml(更慢,因爲需要編譯但可行)

    JasperReport jasperReport = JasperCompileManager.compileReport("path/to/myReport.jrxml"); 
    
  2. 填寫報告

    JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params); 
    

    (內部報告或只是靜態文本生成的數據源)
    沒有數據源

    JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, dataSource); 
    

    與數據庫連接(可能是最常見的,SQL中報告執行)

    JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, connection); 
    
  3. 導出報告

    JRPdfExporter exporter = new JRPdfExporter() 
    exporter.setExporterInput(new SimpleExporterInput(jasperPrint)); 
    exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(outputStream)); 
    SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration(); 
    configuration.setMetadataAuthor("Petter"); //Set your pdf configurations, 
    exporter.setConfiguration(configuration); 
    exporter.exportReport(); 
    
  4. 如果你喜歡流報告直接將網頁這是怎麼contentTypeContent-disposition設置以及如何獲取outputStream

    response.setContentType("application/x-pdf"); 
    response.setHeader("Content-disposition", "inline; filename=myReport.pdf"); 
    OutputStream outputStream = response.getOutputStream();