java - Jasper 报告不显示图像

标签 java jasper-reports freemarker html-rendering

首先,抱歉我的英语不好。我的问题是: 我尝试在 html 页面上显示报告预览。为其设置参数:

request.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, outFilePath);
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRHtmlExporterParameter.IS_OUTPUT_IMAGES_TO_DIR, Boolean.TRUE);
exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "/preview/image?image=");
exporter.exportReport();

可以看到,我们将报告导出到指定目录中的html文件中。在网络中,我添加了以下内容:

<servlet>
    <servlet-name>ImageServlet</servlet-name>
    <servlet-class>net.sf.jasperreports.j2ee.servlets.ImageServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ImageServlet</servlet-name>
    <url-pattern>/preview/image</url-pattern>
</servlet-mapping>

为了显示 html,我们有 ftl Controller :

 @RequestMapping(value = "/events/preview", method = RequestMethod.POST)
 public void reportPreviewEvents(String requestInJson,
                                @RequestParam("pageSize") Integer pageSize,
                                @RequestParam("pageNo") Integer pageNo,
                                HttpServletResponse response,
                                HttpServletRequest request,
                                Model model) {
    try {
        Map<String, Object> toModel = auditHandler.handleExportEvents(requestInJson, JasperExporter.Type.HTML, pageSize, pageNo, request);
        model.addAllAttributes(toModel);
        String filePath = (String) toModel.get("filePath");
        reportContent = org.apache.commons.io.IOUtils.toString(new FileInputStream(filePath), Charset.forName("UTF-8"));
        response.setCharacterEncoding("UTF-8");
        response.getWriter().write(reportContent);

但是当我打开它(ip:port/context/report/events/preview/)时,我看不到 html 中的图像。 提前致谢!

最佳答案

通过这种方式,您可以生成 HTML 报告并指向较新的 JasperReports 库的图像 servlet(我使用的是 6.1.0),因为许多旧函数已被弃用:

StringBuffer sbuffer = new StringBuffer();        
HtmlExporter exporterHTML = new HtmlExporter();
SimpleExporterInput exporterInput = new SimpleExporterInput(jasperPrint);
exporterHTML.setExporterInput(exporterInput);

SimpleHtmlExporterOutput exporterOutput = new SimpleHtmlExporterOutput(sbuffer);
//pointing to the image servlet
HtmlResourceHandler imageHandler = new WebHtmlResourceHandler( request.getContextPath() + "/servlets/image?" + ImageServlet.IMAGE_NAME_REQUEST_PARAMETER
        + "={0}" + "&uuid=" + UUID.randomUUID().toString());
exporterOutput.setImageHandler(imageHandler);

//setting some sonfigs for the report
SimpleHtmlExporterConfiguration htmlConfig = new SimpleHtmlExporterConfiguration();
SimpleHtmlReportConfiguration htmlReportConfiguration = new SimpleHtmlReportConfiguration();
htmlConfig.setHtmlFooter("");
htmlConfig.setHtmlHeader("");
htmlConfig.setBetweenPagesHtml("");
htmlReportConfiguration.setPageIndex(pageIndex);

exporterHTML.setConfiguration(htmlConfig);
exporterHTML.setExporterOutput(exporterOutput);
exporterHTML.setConfiguration(htmlReportConfiguration);

exporterHTML.exportReport();

希望有人觉得它有帮助。

关于java - Jasper 报告不显示图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17694407/

相关文章:

javascript freemarker springmvc spring.ftl

java - 在 Java 中调用 ArrayList.get() 时出现 NullPointerException?

java - JSF 和 ui 中的嵌套 ajax :repeat

java - 如何防止 Struts2 将 jsessionid 附加到 URL(在重定向时)?

java - jfree 图表 org.jfree.chart.plot.CategoryPlot 无法转换为 org.jfree.chart.plot.XYPlot

java - jasper 报告了 poi jar 的替代品

java - JasperReports 包括 PDF 末尾的空白页

java - 在执行 getTemplate ("report.ftl"时遇到 java.lang.NullPointerException )

java - 通过 faces-config.xml 确定 SelectItem 数组值

javascript - 条件问题 NetSuite 电子邮件从 SuiteScript 与使用 Freemarker 的模板合并