我试图显示一个成功的AJAX调用后,我的控制器的PDF。我需要修改原来的方式,以便能够处理多个PDF以返回单个PDF。AJAX调用控制器后显示PDF
老办法:
var uri = '../api/Controller/' + string1 + "," + string2 + "," + string3;
var src = '../web/printViewer.html?file=' + encodeURIComponent(uri);
window.open(src, "_blank");
所以我一直试图保持的该功能与AJAX调用,看起来像这样:
$.ajax({
type: 'get',
url: '../api/Controller',
contentType: 'application/json; charset=utf-8',
data: { thing1: item, thing2: item2 },
datatype: 'json',
success: function (result) {
// no bueno D:
// but I get back a proper PDF every time
},
error: function() {
toastr.error('Error creating print.');
}
});
和C#的控制器:
[HttpGet]
public HttpResponseMessage Get(string thing1, string thing2) //thing2 will be a string[] eventually, once I am able to get 2-3 pdfs working
{
byte[] data = response.PDFBytes[0] == null ? new byte[0] : response.PDFBytes[0];
int length = response.PDFBytes[0] == null ? 0 : response.PDFBytes[0].Length;
var stream = new MemoryStream(data, 0, length, true, true);
result.Content = new ByteArrayContent(stream.GetBuffer());
result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment")
{
FileName = "CheckedOutItems.pdf"
};
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
}
我试图做的第一件事就是把整个事情变成一个大字符串,但它是开始只有几个PDF文件太长了。我知道控制器正在返回一个可靠的PDF,但我似乎无法将其显示在printViewer窗口中。
在此先感谢!
编辑:
我不是试图下载文件。我只是希望在新窗口中打开它,以便用户可以打印它。有人在开发人员尝试下载PDF时现在曾两次提出过相同的文章。那不是我所追求的。
你想下载或显示它?什么是printViewer窗口? –
@teovankot我想展示它。 PrintViewer只是一个不同的窗口,可自动为用户提供打印对话框。 –
那么我只能说不要用AJAX下载文件。这真的很棘手,所以最好用旧的方式。欲了解更多信息[检查此](https://stackoverflow.com/q/4545311/1849444)。 –