2013-06-13 32 views
0

我使用jdbc从数据库中获取数据,然后使用iText创建一个可以在客户机上下载的PDF文件。该应用程序以html/jsp编码并在Apache Tomcat上运行。如何使用iText在PDF中插入图像并下载到客户端机器?

我使用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

我很抱歉,但你没有表现出任何相关的代码,你将代码复制/粘贴不负责你提到的例外。

相关部分是您正在使用JSP,并且您没有阅读my book第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与否。当您在JSP脚本中引入第一个空白字符时,getOutputStream()方法被调用。

要解决这个问题,你需要删除所有空白:

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

没有一个字是<%%>标记外接受。正如在更好的JSP手册中所解释的那样,您不应该使用JSP来创建二进制文件。为什么不?由于JSP在二进制文件的任意位置引入了空格字符。这会导致文件损坏。改用Servlets!

+0

感谢您的建议布鲁诺,但我必须使用JSP(没有选择那里) 其次我试图删除空格。当我这样做,我的PDF文件确实生成,但我无法打开它,因为它说数据已损坏。 –

+0

我使用以下命令删除空格 <%@ page trimDirectiveWhitespaces =“true”%> –

+0

呃......这是完全错误的;您需要从JSP文件中手动删除空格! –

相关问题