65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 SQL Server Reporting Service (SSRS) 动态创建 PDF

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.68/5 (12投票s)

2007年6月17日

4分钟阅读

viewsIcon

237753

downloadIcon

3802

使用 SQL Server Reporting Services (SSRS) 实时创建数据驱动 PDF 的免费、精简高效的方法。

Screenshot - pdf_webapp.jpg

Screenshot - pdf_result1.jpg

引言

该示例是一个 Web 应用程序,它接受用户输入的文本并实时创建数据驱动的 PDF。该 Web 应用程序以编程方式调用 SQL Server Reporting Services (SSRS) 的 Web 服务来完成此任务。

背景

基本上,有 4 种方法可以渲染 SSRS 数据驱动的报表:

  1. 最终用户通过 SSRS 内置 UI(报表查看器)触发报表。
  2. 最终用户通过预先构建的 URL 触发报表。此 URL 将触发 SSRS 渲染报表。
  3. SSRS 计划作业将按计划渲染报表。
  4. 程序员以编程方式调用 SSRS Web 服务来渲染报表。

本文采用的是第 4 种方法。通过调用 Web 服务,程序员可以最大程度地控制 SSRS,并以更少的限制(如果使用得当)实现更多功能。

您可以使用相同的思路来实时创建自己的 Excel 电子表格或 CSV 文件。

如果您没有 SSRS 开发环境,我建议您先尝试我的实时演示。从头开始在本地安装整个环境并非易事。

本文假定读者已经了解

  • 如何安装和使用 SSRS。
  • 如何创作和发布 SSRS 报表模板(RDL 文件)。
  • 如何使用 C# 调用 Web 服务。

免费、精简高效

如果您只需要一个纯粹的报表引擎,用于非重度使用,您不必购买 SQL Server 标准版(意味着数千美元的许可证费用)。SQL Server Express 版完全免费,并且可以执行大多数 SSRS 功能。

使用 SSRS Express 版时需要注意的一些限制:

  1. 计划报告
    SSRS 需要 SQL Server 作业计划程序来执行计划报告,而当前的 Express 版没有此功能。
  2. 扩展到多个 CPU
    目前,SQL Server Express 版只能利用一个 CPU。

示例代码在安装了 SQL Server Express 版 2005 的 XP Pro SP2 PC 和 Windows 2003 Server SP1 上进行了测试。

使用代码

源代码在以下 PC 上进行了测试:

  • Windows XP Pro SP2
  • .NET 2.0 框架
  • Visual Studio 2005
  • 商业智能模板(用于 SSRS 创作)
  • SQL Server Express 版 2005 附带高级服务 SP2(可从 Microsoft 下载)。
  • IIS 5.1(随 XP Pro 提供)

(如果您只想看看效果,可以尝试我的实时演示这里

在测试示例代码之前,您需要确保您的 SSRS 和 Web 服务已正确配置。

Screenshot - pdf_ssrscfg.jpg

上面的截图是 SSRS 配置屏幕。“绿色”指示灯表示该条目的配置正确。

现在,您可以在本地 PC 上编译并部署这两个源项目。

  1. PdfReport.zip 是用于创作示例 PDF 报表的 RDL 模板。
    • 将报表(pdf01.rdl)部署到您的本地 PC (https:///reportserver)。
    • 为了简化操作,pdf01.rdl 没有数据源。
    • 为了演示数据驱动,我设置了一个报表参数(用户输入)和五个“实时”雅虎股票图表(为了增加趣味性,我使用了 MSFT、SUNW、IBM、GOOG、ORCL)。
  2. RsPdf.zip 是调用 SSRS Web 服务以从 pdf01.rdl 模板创建实际 PDF 的 Web 应用程序。(在示例解决方案文件中,我已经添加了 Web 引用 WSDL 文件,该文件引用了 https:///ReportServer/ReportExecution2005.asmx)。

安全提示

您可以在 SSRS 渲染之前看到下面的代码。

rsExec.Credentials = System.Net.CredentialCache.DefaultCredentials;

因为您使用的是本地 PC 进行测试,所以我还假设您作为程序员始终以本地管理员身份登录本地 PC,因此默认凭据足以调用本地 SSRS Web 服务。

如果您要将相同的功能部署到公共服务器,例如我的实时演示,您可能需要执行以下步骤才能使代码正常运行。

  1. 在您的服务器上创建一个本地用户(例如 user1234),或者您也可以创建一个 Active Directory 域用户。
  2. 确保此用户属于 SQLServer2005ReportingServicesWebServiceUser 本地用户组(安装和配置 SSRS 时会创建此用户组)。
  3. 登录到 http://YourPublicServerURL/reports
  4. 单击报表条目(在此示例中为 pdf01)的“编辑”按钮。
  5. 将新创建的本地用户(或 AD 用户)添加到此报表模板(在此示例中为 pdf01)的“安全”选项卡。
  6. 在 SSRS 渲染之前使用以下代码:

    rsExec.Credentials = new NetworkCredential
                        ("user1234", "password", "domain");

如果 user1234 是 AD 用户,则“domain”是 AD 域;如果它只是一个本地用户,请将其留空“”。

© . All rights reserved.