2012-09-21 42 views
0

我在我的java类中有以下代码部分。getOutputStream()已被调用此响应,同时从java导出为pdf文件

if(exportTo.equals("pdf")) 
     { 
     response.setHeader("Content-disposition", "attachment; filename=\"" + reportName + ".pdf\""); 
     response.setContentType("application/pdf"); 
     PdfWriter.getInstance(document,response.getOutputStream()); 

     try { 
      document.open(); 
      addTitlePage(document, reportName); 

      Image image = Image.getInstance(path+"/"+"images/abi.png"); 
      image.setAbsolutePosition(40f, 770f); 
      image.scaleAbsolute(70f, 50f); 
      document.add(image); 
      response.flushBuffer(); 

      //float[] colsWidth = {1.5f,3f,4f,4f,2f}; 

      List<Float> colsWidth = new ArrayList<Float>(); 
      int iterator = 1; 
      while (iterator <= headerMap.size()) { 
       if(iterator==1){ 
        colsWidth.add(1.5f); 
       }else{ 
       colsWidth.add(3f); 
       } 
       iterator++; 
      } 
      float[] floatArray = ArrayUtils.toPrimitive(colsWidth.toArray(new Float[0]), 0.0F); 

      PdfPTable table = new PdfPTable(floatArray); 
      table.setWidthPercentage(98); 
      table.setHorizontalAlignment(Element.ALIGN_CENTER); 

      PdfPCell c1 = new PdfPCell(); 
      for (Iterator it = headerMap.keySet().iterator(); it.hasNext();) { 
       String headerName = (String) headerMap.get(it.next()); 
       c1 = new PdfPCell(new Phrase(headerName, headerFont)); 
       c1.setBackgroundColor(BaseColor.LIGHT_GRAY); 
       table.addCell(c1); 
      } 
      table.setHeaderRows(1); 
      table = custDAO.creadPDFTable(query, table); 
      document.add(table); 
      document.addAuthor(userViewModel.getUsername()); 
      document.addCreationDate(); 
      document.addCreator("POC"); 
      document.close(); 
      response.flushBuffer(); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
     } 

当我从代码中删除以下行我没有得到任何异常,但是当我包括这行,我得到java.lang.IllegalStateException: getOutputStream() has already been called for this response例外。

Image image = Image.getInstance(path+"/"+"images/abi.png"); 
       image.setAbsolutePosition(40f, 770f); 
       image.scaleAbsolute(70f, 50f); 
       document.add(image); 
       response.flushBuffer(); 

我用上面的代码将图像添加到PDF文件(itextpdflibrary

,这可能是解决这一点,请告诉我,我一直面临着这个很长一段时间。

问候。

+0

如果你删除第一个'response.flushBuffer();'? – 2012-09-21 00:33:25

+0

我得到同样的异常 –

+0

哪一行?你可以给堆栈跟踪吗? – 2012-09-21 00:38:50

回答

0

我有一个单独的将图像添加到文档中的方法,并将其称为即将解决我的问题。

感谢您的全力帮助。

Image image = Image.getInstance(path+"/"+"images/abi.png"); 
       image.setAbsolutePosition(40f, 770f); 
       image.scaleAbsolute(70f, 50f); 
       document.add(image); 
       response.flushBuffer(); 
0

可能的解决方案将是:

尽量把所有文件的东西在尝试结束:

try{ 
// create all object here, but don't add it to document yet. 

// add all to document: 
PdfWriter.getInstance(document,response.getOutputStream()); 
document.open(); 
addTitlePage(document, reportName); 
document.add(image); 
document.add(table); 
document.addAuthor(userViewModel.getUsername()); 
document.addCreationDate(); 
document.addCreator("POC"); 
document.close(); 
response.flushBuffer(); 

} catch (Exception ex) { 
    ex.printStackTrace(); 
} 

没有其他的想法如何从异常逃脱

相关问题