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, но я постараюсь улучшить другие моменты, пока я нахожусь на нем
-
Загрузить отчет
скомпилированная версия .jasper
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(inputStream);
или не скомпилированная версия .jrxml
(медленнее, поскольку необходимо скомпилировать, но выполнимо)
JasperReport jasperReport = JasperCompileManager.compileReport("path/to/myReport.jrxml");
-
Заполните отчет
с ничего (источник данных, сгенерированный внутри отчета или только статический текст)
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params);
с datasource:
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();
Ответ 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){
}