簡體   English   中英

報告服務:獲取生成的報告的PDF

[英]Reporting services: Get the PDF of a generated report

我有一個報告服務服務器已經有一些運行報告,我現在需要通過自定義網站(運行asp.net MVC3)生成它們。

我需要以流/字節的形式檢索此報告以將其發送給用戶。 沒有“報告查看器”左右。

上次我使用報告服務是使用sql 2005,我們應該作為參考一個不起眼的asmx文件。

現在是什么,sql server報告2008 R2,.Net4和visual studio 2010? 我找不到解釋整個事情的教程。

(實際上我找不到sql 2008 r2沒有報表查看器的教程)

MSDN提供了幾種方法。 我經常在ASP .NET應用程序中使用URL訪問快速簡單的PDF按鈕。

這是一個快速破解的代碼。 可以將其清理為使用集成身份驗證,並且可以通過多種方式存儲報告名稱。 (我從一些舊的代碼中剪切並粘貼了這個代碼,它會將報告存儲到數據庫中,然后可以從數據庫返回該代碼。

// First read in the report into memory.

string strReportUser = "RSUserName";
string strReportUserPW = "MySecretPassword";
string strReportUserDomain = "DomainName";

string sTargetURL = "http://SqlServer/ReportServer?" +
   "/MyReportFolder/Report1&rs:Command=Render&rs:format=PDF&ReportParam=" +
   ParamValue;

HttpWebRequest req =
      (HttpWebRequest)WebRequest.Create( sTargetURL );
req.PreAuthenticate = true;
req.Credentials = new System.Net.NetworkCredential(
    strReportUser,
    strReportUserPW,
    strReportUserDomain );

HttpWebResponse HttpWResp = (HttpWebResponse)req.GetResponse();

Stream fStream = HttpWResp.GetResponseStream();




//Now turn around and send this as the response..
byte[] fileBytes = ReadFully( fStream );
// Could save to a database or file here as well.

Response.Clear();
Response.ContentType = "application/pdf";
Response.AddHeader(
    "content-disposition",
    "attachment; filename=\"Report For " +
        ParamValue + ".pdf\"" );
Response.BinaryWrite( fileBytes );
Response.Flush();
HttpWResp.Close();
Response.End();

ReadFully是

public static byte[] ReadFully( Stream input )
{
   using ( MemoryStream ms = new MemoryStream() )
   {
      input.CopyTo( ms );
      return ms.ToArray();
   }
}  

因為您有嵌套流,所以您可能希望在復制后關閉第一個流以避免關閉流錯誤。 此外,如果您獲得401 Unauthorized,請嘗試使用默認憑據。

            req.UseDefaultCredentials = true;
            req.PreAuthenticate = true;
            req.Credentials = CredentialCache.DefaultCredentials;

            HttpWebResponse HttpWResp = (HttpWebResponse)req.GetResponse();

            Stream fStream = HttpWResp.GetResponseStream();                

            //Now turn around and send this as the response..
            byte[] fileBytes = ReadFully(fStream);
            // Could save to a database or file here as well.
            HttpWResp.Close();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM