查看SSRS / RDL的PDF文件

时间:2013-09-13 20:29:21

标签: c# sql sql-server-2008 reporting-services

我想访问RDL以获取PDF格式的报告。我有

    static void Main()
    {
        string pdfOutputFIleName = @"C:\Development\testoutputAsPdf.pdf";
        var urlAsPdf = @"http://serverName/ReportServer/Reserved.ReportViewerWebControl.axd?ExecutionID=xxx&Culture=1033&CultureOverrides=False&UICulture=9&UICultureOverrides=False&ReportStack=1&ControlID=yyy&OpType=Export&FileName=Bug+Status&ContentDisposition=OnlyHtmlInline&Format=PDF";

        var client = new WebClient();
        client.UseDefaultCredentials = true;

        //client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
        client.Headers.Add("Content-Type", "application/pdf");

        Process(client, urlAsPdf, pdfOutputFIleName);

        Console.Read();
    }

    private static void Process(WebClient client, string url, string outputFileName)
    {
        Stream data = client.OpenRead(url);
        using (var reader = new StreamReader(data))
        {
            string output = reader.ReadToEnd();
            using (Stream s = File.Create(outputFileName))
            {
                var writer = new StreamWriter(s);
                writer.Write(output);
                Console.WriteLine(output);                                        
            }
        }
    }

我的浏览器中的URL工作正常。该程序运行。当我打开PDF时,我在Adobe收到错误:

  

打开此文档时出错。文件已损坏   无法修复。

1 个答案:

答案 0 :(得分:1)

由于您已经指定了输出文件名和要读取的网址,因此您可以使用WebClient.DownloadFile(string address, string filename)成员。

private static void Process(WebClient client, string url, string outputFileName)
{
    client.DownloadFile(url, outputFileName);
}