JasperReports: Как вызвать отчет на странице JSP - PullRequest
9 голосов
/ 19 сентября 2010

Я сделал один отчет с помощью jasper, используя iReport 3.7.4 version, теперь я должен использовать его или вызвать этот отчет в своем java-приложении, где я использую фреймворк сервлетов, jsp и Struts, Apache Tomcat в качестве сервера.

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

Ответы [ 6 ]

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

4 голосов
/ 29 февраля 2016

Через 6 лет @Bozho ответ сейчас (v5 и v6) содержит устаревший код в точке 5 JRExporterParameter.OUTPUT_STREAM , но я постараюсьчтобы улучшить другие пункты, пока я в этом

Загрузить отчет скомпилировано версия .jasper

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

или не скомпилировано версия .jrxml (медленнее, поскольку нужно компилировать, но выполнимо)

JasperReport jasperReport = JasperCompileManager.compileReport("path/to/myReport.jrxml");

Заполнить отчет с ничем (источник данных, сгенерированный внутри отчета или просто статический текст)

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

с источником данных :

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

с базой данных соединение (возможно, наиболее распространенное, sql выполняется внутри отчета)

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

Экспорт отчета

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

Если вы хотите направить отчет прямо на веб-страницу, это, как установлены contentType и Content-disposition и как вы получаете outputStream

response.setContentType("application/x-pdf");
response.setHeader("Content-disposition", "inline; filename=myReport.pdf");
OutputStream outputStream = response.getOutputStream();
1 голос
/ 21 февраля 2012

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

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

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

  }
}
1 голос
/ 07 декабря 2010

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

JRPdfExporter exporter= new JRPdfExporter();

add

exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);

1 голос
/ 19 сентября 2010

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

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

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

0 голосов
/ 15 декабря 2011

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

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