ASP.NETでCrystalReportsを利用する場合に、CrystalViewerを利用する方法がありますが、
データ件数が多かったり、サブレポートを使用していたりするとViewerのレスポンスが悪く、パフォーマンス的に問題になることがあります。(推測ですがページ移動する毎に再度データを読み込んだりしているのでは・・・)
PDFに出力すると、レポート自体をイメージで出力するのでレスポンスが改善される場合があります。
ASP.NETからPDF出力する簡単な例(C#)
※VS2003
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
// rptName:ファイル名指定します
// (例) ExportToPDF(@"C:\Inetpub\wwwroot\WebApplication1\CrystalReport1.rpt");
private void ExportToPDF (string rptName)
{
ReportDocument Report = new ReportDocument();
// レポートファイルの読み込み
Report.Load(rptName);
// オプションを取得および設定
ExportOptions exportOpts;
exportOpts = Report.ExportOptions;
exportOpts.ExportFormatType = ExportFormatType.PortableDocFormat;
exportOpts.FormatOptions = new PdfRtfWordFormatOptions();
ExportRequestContext req = new ExportRequestContext();
req.ExportInfo = exportOpts;
// ストリームへエクスポート
System.IO.Stream outStream = Report.FormatEngine.ExportToStream(req);
byte[] bLength = new byte [outStream.Length];
outStream.Read(bLength, 0, (int)outStream.Length);
outStream.Close();
Response.ClearHeaders();
Response.ClearContent();
Response.ContentType = "Application/pdf";
// ダイアログ表示
Response.AddHeader("content-disposition","attachment; filename=test.pdf");
// HTTP 出力ストリームに書き込み
Response.BinaryWrite(bLength);
Response.End();
}
・Report.FormatEngine.ExportToStreamでストリームにエクスポートしています。
・Response.ContentTypでPDFを指定します。
・Response.BinaryWriteでクライアントに送信しています。
2007/07/28 追記
// ダイアログ表示
Response.AddHeader("content-disposition","attachment; filename=test.pdf");
最近のコメント