如何将打印预览页面显示为弹出式窗口?
我尝试了网络中的代码,但是我需要另一个页面。
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();
我在这里做了哪些改变?
答案 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模式