gpt4 book ai didi

java - 将 JasperReports 与 Spring 集成

转载 作者:行者123 更新时间:2023-12-01 05:08:36 25 4
gpt4 key购买 nike

如您所知,当使用集成JasperReports View 和Spring时,您的xml文件中的报表数据键只需要一个键,我将在下面演示。但是,如果我有多个键怎么办,事实上我无法确定 map 中的对象数量。

如何解决这个问题?

这是我的 jasper-views.xml

<bean id = "toPdf"
class = "org.springframework.web.servlet.view.jasperreports.JasperReportsPdfView"
p:url= "classpath:src/newpackage/tcoReport.jasper"
p:reportDataKey="dSource"
/>

最佳答案

我建议实现您自己的 PdfView。

我会演示一下:

public class JasperPdfView extends AbstractView {

public JasperPdfView(){
setContentType("application/pdf");
}

@Override
protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response)
throws Exception {
final JasperPrint print = (JasperPrint)model.get("jasper_print");
JasperExportManager.exportReportToPdfStream(print, response.getOutputStream());
}

}

我有一个服务来创建我的 JasperReport 对象,我将其传递给 View 。

@Override
public JasperPrint generate(ReportContext ctx) throws SQLException {
Resource res = resourceLoader.getResource(ctx.getFile());
JasperReport report = JasperCompileManager.compileReport(res.getInputStream());

HashMap<String, Object> map = Maps.newHashMap();
map.putAll(ctx.getParams());
map.put("from", ctx.getFrom().toDate());
map.put("to", ctx.getTo().toDate());
JasperPrint print = JasperFillManager.fillReport(report, map, dataSource.getConnection());
return print;
}

我的 Controller 生成调用服务并将 JasperReport 放在模型上。

@RequestMapping(value = "/{reportName}")
public void printReport(@PathVariable final String reportName, final ParameterForm form, final ModelMap model)
throws SQLException {
final ReportContext ctx = reports.get(reportName).build();
ctx.setFrom(form.getFrom());
ctx.setTo(form.getTo());
ctx.getParams().put("customerId",form.getCustomerId());
model.put("jasper_print", reportService.generate(ctx));
}

JapserPdfView 是通过 ContentNegotiatingViewResolver 确定的。

关于java - 将 JasperReports 与 Spring 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12375953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com