JasperReports: Как вызвать отчет на странице JSP

Я сделал один отчет о яшме, используя iReport 3.7.4 versionТеперь я должен использовать это или вызвать этот отчет в моем Java-приложении, где я использую сервлеты, JSP и Struts Framework, Apache Tomcat в качестве сервера.

Я хочу шаги относительно того, как вызвать отчет о яшме с некоторым примером.

6 ответов

  1. Скомпилируйте отчет в iReport
  2. Поместите скомпилированный отчет в путь к классам
  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 заголовок и некоторые другие, но это зависит от формата, который вы хотите сохранить. Если вы хотите печатать на клиенте, это совсем другой вопрос - вам понадобится код на стороне клиента, например, апплет.

Через 6 лет @Bozho ответ сейчас (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. Если вы хотите транслировать отчет непосредственно на веб-страницу, вот как contentType а также Content-disposition и как вы получаете outputStream

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

Лучшее решение (для лучшей производительности) будет вызывать скомпилированный отчет.

Вы можете увидеть пример ниже

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");

  }
}

В первом ответе пункт 5: после

JRPdfExporter exporter= new JRPdfExporter();

добавлять

exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);

Этот кусок кода должен дать вам некоторое представление о том, как это сделать

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

В противном случае проверьте API. Первая строка может быть опущена, если вы уже скомпилировали файл с помощью iReport. Проверьте API для правильного метода на JasperFillManager в этом случае.

Это другой способ сделать то же самое.

    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){
    }
Другие вопросы по тегам