struts1中设置
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment; filename=WebReport.pdf");
请求发送后为什么不能弹出下载窗口?
在Servlet中都可以:
Servlet源代码:
package com.test;import java.io.IOException;
import java.io.OutputStream;import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;import com.lowagie.text.pdf.BaseFont;public class Html2PdfServlet extends HttpServlet { private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//pageContext.getServletContext().getRealPath("/")
ServletContext sc = request.getSession().getServletContext();
String path = sc.getRealPath(""); //值为D:\apache-tomcat-6.0.26\webapps\createpdf
System.out.println("原path: " + path);
//把路径中的反斜杠转成正斜杠
path = path.replaceAll("\\\\", "/"); //值为D:/apache-tomcat-6.0.26/webapps/createpdf
System.out.println(path);
String path2 = sc.getRealPath("/");
System.out.println("path2: " + path2);
System.out.println(Thread.currentThread().getContextClassLoader().getResource(""));
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment; filename=WebReport.pdf");
//response.setHeader("Content-Disposition", "inline; filename=WebReport.pdf");
StringBuffer html = new StringBuffer();
//组装成符合W3C标准的html文件,否则不能正确解析
html.append("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">");
html.append("<html xmlns=\"http://www.w3.org/1999/xhtml\">")
.append("<head>")
.append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />")
.append("<style type=\"text/css\" mce_bogus=\"1\">body {font-family: SimSun;}</style>")
.append("<style type=\"text/css\">img {width: 700px;}</style>")
.append("</head>")
.append("<body>");
html.append("<center><h1>统计报表</h1></center>");
html.append("<center>");
html.append("<img src=\"images/chart.jpg\"/>");
html.append("</center>");
html.append("</body></html>");
// parse our up into an xml Document
try {
ITextRenderer renderer = new ITextRenderer();
/**
* 引入了新的jar包,不用再导入字体了
ITextFontResolver fontResolver = renderer.getFontResolver();
fontResolver.addFont("C:/Windows/fonts/simsun.ttc",
BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
*/
renderer.setDocumentFromString(html.toString());
// 解决图片的相对路径问题
//renderer.getSharedContext().setBaseURL("file:/C:/Documents and Settings/dashan.yin/workspace/createpdf/WebRoot/images");
//renderer.getSharedContext().setBaseURL("file:/D:/apache-tomcat-6.0.26/webapps/createpdf/images");
renderer.getSharedContext().setBaseURL("file:/" + path + "/images");
renderer.layout();
OutputStream os = response.getOutputStream();
renderer.createPDF(os);
os.close();
} catch (Exception e) {
e.printStackTrace();
} } public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}}
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment; filename=WebReport.pdf");
请求发送后为什么不能弹出下载窗口?
在Servlet中都可以:
Servlet源代码:
package com.test;import java.io.IOException;
import java.io.OutputStream;import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;import com.lowagie.text.pdf.BaseFont;public class Html2PdfServlet extends HttpServlet { private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//pageContext.getServletContext().getRealPath("/")
ServletContext sc = request.getSession().getServletContext();
String path = sc.getRealPath(""); //值为D:\apache-tomcat-6.0.26\webapps\createpdf
System.out.println("原path: " + path);
//把路径中的反斜杠转成正斜杠
path = path.replaceAll("\\\\", "/"); //值为D:/apache-tomcat-6.0.26/webapps/createpdf
System.out.println(path);
String path2 = sc.getRealPath("/");
System.out.println("path2: " + path2);
System.out.println(Thread.currentThread().getContextClassLoader().getResource(""));
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment; filename=WebReport.pdf");
//response.setHeader("Content-Disposition", "inline; filename=WebReport.pdf");
StringBuffer html = new StringBuffer();
//组装成符合W3C标准的html文件,否则不能正确解析
html.append("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">");
html.append("<html xmlns=\"http://www.w3.org/1999/xhtml\">")
.append("<head>")
.append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />")
.append("<style type=\"text/css\" mce_bogus=\"1\">body {font-family: SimSun;}</style>")
.append("<style type=\"text/css\">img {width: 700px;}</style>")
.append("</head>")
.append("<body>");
html.append("<center><h1>统计报表</h1></center>");
html.append("<center>");
html.append("<img src=\"images/chart.jpg\"/>");
html.append("</center>");
html.append("</body></html>");
// parse our up into an xml Document
try {
ITextRenderer renderer = new ITextRenderer();
/**
* 引入了新的jar包,不用再导入字体了
ITextFontResolver fontResolver = renderer.getFontResolver();
fontResolver.addFont("C:/Windows/fonts/simsun.ttc",
BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
*/
renderer.setDocumentFromString(html.toString());
// 解决图片的相对路径问题
//renderer.getSharedContext().setBaseURL("file:/C:/Documents and Settings/dashan.yin/workspace/createpdf/WebRoot/images");
//renderer.getSharedContext().setBaseURL("file:/D:/apache-tomcat-6.0.26/webapps/createpdf/images");
renderer.getSharedContext().setBaseURL("file:/" + path + "/images");
renderer.layout();
OutputStream os = response.getOutputStream();
renderer.createPDF(os);
os.close();
} catch (Exception e) {
e.printStackTrace();
} } public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}}
修改成这个看看,如果是response.setContentType("application/pdf"),浏览器有安装pdf阅读软件且有关联情况下会直接打开的
现在情况是:
用servlet可以直接打开,用struts就不行了,struts是怎么response的?
public void responseExportPDF(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment; filename=WebReport.pdf");
StringBuffer html = new StringBuffer();
//组装成符合W3C标准的html文件,否则不能正确解析
html.append("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">");
html.append("<html xmlns=\"http://www.w3.org/1999/xhtml\">")
.append("<head>")
.append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />")
.append("<style type=\"text/css\" mce_bogus=\"1\">body {font-family: SimSun;}</style>")
.append("<style type=\"text/css\">img {width: 700px;}</style>")
.append("</head>")
.append("<body>");
html.append("<center><h1>统计报表</h1></center>");
html.append("<center>");
html.append("<img src=\"images/chart.jpg\"/>");
html.append("</center>");
html.append("</body></html>");
// parse our up into an xml Document
try {
ITextRenderer renderer = new ITextRenderer();
renderer.setDocumentFromString(html.toString());
renderer.layout();
OutputStream os = response.getOutputStream();
renderer.createPDF(os);
os.close();
} catch (Exception e) {
e.printStackTrace();
}
return ;
}
改成这样试试。