gpt4 book ai didi

c# - 如何在 C# 中更改 SSRS 报告的高度?

转载 作者:行者123 更新时间:2023-11-30 12:55:28 32 4
gpt4 key购买 nike

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

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

我可以用这段代码改变 ReportViewer 的大小

rptviewer.Height = Unit.Pixel(520);

请帮助我解决以下问题。

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

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

我以前的解决方法

<-------- 1 ---------->

 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");

<-------- 2 ---------->

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

<-------- 3 ---------->

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

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

最佳答案

问题是,为了在渲染过程中控制页面大小,我们需要传递适当的 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 英寸。

关于c# - 如何在 C# 中更改 SSRS 报告的高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49322008/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com