1

これが必ずしも重要かどうかはわかりませんが、グリッドとそのレポートにInfragisticsiggridを使用してPDFにエクスポートしています。

私が抱えている根本的な問題は、エクスポートしたいデータがブラウザーにあることであり、ダウンロードするためにサーバー側のファイルを作成する必要がないことを望んでいます。ユーザーがPDFをダウンロードするためにクリックするアイコンが画面に表示されます。

つまり、私がクライアントで行っているのは、すべてのデータを収集することです。これは、ユーザーがデータを並べ替え、フィルタリング、列順に並べ替えたときにデータをエクスポートするため、クライアント側で行う必要があります(そうでない場合は、データをサーバー側で収集するだけで、これが簡単になります)。次に、POSTを介してデータをサーバーに送信します。

サーバー側でPDFファイルを生成します。これで、明らかに、PDFサーバー側を保存して、生成されたファイルにリダイレクトできますが、それにより、避けたい一時ファイルのメンテナンスが追加されます(ただし、最悪の場合、そこに行くことができます。今すぐオプションを探してください) 。

エンコードされたデータベース64を返してから、次のことを実行してみました。

window.open("data:application/pdf;base64," + encodedData);

URLの制限が2Kを少し超えているため、これは(少なくともIEでは)機能しません。

ここでdownloadDataURIjavascript関数を使用してみました:http ://code.google.com/p/download-data-uri/

しかし、それはChromeでのみ機能するように見え(Webkitチェックをコメントアウトした後でも)、その理由を理解するのに十分賢くないようです。

サーバー側のファイルを作成する必要がない明らかな可能性を見逃していると確信していますが、それが表示されていないだけです。(免責事項:私の娘は今朝早く私をひどく目覚めさせたので、答えは本当に些細なことかもしれません、そして私の脳が働いているとき私は明日愚かになるでしょう)。

4

1 に答える 1

2

サーバー側でPDFファイルを生成します。これで、明らかに、PDFサーバー側を保存して、生成されたファイルにリダイレクトできますが、それにより、避けたい一時ファイルのメンテナンスが追加されます(ただし、最悪の場合、そこに行くことができます。今すぐオプションを探してください) 。

サーバーに保存する必要はありません。PDFファイル(ある種のStreamまたはbyte []に​​あると思います)をユーザーにストリーミングするだけです。あなたがする必要があるのは次のようなものです

 Response.ContentType = "application/pdf";
 Response.AddHeader("Content-Disposition", "filename.pdf");
 Response.BinaryWrite(bytes);
 Response.Flush();
 Response.Close();
 Response.End();

これにより、ユーザーはファイルを保存するか、AdobeReaderで開くように求められます。ファイルはサーバー上にまったく作成されません。

于 2013-03-19T16:41:53.913 に答える