2

サーバー側で静的 WebMethod を呼び出す AJAX 呼び出しがあります。サーバー側メソッドは、PDF ファイルのバイト ストリームを含む MemoryStream を返します。クライアント側で 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
        }
    });
}
4

3 に答える 3

1

私は個人的にこれを行ったことはありませんが、最初に試みることは次のとおりです。

サーバー側で適切な HTML ドキュメントと CSS を動的に構築する phantomJS を使用してそのドキュメントをレンダリングする そのドキュメントを PDF に変換し、一時ファイルに保存するように phantomJS に指示する 一時 PDF ファイルを応答本文に書き込むことにより、HTTP 応答として PDF を送り返す一時ファイルを削除する content-type や content-disposition などに苦労している場合、ディスクに有効な pdf ファイルがあり、そのデータを HTTP 応答に書き込むだけであれば、心配する必要はありません。適切なヘッダーを使用すると、ブラウザーに PDF を表示するか、ダウンロードとして保存するファイルとして扱うように要求できるはずです。

于 2013-09-20T10:18:29.603 に答える
0

これを試してください。データベースから選択したバイトをコンテンツに与えます。

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();
于 2013-09-20T10:39:29.240 に答える
0

ここで私はあなたが使用することをお勧めします

Window.open('~/path/name.pdf');

これを使用すると、ブラウザでpdfを表示したり、ブラウザから保存して印刷したりできます。

于 2013-09-20T10:19:15.807 に答える