通过 SQL Server Reporting Service 或 Report Viewer 控件创建 PDF
通过 SSRS 2008 或 Report viewer 控件实现数据驱动的 PDF 创建,并比较这两种方法的优劣
引言
本文将介绍两种方法来创建数据驱动的 PDF:SSRS 2008 和 Reporting Viewer 控件。我还会解释和比较这两种方法的根本异同。
请注意,本文介绍的是如何使用 SSRS 或 Report Viewer 控件作为后端渲染引擎。本文并非介绍如何将 SSRS 或 RVC 用作 UI 控件来显示实际报表。如果您对此类主题感兴趣,MSDN 有一个非常有用的链接可以比较这两种功能,点击 这里。
背景
早在 2007 年,我曾写过一篇 CodeProject 文章《使用 SQL Server Reporting Service 动态创建数据驱动的 PDF》。该文章适用于 VS 2005 和 SQL 2005。最初我只是想为 VS 2010 和 SQL 2008 修改那篇文章,但内容太多,无法在一篇修订版中包含,所以我决定创建全新的演示并撰写一篇文章来解释它们。
在线演示
SSRS 的安装和配置并非易事,因此在您开始编写代码之前,请先查看在线演示。
- SSRS PDF 方法 (注意:首次点击可能需要 15 秒才能看到结果,之后将只需几秒钟。)
- Report Viewer 控件 PDF 方法 (注意:首次点击可能需要 15 秒才能看到结果,之后将只需几秒钟。)
Using the Code
ReportViewer2Pdf.zip 适用于 Report Viewer 控件方法。您需要 VS 2010 + .NET 4.0 才能运行它。此外,您需要在开发 PC 上本地安装 Report Viewer 控件 2010(当您将解决方案部署到服务器时,也需要在服务器上安装 RVC)。
安装 RVC 2010 的 Microsoft 链接在此:这里。
======================
现在我们来谈谈 SSRS 方法。
Ssrs2Pdf.zip 是一个 SSRS 方法的 Web 应用程序解决方案。您需要 VS 2010 + .NET 4.0 才能打开它。另外,您需要在开发 PC 或服务器上正确安装和配置 SSRS 2008,因为该解决方案需要 SSRS Web 服务引用。本文不包含如何设置 SSRS 2008 的内容,但您可以在 MSDN 上找到详细信息,点击 这里。
Ssrs2Pdf_Rdl.zip 是用于创建 RDL(`Ssrs2Pdf `Web 应用程序的报表骨架)的解决方案。您需要 VS 2008 + Business Intelligence Studio 模板才能打开它。Business Intelligence Studio 模板在您本地安装 SQL Server 2008 时(任何版本均可)会一并安装。注意:您仍然需要 SSRS 2008 来托管此 RDL 的部署。
我将 RDL 命名为“Rpt01.rdl”,并将其部署到我的本地 SSRS 文件夹“ssrs2pdf”。
在 Web 应用程序部分,我也将其硬编码如下:
Rse2005.ExecutionInfo ei = rsExec.LoadReport("/ssrs2pdf/Rpt01", historyID);
您可以按需更改。但不要忘记同时更改您的 SSRS 设置。
我的示例中的 Web 服务链接在 web.config 中如下所示:
<add key="ReportExecution2005.ReportExecution2005"
value="<a href="https:///ReportServer/ReportExecution2005.asmx"/">
https:///ReportServer/ReportExecution2005.asmx"/</a>
您可以更改它以适应您的 Web 服务 URL。
对于 SSRS 调试,您需要了解一些技巧。
如果您使用的是 Windows 7 或 Vista,请确保将“localhost”添加到 IE 的内部网或受信任站点列表中(在IE\Internet Options\security\Local Intranet 中配置)。此外,在调试之前,请以“以管理员身份运行”模式启动 IE 和 Visual Studio。否则,您很可能会收到“用户获得的权限不足,无法执行此操作”的错误。
再次强调,SSRS 的配置很繁琐,我建议您先尝试在线演示来感受一下。
关注点
关于后端报表渲染,您可能想知道这两种方法的优点和缺点,或者何时使用哪种方法。我之前也有同样的疑问。在深入研究和测试一段时间,并在多个项目中应用之后,我对这个问题有一些个人见解。
为了更好地解释,我下面整理了一个 FAQ 列表,解释了一些关于 SSRS 和 Report Viewer 控件的基本术语和概念。
我的 SSRS 和 Report Viewer 控件 FAQ 列表
======================================================
声明: 以下 FAQ 仅代表我个人对 SSRS 和 Report Viewer 控件的理解。我不能保证其技术上的绝对正确性,因此请按原样参考。但我可以保证的是,这些理解对我的项目非常有帮助。此外,这些 FAQ
距离对这两种软件的真正介绍还有很长的路要走,因为主题太庞大了,无法在本文中全部涵盖。如果您确实有兴趣进一步了解,请前往 MSDN 查找更多信息。
======================================================
1Q:这两种方法的安装和配置有什么区别?
A: SSRS 是一个更大、更复杂的软件应用程序。SSRS 自 SQL 2005 起就是 SQL Server 的一部分,安装文件有数百 MB,安装和正确配置需要半小时甚至数小时。Report Viewer 控件要小得多,它要么已经包含在您的 .NET 3.5 或 4.0 环境中,要么可以单独安装。您可以从 Microsoft 下载 Report Viewer 控件 2010 可再发行组件包(此处),仅 4.5 MB。安装会将必要的 DLL 文件放到 GAC(通常是c:\windows\assembly)。您可以在本地开发 PC 或生产服务器上安装此 RVC 包,大约需要 5 分钟。
2Q:SSRS 可以独立安装(不与 SQL 数据库安装在同一台物理服务器上)吗?
A: 是的。SSRS 的安装不需要将 SQL 数据库安装在同一台服务器上,但 SSRS 仍然需要“指向”或“链接”到现有的 SQL Server 数据库实例。因为所有配置和报表定义最终都保存在数据库中,SSRS 的配置
数据库默认名称为“ReportServer
”和“ReportServerTempDB
”。
这对于多层企业解决方案(数据放在最安全的地方,报表引擎和/或报表定义与网页放在 Web 服务器上)非常有益。
3Q:SSRS 需要 IIS 吗?
A: 在 SQL 2005 中,它确实需要 IIS 与之安装在同一台服务器上,因为它需要 IIS 来托管其 Web 服务接口和 Web 门户接口(尽管您可以对最终用户隐藏这两个 UI)。在 SQL 2008 中,SSRS 有自己的嵌入式 Web 服务器,不再需要 IIS。
4Q:SSRS 需要 Active Directory 或域吗?
A: 不是必需的。SSRS 可以设置为完全独立的服务器,不带 AD/域。尽管 AD/域设置可以将其提升到正常的企业安全级别。
5Q:两种方法的许可证或成本是多少?
A: 简单来说,这两种解决方案都是免费的。如果您已经购买了 SQL Server Standard 及以上版本的许可证,SSRS 已包含在内。如果您只使用 SQL Server 的免费版本 SQL Server Express Edition,SSRS 是免费许可的。Report Viewer 控件可以永久免费使用和分发。
6Q:什么是 RDL(报表定义语言)或 RDLC,它们如何应用于这两种软件?
A: RDL 是一个文件扩展名,例如“rpt01.rdl”。它是一个纯文本 XML 文件。基本上,RDL 是报表的骨架、布局和结构,数据(来自 SQL 数据库的查询)是其中的内容。SSRS + RDL + 数据将为您提供渲染后的报表,可以是 HTML 或其他格式(PDF、Word、Excel)。
RDLC 与 RDL 基本相同(略有不同,8Q 中有更详细的解释),“C”表示“客户端”或类似含义。RDLC 通常应用于 Report Viewer 控件,但其作用与 RDL 相同,都是报表的骨架。因此,Report Viewer 控件 + RDLC + 数据也将渲染一个报表。顺便说一句,Report Viewer 控件也可以连接到 SSRS 上的 RDL。
7Q:RDL 或 RDLC 物理上存放在哪里?
A: RDL 和 RDLC 都是纯文本 XML 文件。
RDL 可以部署到 SSRS 服务器。“部署”是将 RDL 放入 SSRS 配置数据库的过程,这些数据库是“ReportServer
”和“ReportServerTempDB
”(参见 2Q)。部署可以通过 Visual Studio 或 SSRS Web 管理门户完成(参见 9Q)。
RDLC 可以是您的 ASP.NET Web 应用程序或 Windows 窗体应用程序的一部分(可以是文件系统中的文件,也可以是资源文件)。
8Q:创建 RDL 或 RDLC 的工具有哪些?
A: RDL 是从 Visual Studio Business Intelligence 项目模板创建的(有时也称为Business Intelligence Studio 或 BI studio)。对于 PC 开发,您先安装 Visual Studio,然后安装 SQL Server(任何版本)。Business Intelligence 模板包含在 SQL Server 安装包中。此模板对 VS 版本非常敏感,这意味着您只能使用 VS 2005 + SQL Server 2005 BI Studio 创建 SSRS 2005 的 RDL,并使用 VS 2008 + SQL Server 2008 BI Studio 创建 SSRS 2008 的 RDL。目前没有 VS 2010 模板。
RDLC 则要容易得多,因为您可以直接从普通的 Visual Studio 项目(无论是 Windows 窗体还是 Web 应用程序)中创建它。
9Q:SSRS Web 管理和 SSRS Web 服务的 URL 是什么?
A: SSRS Web 管理门户用于管理工作(如设置数据源、在线文件夹、安全、调整报表参数、计划任务等)。本地安装的 URL 通常是:https:///Reports。您可以打开它并执行大多数 SSRS 管理工作。
SSRS Web 服务用于运行时渲染报表。SSRS Web 服务 URL 是:https:///Reportserver/ReportExecution2005.asmx,即使在 SSRS 2008 中,您仍然需要使用ReportExecution2005.asmx 作为报表渲染 Web 服务。
当您从 VS 2008 BI Studio(即 Business Intelligence 项目模板)部署 RDL 时,您会设置部署文件夹为 https:///Reportserver/<your report folder>。
10Q:SSRS 或 Report Viewer 控件在后台如何创建 PDF?
A: SSRS 通过ReportExecution2005.asmx Web 服务创建 PDF 或其他格式的报表。
您可以在代码中进行同样的操作。通过调用ReportExecution2005.asmx 中的函数并传入适当的参数,您可以触发 SSRS 进程为您渲染特定的报表。实际上,SSRS 进程将与您的主代码运行在不同的进程中,无论是在同一台机器上还是在其他任何安装了 SSRS 的物理服务器上。
另一方面,Report Viewer 控件与您的主代码在同一个进程中运行,无论是您的 ASP.NET 进程还是您的 WinForm 主进程。当然,您也可以将其复杂化,将其分配到其他线程,这取决于您。
11Q:使用 SSRS 方法开发报表时,IDE 有哪些技巧?
A: 由于 UAC 和 IIS 7.5 的新结构,在 Windows 7 或 Vista 环境中,您最好以“以管理员身份运行”模式启动 IE,以便能够打开本地 PC 的 SSRS Web 管理和 Web 服务 URL。更进一步,您可能需要确保您的“localhost”在 IE 的
内部网站点列表中(IE\Internet Options\security\Local Intranet)。
此外,在从 Visual Studio 调试调用 Web 服务代码之前,最好以“以管理员身份运行”模式启动 VS。否则,您将总是遇到诸如“用户获得的权限不足,无法执行此操作”之类的错误。
如果 Report viewer 控件不连接到 SSRS,则不需要此技巧。
12Q:何时使用 SSRS,何时使用 Report Viewer 控件渲染 PDF?
A: 这取决于(一如既往)。;-)
Report Viewer 控件 + RDLC 编程简单易用。特别是如果您是报表项目的“一人团队”,这是个不错的选择。Report Viewer 控件可以打开保存在文件系统中的 RDLC,或保存在 SSRS 数据库中的 RDL。但是,您必须在代码中处理数据绑定和用户访问控制。
另一方面,SSRS 更加复杂:您需要多层配置/设置,相信我,这并非易事。
但是,如果贵公司需要托管许多(几十或几百个)RDL 作为不同部门的报表模板,SSRS 就会显得很有意义。通常会指定 DBA 甚至专门的团队来维护所有企业级的 RDL。DBA 或团队将负责安全访问、数据源连接,甚至交付或计划渲染部分。
此时,程序员只需要调用 SSRS Web 服务(通过传递适当的参数和安全令牌)即可根据 RDL 渲染报表。这可以是用于在午夜渲染数千个数据驱动 PDF 的后台任务,也可以是单个用户单击按钮即可为其动态渲染一个 PDF。
这两种解决方案都能轻松渲染数千个 PDF。因此,选择哪种方法确实取决于您的基础架构和项目需求。
历史
- 2011 年 2 月 25 日:初次发布