繁体   English   中英

另存为对话框以保存PDF文件

[英]save as dialog box to save a PDF file

我正在尝试显示另存为对话框以保存PDF文件。 这应该在单击JSP中的链接时发生。 单击此链接后,我将调用一个struts操作,该操作将准备PDF并转发到另一个我要用于下载框的JSP“ download.jsp”。

我尝试使用'document.execCommand',但看来这仅适用于.txt和.html文件。

然后,我尝试通过设置响应头和内容类型来做到这一点。 以下是我的download.jsp中的代码。 但这会将垃圾字符写入我的浏览器。

请让我知道此问题的解决方案。

<%@ page language="java"     import="javax.servlet.ServletOutputStream,java.io.BufferedOutputStream,java.io.DataInputStr eam,java.io.File,java.io.FileInputStream"%><%

response.setHeader("Content-Disposition","attachment;filename=\"" + "mandateOut.pdf" + "\"");
response.setContentType( "application/pdf" );

response.setHeader("Pragma", "public");
response.setHeader("Cache-Control", "max-age=0");   
File file = new File(<fully qualified file name>);
response.setContentLength( (int)file.length() );

// get the OutputStream and buffer our bytes to it
ServletOutputStream outStream = response.getOutputStream();

byte[] buf = new byte[1024];
DataInputStream in = new DataInputStream(new FileInputStream(file));

int len;
while ((in != null) && ((len = in.read(buf)) != -1))
{
outStream.write(buf,0,len);
}

// keep the page from freaking out over our use of it's outputstream
in.close();
outStream.flush();
outStream.close();

%>

您正在使用MVC框架Struts。 在这样的框架中,其作用是生成HTML标记的View被实现为JSP。 它只能包含HTML,JSP EL和JSP标记。 没有Java代码。 它的默认内容类型是text / html。

控制器的作用是处理表示逻辑,并使用Java操作实现。

在这种情况下,您无需生成任何HTML标记。 您只需要将字节发送到响应输出流。 那么,为什么要使用JSP呢? 这不是它的工作。 您应该直接从控制器(即操作)执行此操作。

将上面的代码直接放在操作中,一切都应该没问题。

注意 :

  • 您不需要DataInputStream即可读取字节。 您应该更喜欢BufferedInputStream。
  • 此流应在finally块中关闭。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM