我正在使用jquery ajax从webservice调用函数。
在该功能中,我使用itextsharp工具创建pdf文件。 我希望我的pdf文件在返回时应该在浏览器中打开。
任何人都可以帮助我应该是我的返回类型
以下是我在webservice中使用的代码
public void GeneratePDf(string ID) {
string attachment = "attachment; filename=" + ID + ".pdf";
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.AddHeader("content-disposition", attachment);
HttpContext.Current.Response.ContentType = "application/pdf";
StringWriter stw = new StringWriter();
HtmlTextWriter htextw = new HtmlTextWriter(stw);
htextw.AddStyleAttribute("font-size", "12px");
htextw.AddStyleAttribute("color", "Black");
Page pg = new Page();
HtmlForm frm = new HtmlForm();
pg.EnableEventValidation = false;
pg.RenderControl(htextw);
Document document = new Document();
document = new Document(PageSize.A4, 10, 10, 0, 0);
PdfWriter.GetInstance(document, HttpContext.Current.Response.OutputStream);
document.Open();
Font verdana = FontFactory.GetFont("Verdana", 10, Font.BOLD, new CMYKColor(75, 68, 67, 90));
PdfPCell blank1 = new PdfPCell(new Phrase("Hello ", verdana));
document.Add(blank1);
//document.Add(tablegrid);
StringReader str = new StringReader(stw.ToString());
HTMLWorker htmlworker = new HTMLWorker(document);
htmlworker.Parse(str);
document.Close();
HttpContext.Current.Response.Write(document);
}
任何人都可以告诉我我做错了什么
答案 0 :(得分:0)
简短的回答是,"不要为此使用AJAX,你正在创造不必要的复杂功能。相反,只需通过浏览器发出正常的GET / POST请求即可。如果需要,您仍然可以使用JavaScript,但重要的是您让浏览器发出请求以便它可以接收响应。
答案很长......
Web服务器响应来自Web浏览器的请求,事情就像您期望的那样(通常)发生。 Web浏览器具有他们知道的内容类型列表,并且使用此列表有时会解析服务器的响应,有时会将其移交给第三方应用程序。一旦你开始搞乱AJAX和其他类似的技术,你就打破了这个模型并且说你想要处理处理而不是浏览器。浏览器将代理您的请求和服务器的响应,但除非您告知,否则它将无法执行任何操作。这适用于类似字符串的事情,但在处理二进制数据时会变得更加复杂。