I modified the code in the following manner: Code: InputStream stream1 = getServletConfig().getServletContext().getResourceAsStream("WEB-INF/reports/TestFraud.jrxml"«»); JasperReport subreport1 = JasperCompileManager.compileReport(stream1); InputStream stream2 = getServletConfig().getServletContext().getResourceAsStream("WEB-INF/reports/TestFraudPage2.jrxml"«»); JasperReport subreport2 = JasperCompileManager.compileReport(stream2); InputStream stream3 = getServletConfig().getServletContext().getResourceAsStream("WEB-INF/reports/subreport.jrxml"«»); JasperReport subreport3 = JasperCompileManager.compileReport(stream3); parameters.put("SIMPLE_DATA", SIMPLE_DATA); parameters.put(JRParameter.REPORT_LOCALE, new Locale("en"«»)); ResourceBundle bundle =ResourceBundle.getBundle("MyResources"«»); parameters.put(JRParameter.REPORT_RESOURCE_BUNDLE, bundle); parameters.put("Subreport1", subreport1); parameters.put("Subreport2", subreport2); parameters.put("Subreport3", subreport3); ServletOutputStream sos = response.getOutputStream(); InputStream stream4 = getServletConfig().getServletContext().getResourceAsStream("WEB-INF/reports/master.jrxml"«»); JasperReport subreport4 = JasperCompileManager.compileReport(stream4); response.setContentType("application/pdf"«»); // JasperRunManager.runReportToPdfStream(stream4, sos, parameters, simpleDS); byte[] bytes = JasperRunManager.runReportToPdf(subreport4, parameters, simpleDS); sos.write(bytes, 0, bytes.length); sos.flush(); sos.close(); Now I get some junk characters in the browser instead of a PDF File. Can some one please poitn otu the issue?