2009-07-02 12 views
1

これで、SSRS 2008レポートをイメージにエクスポートする作業を行っています。私がしたいのは、個々のページをイメージとしてエクスポートすることです。私のコードからは、レポートの最初のページをエクスポートすることしかできません。どんな助けでも大歓迎です。SSRS 2008レポートのみをエクスポートしてイメージにエクスポート最初のページ

Dim warnings As Microsoft.Reporting.WebForms.Warning() 
    Dim streamids As String() 
    Dim mimeType, encoding, extension As String 

    Dim deviceInfo As XElement = _ 
     <DeviceInfo> 
      <OutputFormat>JPEG</OutputFormat> 
     </DeviceInfo> 

    Report.ServerReport.SetParameters(Parameters) 
    Dim bytes As Byte() = Report.ServerReport.Render("Image", deviceInfo.ToString(), mimeType, encoding, extension, streamids, warnings) 

    Dim FileStream As New MemoryStream(bytes) 
    Dim ReportImage As New System.Drawing.Bitmap(FileStream) 

    ReportImage.Save(Server.MapPath("/Testing.jpg"), System.Drawing.Imaging.ImageFormat.Jpeg) 

答えて

5

私のプロジェクトの1つには、次のコードを使用して1ページあたりのストリームを取得します。残念ながら私はVB.NETを使用しませんが、これをC#からVBに変換できるはずです。注:これはSSRS2005で動作します - SSRS2008でも動作しているかどうかはわかりません。また、レポートビューアを使用せずにレポートを直接印刷するコードを使用しているため、EMFデバイス情報を作成しています。これを変更する必要があります。

このベースコードは、グーグルで何時間もウェブ上で見つかったものです。著者にはクレジットを入れたいと思いますが、リンクをブックマークしませんでした。

CultureInfo us = new CultureInfo("en-US"); 
string deviceInfo = String.Format(
     "<DeviceInfo>" + 
     " <OutputFormat>EMF</OutputFormat>" + 
     " <PageWidth>{0}cm</PageWidth>" + 
     " <PageHeight>{1}cm</PageHeight>" + 
     " <MarginTop>{2}cm</MarginTop>" + 
     " <MarginLeft>{3}cm</MarginLeft>" + 
     " <MarginRight>{4}cm</MarginRight>" + 
     " <MarginBottom>{5}cm</MarginBottom>" + 
     "</DeviceInfo>", 
     Math.Round(m_pageSize.Width, 2).ToString(us), 
     Math.Round(m_pageSize.Height, 2).ToString(us), 
     Math.Round(m_marginTop, 2).ToString(us), 
     Math.Round(m_marginLeft, 2).ToString(us), 
     Math.Round(m_marginRight, 2).ToString(us), 
     Math.Round(m_marginBottom, 2).ToString(us)); 

m_reportStreams = new List<Stream>(); 
try 
{ 
    // Tell SSRS to store one stream per page on server 
    NameValueCollection urlAccessParameters = new NameValueCollection(); 
    urlAccessParameters.Add("rs:PersistStreams", "True"); 

    // Render first page 
    Stream s = viewer.ServerReport.Render("IMAGE", deviceInfo, urlAccessParameters, out mime, out extension); 
    m_reportStreams.Add(s); 

    // Loop to get other streams 
    urlAccessParameters.Remove("rs:PersistStreams"); 
    urlAccessParameters.Add("rs:GetNextStream", "True"); 
    do 
    { 
     s = viewer.ServerReport.Render("IMAGE", deviceInfo, urlAccessParameters, out mime, out extension); 
     if (s.Length != 0) m_reportStreams.Add(s); 
    } 
    while (s.Length > 0); 

    // Now there's one stream per page - do stuff with it 
} 
finally 
{ 
    foreach (Stream s in m_reportStreams) 
    { 
     s.Close(); 
     s.Dispose(); 
    } 
    m_reportStreams = null; 
} 

EDITは
viewerあなたは/印刷、保存しようとしているレポートを表示するように初期化ReportViewer制御のプログラムで作成されたインスタンスであることを言及するのを忘れました。

+0

私はこれを試しましたが、エラーが表示されます。実行 ''が見つかりません –

+0

Googleが迅速に対応してくれた次のURLを示しました。あなたがエラーメッセージをGoogleにグーグルで伝えると他のものも利用できます: http://social.msdn.microsoft.com/forums/en-US/sqlreportingservices/thread/0ab399df-56b3-4ac8-a703-4001e7a5fb18 –

+0

私は、私は提案されたすべての推奨ソリューションを試しました。私はあなたの答えを正しいものとして受け入れ、問題の新しい質問を投稿します。 –

関連する問題