0

我的 java 类中有以下代码部分。

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

这可能是什么解决方案,请告诉我,因为我已经面对这个问题很长时间了。

问候。

4

2 回答 2

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();
}

没有其他想法如何摆脱异常

于 2012-09-21T01:22:36.897 回答
0

我有一个单独的方法可以将图像添加到文档中并调用它来解决我的问题。

感谢你的帮助。

Image image = Image.getInstance(path+"/"+"images/abi.png");
                image.setAbsolutePosition(40f, 770f);
                image.scaleAbsolute(70f, 50f);
                document.add(image);
                response.flushBuffer();
于 2012-09-22T06:14:53.867 回答