【问题标题】:How to change the height of a SSRS report in C#?如何在 C# 中更改 SSRS 报告的高度?
【发布时间】:2018-03-16 13:30:40
【问题描述】:

您好,我正在开发一个 MVC 项目,其中我有一个报告页面,用户可以使用 report viewer. 来查看报告

我需要为报表动态设置页面大小,我尝试了很多方法来解决这个问题,但都无法解决。

我可以使用此代码更改 ReportViewer 大小

rptviewer.Height = Unit.Pixel(520);

请帮助我解决以下问题。

1.是否可以使用C#代码更改SSRS报告页面高度?

2.是否可以在运行时更改纸张大小?

我以前的解决方法

 System.Drawing.Printing.PageSettings pg = new System.Drawing.Printing.PageSettings();
                pg.Margins.Top = 0;
                pg.Margins.Bottom = 0;
                pg.Margins.Left = 0;
                pg.Margins.Right = 0;
                System.Drawing.Printing.PaperSize size = new PaperSize(); 
                size.RawKind = (int)PaperKind.A5;
                pg.PaperSize = size;  
                rptviewer.SetPageSettings(pg);  
                ViewBag.ReportViewer = rptviewer;
                return View("_ReportView");

 System.Drawing.Printing.PageSettings MyPageSize= new System.Drawing.Printing.PageSettings(); 
 MyPageSize.PaperSize = new System.Drawing.Printing.PaperSize("Custom", 17, 12); 
 rptviewer.SetPageSettings(MyPageSize);

var setup = rptviewer.GetPageSettings();           
setup.PaperSize.Height = 1500;
rptviewer.SetPageSettings(setup);

以上逻辑都不适合我:-(

【问题讨论】:

  • 您的 MVC 前端应用程序不会影响报表在报表服务器上的呈现方式。报表查看器对象是一个容器,用于保存呈现的报表。更改其大小不会影响其中报表的属性。您能否向我们提供有关您要解决的问题的更多信息?
  • 当然,我错过的第一件事是我没有使用报表服务器,我正在使用 LocalReport 呈现到我的 MVC 应用程序。
  • 我假设您的意思是 SSRS 安装在托管网页的系统上。无论哪个系统充当服务器,如果 SSRS 正在提供报表,则您无法更改报表在外部呈现给 SSRS 服务的方式。
  • 问题的目标是,我们有一个超过 40 列的大型报表,并且报表的高度固定为 11 英寸(在设计报表时在报表属性中分配)。当我们将报告加载到报告查看器(高度 500 像素)时,我们可以看到水平和垂直滚动条,这是很常见的事情。我们计划让这个报告更具响应性,因为报告的这个高度将使用可用的空来计算空间&我们可以将计算出的高度分配给报告,这样我们就可以避免垂直滚动条,并且在所有屏幕尺寸下看起来都不错
  • 唯一可能的方法是将高度(以英寸为单位)作为参数传递给报告。在报告中,您可以纠正一些嵌入式代码以在运行时更改页面大小。但是,我不知道这是否会起作用,因为这些属性没有启用表达式。但是您肯定必须将参数传递到报告中才能远程实现。您的 MVC 报表查看器控件只是一个容器,不会影响报表的定义。

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


【解决方案1】:

问题是,为了在渲染过程中控制页面大小,我们需要在运行时将正确的Device Information Settings 传递给报表。这将适用于面向物理页面的渲染,如 PDF、图像等。这是一个简单的 Xml 字符串,可以作为参数传递给报告以控制这些设置。每种导出类型都有一组不同的属性,可以通过这种方式覆盖和控制这些属性。

在以下示例中,执行导出为 PDF 并传递页面高度和宽度以匹配 A4 纸张大小作为目标设备(第 66 行):

 private void RenderReportToClient()
 {
     //set credentials
     RSExecuteProxy.ReportExecutionService rs = new RSExecuteProxy.ReportExecutionService();
    rs.Credentials = System.Net.CredentialCache.DefaultCredentials;

    RSProxy.ReportingService2005 rsInfo = new RSProxy.ReportingService2005();
    rsInfo.Credentials = System.Net.CredentialCache.DefaultCredentials;
     // init render args
    byte[] result = null;
    string reportPath = rptViewer.ServerReport.ReportPath;
   string format = "PDF";
    string historyId = null;
     string encoding;
    string mimeType;
     string extension;
    RSExecuteProxy.Warning[] warnings = null;
     string[] streamIDs = null;
     //init exec info
     RSExecuteProxy.ExecutionInfo execInfo = new RSExecuteProxy.ExecutionInfo();
     RSExecuteProxy.ExecutionHeader execHeader = new RSExecuteProxy.ExecutionHeader();
     rs.ExecutionHeaderValue = execHeader;
     //get report
     execInfo = rs.LoadReport(reportPath, historyId);
     String SessionId = rs.ExecutionHeaderValue.ExecutionID;
    //get parameter info
     ReportParameterInfoCollection parameters = rptViewer.ServerReport.GetParameters();
    //figure out how many parameters we will have 
     //those with multi-value will need there own ParameterValue in the array
    int paramCount = 0;
     foreach (ReportParameterInfo pramInfo in parameters)
     {
         paramCount += pramInfo.Values.Count;
    }

    RSExecuteProxy.ParameterValue[] prams = new SSRSWeb.RSExecuteProxy.ParameterValue[paramCount];
    int currentPramPosition = 0;

     //set pram values
     foreach (ReportParameterInfo pramInfo in parameters)
     {
         foreach (string pramValue in pramInfo.Values)
         {
           prams[currentPramPosition] = new SSRSWeb.RSExecuteProxy.ParameterValue();
            prams[currentPramPosition].Label = pramInfo.Name;
            prams[currentPramPosition].Name = pramInfo.Name;
         prams[currentPramPosition].Value = pramValue;
            currentPramPosition++;
        }
      }

       rs.SetExecutionParameters(prams, "en-US");

      //build the device settings  (A4 8.3 × 11.7)
       string deviceInfo = string.Format("<DeviceInfo><PageHeight>{0}</PageHeight><PageWidth>{1}</PageWidth></DeviceInfo>", "11.7in", "8.3in");

    //get report bytes
     result = rs.Render(format, deviceInfo, out extension, out encoding, out mimeType, out warnings, out streamIDs);

       Response.ClearContent();
      Response.AppendHeader("Content-Disposition", "inline;filename=report.pdf");
       Response.AppendHeader("content-length", result.Length.ToString());
     Response.ContentType = "application/pdf";
    Response.BinaryWrite(result);
    Response.Flush();
     Response.Close();
   }

保存报告后,您可以查看 PDF 并检查属性,并注意页面高度和宽度为指定的 8.3 英寸 x 11.7 英寸。

【讨论】:

    猜你喜欢
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-09
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多