JasperReports: Как вызвать отчет на странице JSP
Я сделал один отчет о яшме, используя iReport 3.7.4 version
Теперь я должен использовать это или вызвать этот отчет в моем Java-приложении, где я использую сервлеты, JSP и Struts Framework, Apache Tomcat в качестве сервера.
Я хочу шаги относительно того, как вызвать отчет о яшме с некоторым примером.
6 ответов
- Скомпилируйте отчет в 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
заголовок и некоторые другие, но это зависит от формата, который вы хотите сохранить. Если вы хотите печатать на клиенте, это совсем другой вопрос - вам понадобится код на стороне клиента, например, апплет.
Через 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();
Лучшее решение (для лучшей производительности) будет вызывать скомпилированный отчет.
Вы можете увидеть пример ниже
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){
}