![](/img/trans.png)
[英]Add a pdf to a Reporting Services report after rendering report as 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.