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

Я сделал один отчет jasper с помощью iReport 3.7.4 version, теперь я должен использовать это или вызывать этот отчет в своем java-приложении, где я использую сервлеты, jsp и struts framework, apache tomcat как сервер.

Мне нужны шаги относительно того, как вызывать отчет яшмы с помощью некоторого примера.

Ответ 1

  • Скомпилировать отчет в iReport
  • Поместите скомпилированный отчет по пути к классам
  • загрузите его с помощью

    JasperReport jasperReport = (JasperReport) JRLoader.loadObject(inputStream);
    
  • Заполните его данными. dataSource - это экземпляр dataSource, который у вас есть - например, BeanCollectionDataSource

    JasperPrint jasperPrint = 
         JasperFillManager.fillReport(jasperReport, params, dataSource);
    
  • Экспортировать его

    JRPdfExporter exporter = new JRPdfExporter();
    exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outputStream);
    exporter.exportReport();
    
  • outputStream выше может быть либо response.getOutputStream(), либо FileOutputStream(), в зависимости от того, хотите ли вы отправить его клиенту или хотите сохранить его в виде файла. Если вы хотите отправить его клиенту, вам нужно отправить заголовок Content-Disposition и еще несколько, но это зависит от формата, который вы хотите сохранить. Если вы хотите распечатать на клиенте, это совсем другой вопрос - вам нужен, например, код на стороне клиента, апплет.

Ответ 2

Через 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);
    

    с datasource:

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

Ответ 3

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

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

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

Ответ 4

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

JRPdfExporter exporter= new JRPdfExporter();

добавить

exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);

Ответ 5

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

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

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

  }
}

Ответ 6

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

    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){
    }