使用带有ADF的Jasper报告打印预览页面作为弹出窗口

时间:2015-01-07 10:31:39

标签: jasper-reports oracle-adf

如何将打印预览页面显示为弹出式窗口?

我尝试了网络中的代码,但是我需要另一个页面。

            HttpServletResponse response = getResponse();
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        response.setHeader("Cache-Control", "max-age=0");
        response.setContentType("application/pdf");

        ServletContext context = getContext();
        InputStream reportStream = context.getResourceAsStream("report-templates/TestReport.jasper");

        if (reportStream == null) {
            throw new NullPointerException("Input stream is null");
        }

        JasperReport jasperTemplate = (JasperReport)JRLoader.loadObject(reportStream);
        jasperTemplate.setWhenNoDataType(WhenNoDataTypeEnum.ALL_SECTIONS_NO_DETAIL);
        Connection conn = getConnection();
        JasperPrint print = JasperFillManager.fillReport(jasperTemplate, record,conn);

        JasperExportManager.exportReportToPdfStream(print, baos);

        response.setContentLength(baos.size());
        baos.writeTo(response.getOutputStream());
        baos.close();
        response.getOutputStream().flush();
        FacesContext.getCurrentInstance().responseComplete();

我在这里做了哪些改变?

1 个答案:

答案 0 :(得分:1)

这是一种方法:

在应用程序中创建一个servlet,并在其doGet方法中编写代码。在页面上添加弹出组件。从用于执行代码的按钮/链接打开此弹出窗口。 在poup窗口中使用inlineFram调用servlet。

<af:popup id="popupReport" animate="default" 
          contentDelivery="lazyUncached">
    <af:panelWindow id="pw1" modal="true" title="Sample Report" 
                    contentHeight="625" contentWidth="700" resize="on">
        <af:inlineFrame id="if1" shortDesc="Report inline frame" 
                        source="/showreportservlet"
                        syleClass="AFStretchWidth"
                        inlineStyle="height:500px;">
        </af:inlineFrame>
</af:panelWindow>

假设/showreportservlet是创建servlet时指定的url模式