コントローラへのAJAXコールの成功後にPDFを表示しようとしています。 1つ返すために複数の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");
}
私がやろうとしたことは、全体を1つの大きな文字列に変えることでしたが、いくつかのPDFだけではあまりにも長いです。私はコントローラが固体のPDFを返すことを知っていますが、printViewerウィンドウに表示できないようです。
ありがとうございます!
編集:
私はこのファイルをダウンロードしようとしていません。私はちょうど新しいウィンドウでそれを開いて、ユーザーがそれを印刷できるようにしたい。開発者がPDFをダウンロードしようとしているところで、今度は同じ記事を2回お勧めしています。それは私が後になったことではありません。
ダウンロードして表示するだけですか? printViewerウィンドウとは何ですか? –
@teovankot私はそれを示したいと思います。 PrintViewerは、ユーザーの印刷ダイアログを自動的にプルアップする別のウィンドウです。 –
それでは、私はAJAXでファイルをダウンロードしないでください。それは本当に難しいことですので、古い方法を使用する方が良いです。詳細については[こちらをチェック](https://stackoverflow.com/q/4545311/1849444)を参照してください。 –