我正在使用jdbc从数据库中获取数据,然后使用iText创建了一个可在客户端计算机上下载的PDF文件。该应用程序以html / jsp编码,并在Apache Tomcat上运行。
我使用response.getOutputStream来立即创建输出PDF文件。
response.getOutputStream
问题是,现在,我无法在此文档中插入图像,因为它给了我错误,
已为此响应调用getOutputStream()
我了解我Outputstream在插入图片时再次打电话,因此错误
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);
抱歉,您没有显示任何相关代码,因为您复制/粘贴的代码不对您提到的异常负责。
相关的部分是您正在使用JSP,并且没有阅读本书第9章中列出的有关JSP的重要警告。
编写JSP时,您可能喜欢空白和缩进,例如:
<% //a line of code %> <% // some more code %> <% // another line of code %> <% response.getOutputStream(); %>
"getOutputStream() has already been called for this response"无论是否使用iText,这总是会导致异常。getOutputStream()当您在JSP脚本中引入第一个空白字符时,便称为该方法。
"getOutputStream() has already been called for this response"
getOutputStream()
要解决此问题,您需要删除所有空白:
<% //a line of code %><% // some more code %><% // another line of code %><% response.getOutputStream(); %>
Not a single character is accepted outside the <% and %> markers. As explained in the better JSP manuals, you shouldn’t use JSP to create binary files. Why not? Because JSP introduces white space characters at arbitrary places in your binary file. That results in corrupt files. Use Servlets instead!
<%
%>