我正在使用jdbc从数据库中获取数据然后使用iText我创建了一个可以在客户端计算机上下载的PDF文件。该应用程序以html / jsp编码,并在Apache Tomcat上运行。
我使用response.getOutputStream
立即创建输出PDF文件。
问题是,现在,我无法在此文档中插入图像,因为它给了我和错误
已为此响应调用了getOutputStream()
我知道我在插入图片时再次调用Outputstream
,因此错误
如何在文档中插入图像并仍生成可由客户端计算机下载的动态PDF文件?
相关代码:
response.setContentType("application/pdf");
response.setHeader("Content-Disposition","attachment; filename=\"LicenseInfo.pdf\""); // Code 1
Document document = new Document();
PdfWriter.getInstance(document, response.getOutputStream()); // Code 2
Image image = Image.getInstance("logo.jpg");
document.open();
document.add(image);
答案 0 :(得分:1)
我很抱歉,但您没有显示任何相关代码,因为您复制/粘贴的代码不对您提及的例外负责。
相关部分是您正在使用JSP,并且您没有阅读my book第9章中列出的有关JSP的重要警告。
编写JSP时,您可能喜欢空格和缩进,例如:
<% //a line of code %>
<%
// some more code
%>
<% // another line of code %>
<%
response.getOutputStream();
%>
无论您是否使用iText,这都会导致异常"getOutputStream() has already been called for this response"
。在您在JSP脚本中引入第一个空格字符时,就会调用getOutputStream()
方法。
要解决此问题,您需要删除所有空格:
<% //a line of code %><%
// some more code
%><% // another line of code %><%
response.getOutputStream();
%>
<%
和%>
标记之外不接受任何一个字符。如更好的JSP手册中所述,您不应该使用JSP来创建二进制文件。为什么不?因为JSP在二进制文件中的任意位置引入了空格字符。这会导致文件损坏。改为使用Servlets!