0

我正在使用 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);
4

1 回答 1

1

抱歉,您没有显示任何相关代码,因为您复制/粘贴的代码不对您提到的异常负责。

相关的部分是您正在使用 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 脚本中引入第一个空白字符时被调用。

要解决此问题,您需要删除所有空格:

<% //a line of code %><%
   // some more code
%><% // another line of code %><%
   response.getOutputStream();
%>

<%在and%>标记之外不接受单个字符。正如更好的 JSP 手册中所解释的,您不应该使用 JSP 创建二进制文件。为什么不?因为 JSP 在二进制文件的任意位置引入了空白字符。这会导致文件损坏。请改用 Servlet!

于 2013-06-13T09:49:46.903 回答