title: Using PrintWriter and OutputStream
body: <p>I am creating a project with struts and I have a problem using Jasper IReports. I want to export some info into a pdf file and I keep getting the java.lang.IllegalStateException: getOutputStream() has already been call... Exception due to openning a ServletOutputStream in my code when the page already opens a PrintWriter.</p>
  
  <p>The code is in the model (so it is not in the jsp, it's in a java file), as it follows:</p>
  
  <pre><code>    public void handle(HttpServletResponse res, Connection connection, String path)throws Exception{
      ServletOutputStream out = null;
      try {
  
          JasperDesign jasperDesign = JRXmlLoader.load(path);
          JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
          byte[] bytes = JasperRunManager.runReportToPdf(jasperReport, null, connection);
          res.setContentType("application/pdf");
          res.setContentLength(bytes.length);
          out = res.getOutputStream();
          out.write(bytes, 0, bytes.length);
      } catch (Exception e) {
          e.printStackTrace();
      } finally {
          out.flush();
          out.close();
      }
  </code></pre>
  
  <p>I have checked the connection, the path and the HttpServletResponse and are all working fine.</p>
  
  <p>I'm very newbie with Jasper Reports as well as with coding stuff into PDF so you can -correctly- suposse that I have a minimal idea of what I am doing here and that, obviously my code is copy/pasted from somewhere through the net.</p>
  
  <p>I have tried to use PrintWriter instead of OutputStream, transforming bytes into a String and using the PrintWriter.append(String) method (allthought is not String is CharSequence), but it doesn't extract the data into the PDF.</p>
  
  <p>I have also tried to get the PrintWriter, close it to open the OutputStream (didn't work) or flush it (neither).</p>
  
  <p>Any help with a solution to use any out that could show the data in a pdf would be great.
  Thanks a lot!</p>