Speichern Sie den SSRS-Bericht als PDF mit Reporting Services

Ich habe versucht, einen SSRS-Bericht in PDF zu konvertieren und mit den Reporting Web Services auf meinem lokalen Laufwerk zu speichern. Obwohl ich die entsprechende pdf-Datei erzeugen kann, fehlt der Inhalt der Datei. Ich habe überprüft, dass der Bericht, den ich zu konvertieren versuche, nicht leer ist. In den generierten PDF-Dateien ist nur der Kopfbereich vorhanden. Unten ist der Code, den ich verwende:

protected void GeneratePDFFromReport(object sender, EventArgs e)
    {
        RS2005.ReportingService2005 rs;
        RE2005.ReportExecutionService rsExec;

       //Create a new proxy to the web service
        rs = new RS2005.ReportingService2005();
        rsExec = new RE2005.ReportExecutionService();

       //Authenticate to the Web service using Windows credentials
        rs.Credentials = new System.Net.NetworkCredential("username", "password", "domain");
        rsExec.Credentials = new System.Net.NetworkCredential("username", "password", "domain");
        //rsExec.Credentials = System.Net.CredentialCache.DefaultCredentials;

        rs.Url = "http://servername/reportserver/reportservice2005.asmx";
        rsExec.Url = "http://servername/reportserver/reportexecution2005.asmx";

        string historyID = null;
        string deviceInfo = null;
        string format = "PDF";
        Byte[] results;
        string encoding = String.Empty;
        string mimeType = "application/pdf";
        string extension = String.Empty;
        RE2005.Warning[] warnings = null;
        string[] streamIDs = null;

       //Path of the Report - XLS, PDF etc.
        string fileName = @"C:\Report\MemberReport.pdf";
       //Name of the report - Please note this is not the RDL file.
        string _reportName = @"/ReportFolder/ReportName";
        string _historyID = null;
        bool _forRendering = false;
        RS2005.ParameterValue[] _values = null;
        RS2005.DataSourceCredentials[] _credentials = null;
        RS2005.ReportParameter[] _parameters = null;

        try
        {
            _parameters = rs.GetReportParameters(_reportName, _historyID, _forRendering, _values, _credentials);
            RE2005.ExecutionInfo ei = rsExec.LoadReport(_reportName, historyID);

            results = rsExec.Render(format, deviceInfo,
                      out extension, out encoding,
                      out mimeType, out warnings, out streamIDs);

            try
            {
                FileStream stream = File.Create(fileName, results.Length);
                stream.Write(results, 0, results.Length);
                stream.Close();
            }
            catch { }

            results = null;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

Jede Hilfe würde sehr geschätzt werden. Vielen Dank.

0

1 Antworten

Angenommen, SSRS funktioniert mit dem Browser OK, ändern Sie bitte Ihren geposteten Code wie folgt:

1) Geräteinfo-String, bitte wie folgt einstellen:

string deviceInfo =  @"False"; //Initial value was null

2) Erstellen Sie die Header-Instanz, bevor Sie den Web-Aufruf LoadReport verwenden:

ExecutionHeader execHeader = new ExecutionHeader();
RE2005.ExecutionHeaderValue = execHeader;
0
hinzugefügt