【问题标题】:Dynamically store and send SSRS reports as PDF with C#使用 C# 以 PDF 格式动态存储和发送 SSRS 报告
【发布时间】:2016-10-11 15:11:05
【问题描述】:

我在 SSRS 中有一份报告,它以 SalesRepCodeEmail 为参数来生成 PDF 收据。如果我使用的是报告查看器,它就可以正常工作。

使用 C#,我想为每个存在的 SalesRep 自动生成一个 PDF,一旦呈现 PDF,我想将它存储在一个文件夹中,然后将其作为电子邮件附件发送。

我查看了 ReportingService2005 类的 MSDN 文档,但这是指 2005 版本,我使用的是 SSRS 2012,但我仍然没有找到与我正在使用的版本相关的东西。

是否有适当的方法来实现这一点?

【问题讨论】:

  • 由于您使用的是 C#,您不能将数据拉到网格中,然后使用第三方 nuget 包从那里导出为 PDF 吗?也许像 PDFSharp 之类的东西。我看到的唯一问题是您必须从头开始格式化所有内容以使其在 PDFSharp 上看起来“漂亮”,但它可以工作。 link

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


【解决方案1】:

您可以毫无问题地使用ReportExecutionServiceRender 方法。您需要添加对ReportExecution2005 的服务引用,即报表服务器的Execution Endpoint

示例

以下示例取自 msdn,并用于一些小的更改。要查看原始示例,请查看msdn example。使用时注意使用PDF作为格式,并且关于报表路径,它应该是你的报表路径以/开头,以不带.rdl的报表名称结尾。

ReportExecutionService rs = new ReportExecutionService();
rs.Credentials = System.Net.CredentialCache.DefaultCredentials;
rs.Url = "http://MyServer/reportserver/ReportExecution2005.asmx";
/* Render arguments */
byte[] result = null;
string reportPath = "/MyFolder/MyReport"; 
string format = "PDF";
string historyID = null;
string devInfo = @"<DeviceInfo><Toolbar>False</Toolbar></DeviceInfo>";          
/* Prepare report parameter.*/
ParameterValue[] parameters = new ParameterValue[1];
parameters[0] = new ParameterValue();
parameters[0].Name = "SomeParameter";
parameters[0].Value = "SomeValue";
DataSourceCredentials[] credentials = null;
string showHideToggle = null;
string encoding;
string mimeType;
string extension;
Warning[] warnings = null;
ParameterValue[] reportHistoryParameters = null;
string[] streamIDs = null;
ExecutionInfo execInfo = new ExecutionInfo();
ExecutionHeader execHeader = new ExecutionHeader();
rs.ExecutionHeaderValue = execHeader; 
/*Load and Render Report*/
execInfo = rs.LoadReport(reportPath, historyID);
rs.SetExecutionParameters(parameters, "en-us");
String SessionId = rs.ExecutionHeaderValue.ExecutionID;
result = rs.Render(format, devInfo, out extension, out encoding, 
    out mimeType, out warnings, out streamIDs);
execInfo = rs.GetExecutionInfo();
/*Save File*/
System.IO.File.WriteAllBytes(@"d:\report.pdf", result);

【讨论】:

  • 嗨,我在 Asp.Net Core 中试过这个,但它显示了一些不同的方法!
【解决方案2】:

我已将 ReportingService2005 Web 服务与 SQL 2012 一起使用,它运行良好。

简而言之 - 您添加对 Web 服务的引用、绑定参数、使用 PDF 调用 Render() 并将 ByteStream 保存为本地文件。

有 2 个令人困惑的 Web 服务(报告服务和报告执行服务)

我认为您只需使用报告执行服务即可。

首先要检查的是您可以在 SSRS 页面上看到 .asmx 文件 (http://...ReportExecution2005.asmx)

【讨论】:

    猜你喜欢
    • 2018-12-18
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多