如何使用iText在PDF中插入图像并下载到客户端计算机?

时间:2013-06-13 09:12:24

标签: jsp itext httpresponse

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

1 个答案:

答案 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!