将服务器端生成的 PDF 发送到浏览器
本文关键字:浏览器 PDF 服务器端 | 更新日期: 2023-09-27 18:32:03
我有一个AJAX调用,它在服务器端调用静态WebMethod。服务器端方法返回包含 PDF 文件的字节流的内存流。然后,如何在 AJAX 调用的成功方法中在客户端使用此 PDF 字节流,以某种方式触发 PDF 文件下载。我也不会做什么来完整回发页面。
我用这个作为参考:http://forums.asp.net/t/1377154.aspx?Download+from+Javascript但我想有一个完整的例子来实现这一点。
function generatePDF(param1, param2, param3) {
$.ajax({
type: 'POST',
url: 'Page.aspx/GeneratePDF',
data: '{ "param1" : "' + param1+ '", "param2" : "' + param2+ '", "param3" : "' + param3+ '" }',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (pdf) {
//from here somehow, download the generated PDF file
}
});
}
我没有亲自这样做,但我要尝试的第一件事是:
在服务器端动态构建适当的 HTML 文档和 CSS使用幻影JS呈现该文档告诉 phantomJS 将该文档转换为保存在临时文件中的 PDF通过将临时 PDF 文件写入响应正文,将 PDF 作为 HTTP 响应发送回去删除临时文件如果您正在内容类型,内容处置等方面苦苦挣扎,则不必担心磁盘上有一个有效的pdf文件,并且只需将该数据写入HTTP响应即可。使用正确的标题,您应该能够要求浏览器显示 PDF 或将其视为要保存为下载的文件。
在这里我建议你使用
Window.open('~/path/name.pdf');
使用此功能,您可以在浏览器上显示PDF,并可以从浏览器保存和打印。
试试这个,从数据库中选择字节并提供给内容。
byte[] content = "Select Your Bytes From Database";
HttpContext.Current.Response.Buffer = false;
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.ClearHeaders();
HttpContext.Current.Response.AppendHeader("content-disposition","attachment;filename=" + fileName);
HttpContext.Current.Response.ContentType = "Application/pdf";
//Write the file content directly to the HTTP content output stream.
HttpContext.Current.Response.BinaryWrite(content);
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.End();